Pb fonction Do Loop While dans VBA Excel
Panov
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
tompols Messages postés 1273 Date d'inscription Statut Contributeur Dernière intervention -
tompols Messages postés 1273 Date d'inscription Statut Contributeur Dernière intervention -
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.
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:
- Pb fonction Do Loop While dans VBA Excel
- Fonction si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Fonction moyenne excel - Guide
- Déplacer colonne excel - Guide
1 réponse
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é
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é