Boucle while() VBA

Résolu
Poloux -  
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.

5 réponses

Yoda
 
Bonjour,

C'est le "test" qui n'est pas correct.
Sur quoi porte ton test?

:)
0
Poloux
 
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.
0
Yoda
 
Ton erreur est là:

while Sheets(3).Cells(n, "A") = Sheets(3).Cells(n + 1, "A")

Pour référencer une cellule avec Cells(ligne,colonne) il faut deux valeurs numériques.

while Sheets(3).Cells(n, 1)= Sheets(3).Cells(n + 1, 1)

;)
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
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.
0
Yoda
 
Je viens d'apprendre quelque chose. Merci.

Pour l'erreur, Poloux l'avait mis dans son premier post : c'est l'erreur 1004 .
0
Yoda
 
Du coup, puisque la syntaxe etait bonne, c'est surement la valeur n qui est incorrecte, par exemple inférieure ou égale à 0.
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Exact Yoda, mais sans plus de renseignement pas possible de trancher.
Pourrait aussi q'il n'y ai pas 3 feuille, ou qu'elle est protégée ou.. ou..
0
Poloux
 
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.
0
Yoda
 
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)
0
Poloux
 
Ok. Je test ça et je te tiens au courant :).
0
Poloux
 
Je pensais la boucle infini impossible sur du VBA sachant que le nb de ligne est limité à 65000 environ.

Merci du coup de pouce à tout les deux.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
65536 lignes avec Excel 97-2003
Tu devrais revoir ta procédure, si tu poste un exemple de ton classeur (alléger et sans donnée confidentielle) sur CJoint.com ont pourrait voir pour optimiser.
Mettre le lien sur un poste suivant.
0
Poloux
 
Ah ça serait cool, c'est mes début VBA et c'est vrai que ça m'a l'air surchargé.. Ok je vais poster ça d'ici demain je pense. un titre en particulier (sur le post) pour que tu puisse le repérer rapidement ?
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Mais non, tu dois pas créer un nouveau poste, tu le met ici.
0