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 SubJusque 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 SubEnsuite 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 SubQuelle 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