Boucle while() VBA

Résolu/Fermé
Poloux - 17 avril 2012 à 12:06
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 17 avril 2012 à 18:19
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

Bonjour,

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

:)
0
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
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 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 17/04/2012 à 14:35
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
Je viens d'apprendre quelque chose. Merci.

Pour l'erreur, Poloux l'avait mis dans son premier post : c'est l'erreur 1004 .
0
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 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 avril 2012 à 15:10
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
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
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
Ok. Je test ça et je te tiens au courant :).
0
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 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 avril 2012 à 16:43
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
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 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
17 avril 2012 à 18:19
Mais non, tu dois pas créer un nouveau poste, tu le met ici.
0