Ca bogue ou c'est mes yeux ?

Le
Daniel.C
Bonjour à tous.
Microsoft donne l'exemple suivant pour la méthode Find :
***
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
***
L'erreur est sur la ligne Loop
Si c "is nothing", c.Address renvoie une erreur, d'où plantage.
Dites-moi si je me trompe.
Merci d'avance.
Daniel
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pounet95
Le #21685351
Bonjour,

Pour l'avoir vécu, nombre des exemples donnés ne son, à mon avis, t que des
extraits de procédures et donc il y manque les déclarations de variables,
les instructions de branchements en cas d'erreur, etc,etc
A prendre avec des pincettes, donc !!

Bonne journée
pounet95

"Daniel.C" discussion :
Bonjour à tous.
Microsoft donne l'exemple suivant pour la méthode Find :
***
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
***
L'erreur est sur la ligne Loop...
Si c "is nothing", c.Address renvoie une erreur, d'où plantage.
Dites-moi si je me trompe.
Merci d'avance.
Daniel


michdenis
Le #21685581
Bonjour Daniel,

Tu recherches une cellule contenant "2" que tu remplaces par 5.
Le problème a cette ligne de code :
Loop While Not c Is Nothing And c.Address <> firstAddress

C'est l'usage de "And". Lorsque toutes les cellules contenant "2"
auront été remplacées par 5, la procédure ne pourra revenir à
l'adresse de la première cellule trouvée, car elle n'existe plus.
La condition de la sortie de la boucle est impossible !

Cette condition devrait alors être suffisante : Loop While Not c Is Nothing
Daniel.C
Le #21685571
Bonjour Denis.
On est bien d'accord !
Cordialement.
Daniel

Bonjour Daniel,

Tu recherches une cellule contenant "2" que tu remplaces par 5.
Le problème a cette ligne de code :
Loop While Not c Is Nothing And c.Address <> firstAddress

C'est l'usage de "And". Lorsque toutes les cellules contenant "2"
auront été remplacées par 5, la procédure ne pourra revenir à
l'adresse de la première cellule trouvée, car elle n'existe plus.
La condition de la sortie de la boucle est impossible !

Cette condition devrait alors être suffisante : Loop While Not c Is Nothing
Daniel.C
Le #21685561
Lu un peu vite; Si il n'y a ps de modification, c'est :
Loop While c.Address <> firstAddress
qu'il faut choisir.
Daniel

Bonjour Daniel,

Tu recherches une cellule contenant "2" que tu remplaces par 5.
Le problème a cette ligne de code :
Loop While Not c Is Nothing And c.Address <> firstAddress

C'est l'usage de "And". Lorsque toutes les cellules contenant "2"
auront été remplacées par 5, la procédure ne pourra revenir à
l'adresse de la première cellule trouvée, car elle n'existe plus.
La condition de la sortie de la boucle est impossible !

Cette condition devrait alors être suffisante : Loop While Not c Is Nothing
michdenis
Le #21685781
| Si il n'y a ps de modification, c'est :
| Loop While c.Address <> firstAddress

Dans ce cas, les 2 conditions devraient se réaliser :
Loop While Not c Is Nothing And c.Address <> firstAddress

Cependant, il faut faire attention au traitement fait à l'intérieur
de la boucle Do.... Loop While et de son impact sur l'environnement
de la feuille de calcul comme sur l'approche Find... FindNext
(Dans certaines boucles, l'usager qui désire supprimer des lignes
ou des colonnes...)
Daniel.C
Le #21686091
Dans ce cas, les 2 conditions devraient se réaliser :
Loop While Not c Is Nothing And c.Address <> firstAddress



Oui, pas d'erreur, la première condition est seulement inutile.
Daniel
Publicité
Poster une réponse
Anonyme