Boucle while() VBA
Résolu
Poloux
-
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Alors voilà le pb (sur lequel je bloque depuis hier).
J'Imbrique deux boucle while dans un for . en clair ça donne ça :
for i = 1 To nb
while "test"
"intruction"
while "test"
"intruction"
wend
wend
Next
Et le souci est que j'ai une erreur "1004" sur le 2eme while(). et je n'arrive pas à trouver d'ou ça peut provenir? (j'incrémente bien chaque while())
Merci à ceux qui pourrait m'aider.
Alors voilà le pb (sur lequel je bloque depuis hier).
J'Imbrique deux boucle while dans un for . en clair ça donne ça :
for i = 1 To nb
while "test"
"intruction"
while "test"
"intruction"
wend
wend
Next
Et le souci est que j'ai une erreur "1004" sur le 2eme while(). et je n'arrive pas à trouver d'ou ça peut provenir? (j'incrémente bien chaque while())
Merci à ceux qui pourrait m'aider.
5 réponses
Il porte sur l'égalité de deux valeur successive de la même colonne :
while Sheets(3).Cells(n, "A") = Sheets(3).Cells(n + 1, "A")
Wend.
Merci de ton aide.
while Sheets(3).Cells(n, "A") = Sheets(3).Cells(n + 1, "A")
Wend.
Merci de ton aide.
Bonjour,
--> Yoda : Mais si, on peu mettre la lettre sans problème.
-->Poloux : met la procédure complète, comme ça c'est pas possible de détecter l'erreur
Et dis au moins le N° et libellé de l'erreur
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
--> Yoda : Mais si, on peu mettre la lettre sans problème.
-->Poloux : met la procédure complète, comme ça c'est pas possible de détecter l'erreur
Et dis au moins le N° et libellé de l'erreur
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Encore merci de votre aide.
Voila le bout de la procédure en question :
For i = 2 To nb_Ligne
cpt1 = 0
While Sheets(2).Cells(i, "D") = Sheets(2).Cells(i + 1, "D")
n = i
while Sheets(2).Cells(n, "A") = Sheets(2).Cells(n + 1, "A")
If Sheets(2).Cells(n, "G") = "Oui" Then
nbS = nbS + 1
End If
n = n + 1
wend
If nbS > 3 Then
cpt1 = cpt1 + 1
End If
i = n + 1
Wend
Sheets(2).Range("P" & i) = cpt1
Next
Edit : Lermite => la feuille n'est pas protégé, et elle existe bien
Edit2 : ptite explication?
Colonne D j'ai des Noms, colonne A des n° factures.
Une facture "Oui" est une facture validée.
Il peut y avoir plusieur fois le même n° de facture, DONC si la même facture est validée 4 fois (ou plus) : mon compteur augment de 1
Et on passe à un autre n° de facture.
J'espère avoir fais assez clair :s.
Voila le bout de la procédure en question :
For i = 2 To nb_Ligne
cpt1 = 0
While Sheets(2).Cells(i, "D") = Sheets(2).Cells(i + 1, "D")
n = i
while Sheets(2).Cells(n, "A") = Sheets(2).Cells(n + 1, "A")
If Sheets(2).Cells(n, "G") = "Oui" Then
nbS = nbS + 1
End If
n = n + 1
wend
If nbS > 3 Then
cpt1 = cpt1 + 1
End If
i = n + 1
Wend
Sheets(2).Range("P" & i) = cpt1
Next
Edit : Lermite => la feuille n'est pas protégé, et elle existe bien
Edit2 : ptite explication?
Colonne D j'ai des Noms, colonne A des n° factures.
Une facture "Oui" est une facture validée.
Il peut y avoir plusieur fois le même n° de facture, DONC si la même facture est validée 4 fois (ou plus) : mon compteur augment de 1
Et on passe à un autre n° de facture.
J'espère avoir fais assez clair :s.
Je pense que tu entres dans une boucle infinie qui incrémente n au delà de la valeur maxi(je ne sais plus combien le lignes maxi). Il faudrait que tu modifies le test en ajoutant une condition suplémentaire comme ça par exemple
While Sheets(2).Cells(i, "D") = Sheets(2).Cells(i + 1, "D") and (i<=nb_Ligne)
While (Sheets(2).Cells(n, "A") = Sheets(2).Cells(n + 1, "A")) and (n<=nb_Ligne)
While Sheets(2).Cells(i, "D") = Sheets(2).Cells(i + 1, "D") and (i<=nb_Ligne)
While (Sheets(2).Cells(n, "A") = Sheets(2).Cells(n + 1, "A")) and (n<=nb_Ligne)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question