[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