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 :

image

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 ! ) quant à son information pour le fichier.

@ 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 Sub

En 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"
    Next

Ce 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.

Bonjour à tous,

Je suggère de lire : https://excel-pratique.com/fr/astuces/tableau-structure

Bizz

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

Rechercher des sujets similaires à "macro parait limitee nombre lignes code"