[résolue]un souci dans une macro qui marchait avant

stephsteph

XLDnaute Occasionnel
Bonjour à tous,


Et tout d’abord mes meilleurs vœux à tous ceux qui font vivre ce forum par leur dévouement et leur aide !



J’ai une macro qui marchait avant et qui bugge maintenant avec le message d’erreur suivant

Erreur d’exécution ‘1004’

Erreur définie par l’application ou par l’objet

à la ligne .Range("A2").Resize(UBound(Tbl, 1), UBound(Tbl, 2)) = Tbl

La macro est une série d’opérations simples qui se répètent 9 fois pour créer des fichiers csv.

Ce qui m’étonne énormément c’est que les 3 premières fois çà marche comme avant, et quand il arrive à la 4ème série il plante.



Une série est de type, et en particulier la 4ème série est (les seules différences entre les séries sont le nom du fichier blabla de 1 à 9 et bien sûr la liste des colonnes sélectionnées dans array

Code:
LigneDebut = 13

  MesColonnes = Array(78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96)

  'Chemin = ThisWorkbook.Path & "\"  'si les fichiers sont dans le même dossier ou si autre dossier "C:\MonDossier\MonSousDossier\"

  Chemin = "D:\_ \"  'si les fichiers sont dans le même dossier ou si autre dossier "C:\MonDossier\MonSousDossier\"

  NomFichier = "blabla4.xlsx"

  '***

  Application.ScreenUpdating = False

 

  Set WbSource = ThisWorkbook

 

  With WbSource.Worksheets("xxxx")

  Adr = DerCell(WbSource.Worksheets("xxxx")).Address

  a = .Range("A" & LigneDebut, Adr)

  End With

 

  ReDim Tbl(1 To UBound(a, 1), 1 To UBound(MesColonnes) + 2)

 

  For c = LBound(MesColonnes) To UBound(MesColonnes)

  For L = 1 To UBound(a, 1)

  Tbl(L, 1) = L

  Tbl(L, c + 2) = a(L, MesColonnes(c))

  Next L

  Next c

 

  Workbooks.Open Filename:=Chemin & NomFichier

   Set WbDest = ActiveWorkbook

 

  With WbDest.Worksheets("Feuil1")

  L = .Range("A65536").End(xlUp).Row

  .Range("A2:CZ" & L) = ""  'efface

  .Range("A2").Resize(UBound(Tbl, 1), UBound(Tbl, 2)) = Tbl

  End With

 

 

  Windows("blabla4.xlsx").Activate

 

  ActiveWorkbook.Save

 

  ActiveWorkbook.SaveAs Filename:="D:\_blabla4.csv", FileFormat:=xlCSV, local:=True, CreateBackup:=False

 

  'WbDest.Close savechanges:=True

 

  Application.ScreenUpdating = True

  Application.Calculation = xlCalculationAutomatic

  'fin de routine



La seule différence entre les séries c’est bien la sélection des colonnes et je n’ai rien changé.

J’ai regardé les colonnes 78 à 96 dans le fichier de départ et rien ne semble avoir changé !

Qu’en pensez-vous ? Des pistes ?



Merci d’avance



Steph
 

stephsteph

XLDnaute Occasionnel
Bonjour Bruno,

Merci de la réaction rapide !
Je ne suis pas sûre d'avoir compris la modification à apporter à
Adr = DerCell(WbSource.Worksheets("xxxx")).Address
J'ai essayé
Adr = DerCell(WbSource.Worksheets("xxxx"))
mais le plantage est le même
ou
Adr = DerCell(WbSource)
mais là l'erreur porte sur la ligne modifiée.
C'est possible de préciser?
De toute façon ce qui me perturbe c'est que la macro fait les 3 premiers blabla, 1, 2 et 3 bien puis plante sur blabla4.
Par rapport à la fois ou cela marchait pour les 9 blablas en séquence, rien n'a changé dans la sélection des colonnes.
Seules des lignes ont été ajoutées au fichier à traiter et certaines cellules sont plus longues.

A+

Steph
 

stephsteph

XLDnaute Occasionnel
Re-bonjour Bruno,



J’ai une piste !

Avec mon intuition (féminine), j’ai eu l’idée de copier le contenu de la colonne 78 et ses plus de 1500 lignes dans MSWord en gardant le formatage, et…

Effectivement dans 2 lignes le texte apparaît tronqué.

Donc j’ai réduit les texte de ces 2 lignes et la macro remarche (et elle va jusqu’à blabla9).

C’est bien mais c’est ennuyeux car je ne peux réduire le texte de ces 2 lignes qui pose problème quelque part dans le transfert au blabla4.xslx, puis dans blabla4.csv (cela ne semble pas poser de problème dans le fichier initial).

Que faire ?

A tout hasard je copie ci-après le code la fonction dans la macro :

Code:
Function DerCell(Ws As Worksheet) As Range

  Dim derLi As Long, derCol As Long

  On Error GoTo fin

  derLi = Ws.Cells.Find("*", [A1], , , 1, 2).Row

  derCol = Ws.Cells.Find("*", [A1], , , 2, 2).Column

  Set DerCell = Ws.Cells(derLi, derCol)

  Exit Function

fin:

  Set DerCell = Ws.Cells(1, 1)

End Function



A+

Steph
 

stephsteph

XLDnaute Occasionnel
Bonjour,



UP, je relance ce fil sans solution, mais très important pour moi.



D'après Microsoft le nombre maximal de caractères qu’une cellule peut contenir est: 32 767 caractères

source : https://support.office.com/fr-fr/ar...-à-Excel-1672b34d-7043-467e-8e27-269d656771c3



Mais chez moi les 2 cellules qui posent problème pour le fonctionnement de la macro VBA en ont

10515

10466

Donc il doit y avoir un maximum de caractères différent par cellule en VBA ou alors la VBA doit être modifiée pour permettre 32 767 caractères.



Merci de votre aide!



Steph
 

Discussions similaires

Statistiques des forums

Discussions
314 095
Messages
2 105 823
Membres
109 437
dernier inscrit
lorenzeb