Boucle For Next qui bloque à 3200

Bonjour à tous/toutes,

Je viens solliciter votre aider car je bloque complètement sur une macro au boulot...

Je vous joins un fichier, globalement voici ce qu'il faut retenir :

- onglet PARAMETERS : change le tri des données dans DATA TODO (modifier les paramètres change le TCD sur le dernier onglet),

- onglet DATA TODO : ce sont les données source de mon TCD (dans le dernier onglet),

- onglet PICKING LIST : C'est LE TCD qui nous intéresse ! =)

Alors ma macro en question (nommée "Define_Print_Zones") se lance via le bouton au dessus du tableau.

Le but de celle ci est de créer un saut de page à chaque fois que "PAL FINISHED" apparaît dans la colonne D de mon TCD.

J'ai donc écris ma macro comme suit :

Sub Define_Print_Zones()

Dim i As Long                                                   'i est la variable pour incrémenter
Dim DernLigne As Integer                                        'DernLigne est le numero de la dernière ligne de mon tableau croisé

i = 4                                                           'i commence à la valeur 4
DernLigne = Range("G" & Rows.Count).End(xlUp).Row               'On cherche le numero de la dernière ligne de mon tableau

Worksheets("PICKING LIST").Cells.PageBreak = xlPageBreakNone    'Efface tous les sauts de pages déjà définis

    For i = i + 1 To DernLigne                                  'Boucle for de la ligne 4 à la dernière ligne du tableau
        If Cells(i - 1, 4).Value = "PAL FINISHED" Then          'Si la valeur dans la cellule au dessus est "PAL FINISHED" alors
            Cells(i, 4).PageBreak = xlPageBreakManual           'On ajoute un saut de page
        End If                                                  'Fin du Si
    Next                                                        'Incrémentation jusqu'a DernLigne

End Sub

Jusque la tout va bien, mais selon les données dans le TCD, ma macro bug (vers les lignes 3200 souvent) et affiche ceci :

"Erreur d'éxécution '1004':

Impossible de définir la propriété PageBreak de la classe Range".

Voila, je suis preneur de vos pistes pour fiabiliser mon fichier

Merci d'avance à tous

PS : fichier trop volumineux pour etre joint, on essaye sans ok ?

Bonsoir,

pour commencer je définirais les deux variables de la même manière : en effet les lignes d'une feuille allant au delà de 32000 mieux vaut être en "Long" qu'en "Integer" (ce qui n'est pas dérangeant avec les colonnes car elles ne vont, si on puit dire, que jusqu'à environ 16000 colonnes...)

Cela donne ceci :

Sub Define_Print_Zones()
    Dim i As Long
    Dim DernLigne As Long
    DernLigne = Range("G" & Rows.Count).End(xlUp).Row
    Worksheets("PICKING LIST").Cells.PageBreak = xlPageBreakNone
    For i = 5 To DernLigne
        If Cells(i - 1, 4).Value = "PAL FINISHED" Then
            Cells(i, 4).PageBreak = xlPageBreakManual
        End If
    Next
End Sub

Ensuite il y a peut-être une limitation au nombre de "saut de page" sur une feuille, ou bien alors vous essayez d'en mettre un alors qu'il n'y a pas de page "à sauter" ! En effet, dans votre code il n'y a pas de gestion "d'absence de "PAL FINISHED", peut être faut il partir "du bas" et remonter, afin de ne gérer que le nombre exacte de "PAL FINISHED"....

Désolé, je ne puis aller plus loin dans les investigations

@ bientôt

LouReeD

Bonjour,

Tout d'abord merci pour la réponse !

J'avais déjà essayer de changer le type de variable mais comme ma macro crashe vers la 3200eme ligne, on est loin du maximum...

Je pense après avoir fait une recherche que c'est du au nombre de saut de page maximum...

J'ai fait le test en ajoutant un compteur du nombre de saut de page, comme suit. Et la macro plante à "c"=1023....

Sub Define_Print_Zones()

Dim i As Long                                                   'i est la variable pour incrémenter
Dim DernLigne As Long                                        'DernLigne est le numero de la dernière ligne de mon tableau croisé
Dim c As Long

c = 0
i = 4                                                           'i commence à la valeur 4
DernLigne = Range("G" & Rows.Count).End(xlUp).Row               'On cherche le numero de la dernière ligne de mon tableau

Worksheets("PICKING LIST").Cells.PageBreak = xlPageBreakNone    'Efface tous les sauts de pages déjà définis

    For i = i + 1 To DernLigne                                  'Boucle for de la ligne 4 à la dernière ligne du tableau
        If Cells(i - 1, 4).Value = "PAL FINISHED" Then          'Si la valeur dans la cellule au dessus est "PAL FINISHED" alors
            Cells(i, 4).PageBreak = xlPageBreakManual           'On ajoute un saut de page
            c = c + 1

        End If                                                  'Fin du Si
    Next                                                        'Incrémentation jusqu'a DernLigne

End Sub

Quelle pourrait être la parade pour pouvoir contourner le problème ? Quelqu'un aurait il une idée ? Svp

Merci d'avance

Bonjour,

1023 avec le 0 cela fait 1024... et c'est "binaire" ! Il y a donc peut-être une limitation sur le nombre de saut de page !

Essayez d'arrêter la boucle pour arriver à 1022 (par exemple) et ensuite sur la feuille insérez "à la main" de nouveau saut de page et regardez si vous pouvez le faire...

De mon coté sur G.... je n'ai pas trouver de sujet sur le nombre maximum de saut de page par feuille Excel... Mais je n'ai peut-êtr epas formulé la question correctement...

@ bientôt

LouReed

C'est bien la limite du nombre de saut de page qui bloque ma macro.

Merci de ton aide

Bonsoir,

Merci à vous pour vos remerciements !

Mais vous avez résolus le problème tout seul !

@ bientôt

LouReeD

Rechercher des sujets similaires à "boucle next qui bloque 3200"