Macro paraît limitée en nombre de lignes de code
Bonjour,
J'ai un code VBA-excel qui fait environ 210 lignes, mais j'en saute beaucoup.
Arrivé à un certain point, quelles que soient les instructions que je veux rajouter, Excel plante quand je lance la macro.
Il ferme tout simplement le programme sans rien dire.
Si je mets au milieu de mon code des crochets pour transformer certaines lignes en commentaire et inactiver quelques instructions,
alors c'est comme si je "gagnais" un droit à rajouter des lignes qui fonctionnent en bas.
Je ne vois pas quel peut être le problème, j'ai tout redémarré, j'ai fait mes mises à jours...
Qu'en pensez-vous ?
Bonjour,
Il faudrait voir le code pour se faire une opinion.
Un fichier anonymisé s.t.p.
Bizz
Bonsoir,
ma nouvelle version d'ArkaLouReeD arrive à 3655 lignes sur un seul module et cela ne plante pas :
Il y a du mélange entre commentaires, ligne de code sur "une ligne", ligne de code sur plusieurs lignes avec le caractère "_", ligne sans code, lignes sans code mais avec des tabulations ou des espaces...
Le problème vient certainement d'ailleurs.
Avez-vous analyser les lignes que vous mettez en commentaire pour que cela fonctionne ? Le problème ne doit pas être bien loin...
Je rejoins Bizarre (vous avez dit bizarre, comme c'est bizarre !
@ bientôt
LouReeD
Sub Macro1()
' Macro1 Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+T
'
Dim i As Integer
'supprime l'ancien ExtrF et faite une nouvelle copie de la databrute
Sheets("ExtrFacturesSA").Select
ActiveWindow.SelectedSheets.Delete
Sheets("databrut").Copy after:=Sheets(1)
Sheets("databrut (2)").Select
Sheets("databrut (2)").Name = "ExtrFacturesSA"
' Calcule le nombre de lignes de données
Dim DerniereLigne As Integer
Range("A1").Select
DerniereLigne = ActiveSheet.UsedRange.Rows.Count
'met en tableau
Application.CutCopyMode = False
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$O" & DerniereLigne), , xlYes).Name = _
"Tableau2"
Range("Tableau2[#All]").Select
ActiveSheet.ListObjects("Tableau2").TableStyle = "TableStyleLight1"
Range("B2").Select
' Enlève le fond blanc
Columns("A:M").Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'Données>convertir sur la dolonne EDE pour préparer la rechercheV
Columns("F:F").Select
Selection.TextToColumns Destination:=Range( _
"Tableau2[[#Headers],[N° CHEPTEL]]"), DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1) _
, TrailingMinusNumbers:=True
' tri en colonne 2 : N° de dossiers, croissant
ActiveWorkbook.Worksheets("ExtrFacturesSA").ListObjects("Tableau2").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("ExtrFacturesSA").ListObjects("Tableau2").Sort. _
SortFields.Add2 Key:=Range("Tableau2[[#All],[N° dossier]]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("ExtrFacturesSA").ListObjects("Tableau2").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'calcule le nb de lignes non vides en colonne 2
Dim DerniereLignePleine As Integer
DerniereLignePleine = [B1].End(xlDown).Row
'Supprime les lignes sans numéro de dossier (=sous-totaux du fichier brut)
Rows(DerniereLignePleine + 1 & ":" & DerniereLigne).Select
Selection.Delete Shift:=xlUp
' Créee une nouvelle feuille "dossiers IBR" et la place à la fin
Worksheets.Add.Name = "dossiersIBR"
Worksheets("dossiersIBR").Move _
after:=Worksheets("Types")
Worksheets("ExtrFacturesSA").Select
'Copie-colle dans l'onglet prévu tous les numéros de dossier qui contiennent de l'IBR
Dim x As Integer
x = 1
For i = 2 To DerniereLignePleine
If InStr(1, Cells(i, 10), "IBR") Then 'test qui renvoie true si le libellé contient la châine IBR
Worksheets("dossiersIBR").Cells(x, 1) = Worksheets("ExtrFacturesSA").Cells(i, 2)
Worksheets("dossiersIBR").Cells(x, 2) = 1
x = x + 1
End If
Next
'Crée une colonne adhésion, Adhésion Cp, type, et IBR :
Range("P1").Select
ActiveCell = "Adhésion"
Range("Q1").Select
ActiveCell = "Adhésion-CP"
Range("R1").Select
ActiveCell = "dossierIBR"
Range("S1").Select
ActiveCell = "Type"
'Mise en page largeur des colonnes et colones masquées
Columns("G:G").Select
Selection.EntireColumn.Hidden = True
Columns("F:F").ColumnWidth = 11.14
Columns("I:I").Select
Selection.EntireColumn.Hidden = True
Columns("L:L").ColumnWidth = 10.14
Columns("M:M").ColumnWidth = 7.14
Columns("M:M").ColumnWidth = 8.57
Columns("N:N").Select
Selection.EntireColumn.Hidden = True
Columns("O:O").Select
Selection.EntireColumn.Hidden = True
'RechercheV pour le type
Range("S2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP([@[Motif.]]&[@[Libellé analyse]],Types!C[-16]:C[-15],2,FALSE)"
'RechercheV pour l'info d'adhésion BV
' Range("P2").Select
' ActiveCell.FormulaR1C1 = _
' "=VLOOKUP([@[N° CHEPTEL]],'[adherentsNonAdherents.xls]ADH ET NON ADH'!C2:C13,12,FALSE)"
'RechercheV pour l'info d'adhésion CP
' Range("Q2").Select
' ActiveCell.FormulaR1C1 = _
' "=IFERROR(VLOOKUP([@[N° CHEPTEL]],'[ADH - N ADH OVINSCAPRINS 2023_2024.xlsx]GLOBAL'!C1:C30,30,FALSE),"""")"
' RechercheV pour le statut IBR du dossier
Range("R2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP([@[N° dossier]],dossiersIBR!C[-17]:C[-16],2,FALSE)"
' Fige les 4 dernières colonnes (les recherches V)
Range("P2:S2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
' Créee une nouvelle feuille pour chaque type
Worksheets.Add.Name = "AIDE DIAG"
Worksheets.Add.Name = "AVO"
Worksheets.Add.Name = "BESNO"
Worksheets.Add.Name = "BVD"
Worksheets.Add.Name = "DIARVO"
Worksheets.Add.Name = "IBR"
Worksheets.Add.Name = "PTB"
Worksheets.Add.Name = "PTRU"
Worksheets.Add.Name = "PXIE"
Worksheets.Add.Name = "SALMO"
' Bouge les feuilles databrut et ExtrFacures pour qu'elles soient au début
Worksheets("ExtrFacturesSA").Move _
after:=Worksheets("databrut")
Worksheets("Types").Move _
after:=Worksheets("ExtrFacturesSA")
'Copie-colle les en-têtes du tableau dans chaque feuille de type
Sheets("ExtrFacturesSA").Select
Range("Tableau2[#Headers]").Select
Selection.Copy
For i = 4 To 13
Sheets(i).Select
Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Range("T1") = 2 ' crée dans chacune des feuille une variable en cellule T0, qui sera incrémentée pour en connaître le nb de lignes et savoir où coller la suivante à chaque fois
Range("A1").Select
Next
Application.CutCopyMode = False 'ça permet que la zone en presse-papier pour le copier-coller n'y soit plus
Sheets("ExtrFacturesSA").Select
Range("A1").Select
DerniereLigne = [B1].End(xlDown).Row 'réactualise cette variable pour connaître la taille du tableau
For i = 2 To 30
Cells(i, 19) = "TEST"
Next
End SubEn gros là ma boucle tout à la fin, quand je mets For i=1 To 5 ça fonctionne, si je mets i=1 To 30 ça plante, si je mets d'autres instructions complètement différentes ça plante, mais si je supprime des instructions plus haut (par exemple des instructions qui ajustent la largeur des colonnes - aucune conséquence sur le reste du script), ça remarche
Bonjour,
Il y a bien une limite à la taille d'un module VBA (elle est de 64 Kb, pour la version compilée). Je ne pense pas que l'on atteigne cette limite avec le peu de lignes de ton code. Il y a sans doute une corruption.
Essaie de recréer ton classeur en recopiant les données, sans les macros, puis en recopiant les macros.
Bonjour à tous,
Si on parle bien de cette boucle à la fin du code :
For i = 2 To 30
Cells(i, 19) = "TEST"
NextCe que je comprends en lisant ton code, cela fait référence à "Tableau2", un tableau structuré.
Quelle est l'intention de cette boucle : écrire "TEST" dans la colonne 19 du "Tableau2" ou écrire "TEST" dans la colonne 19 du "Tableau2" et ajouter au besoin des lignes jusqu'au nombre déterminé dans la boucle, ici, ce serait "30" lignes ?
Bizz
Hello,
Non ce n'est pas prévu de rajouter de ligne au tableau.
A terme cette boucle va servir à passer en revue toutes les lignes du Tableau 2.
Je vais rajouter un test If, et en fonction de ce qu'il y a en colonne 18 et ne colonne 10, la valeur en colonne 19 sera parfois modifiée.
Mais bon là j'arrive pas à aller jusqu'à cette étape, ça crashe avant.
Problème résolu merci !!
J'ai fait copier-valeurs dans un autre fichier, puis j'ai transféré la macro.
Donc peut-être une corruption.
Bonsoir,
merci pour ce retour ! Comme cela la solution pourra servir à d'autre utilisateurs !
@ bientôt
LouReeD