Pb fonction Do Loop While dans VBA Excel

Fermé
Panov Messages postés 4 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 26 mars 2010 - 26 mars 2010 à 09:23
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 - 26 mars 2010 à 10:34
Bonjour,
J'ai un problème avec la fonction Do Loop while de VBA Excel.
J'ai repris la structure de l'exemple de l'aide VBA (voir ci-dessous), mais je ne vois pas comment cette exemple peut fonctionner lorsque la variable est égale à NOTHING.

With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

1er problème : Comment l'instruction peut fonctionner tel qu'écrit ci-dessus sachant que sur le test de fin de boucle, lorsque la variable C est égale à NOTHING, la condition de sortie nécessite également un test de l'adresse d'une variable vide ?

Pour ma part si C est égale à NOTHING le test du Loop While plante ce qui est normal.

2éme problème : Pourquoi lorsque le .Findnext arrive sur la dernière valeur trouvé il ne reboucle pas sur la première (d'où la 2éme condition dans le Loop While) mais renvoi une variable Nothing ?

Merci.

A voir également:

1 réponse

tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
Modifié par tompols le 26/03/2010 à 10:35
bonjour,

en effet cela ne fonctionne pas, dans l'exemple il suffirait de supprimer le "And c.Address <> firstAddress " pour que cela fonctionne.
Le problème ici est que 2 choses sont mélangées : la recherche et le remplacement :
- qd on utilise Find, il boucle effectivement sur les valeurs trouvées mais dans ce cas précis les valeurs sont remplacées dès qu'elles sont trouvées ça ne peut donc pas "boucler" car les valeurs ont été remplacées.
Conclusion : si tu remplaces les valeurs, le test de sortie est c is nothing car tu sors de ta boucle qd il n'y a plus aucune valeur à remplacer, si c'est une simple recherche le test de sortie est c.address <> firstaddress afin de ne pas boucler à l'infini; on ne peut mélanger les 2 tests (car si c is nothing alors c.address ne peut fonctionner)
En espérant avoir été clair....
On entend par une belle solution, la solution simple et facile d'un problème difficile et compliqué
0