VBA Excel : .Find qui fonctionne dans un cas et pas l'autre
Résoluyg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Dans Feuille2, j'ai une zone A1:C500 avec une quinzaine de cellules qui contiennent le nom de différentes concessions. Je cherche à localiser leurs adresses. Dans ce bout de code:
Sub Test_4_Selection_Find()
Dim c As Range
Sheets("Feuil2").Select
Dim firstAddress As String
Texte = "Consessions"
Range("A1:C500").Select
Set c = Selection.Find(Texte)
MsgBox c.Address
Stop
With Worksheets(2).Range("A1:C500")
Set c = .Find(Texte)
MsgBox c
Stop
If Not c Is Nothing Then
firstAddress = c.Address
Do
'c.Value = Replace(c.Value, Texte, "xyz")
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Stop
End Sub
1) le premier Selection.Find fonctionne et me renvoie bien l'adresse de la cellule
2) le second .Find me renvoie Nothing et je ne comprends pas pourquoi ???
Je ne trouve pas mon erreur ...
Windows / Chrome 124.0.0.0
1 réponse
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
Rien ne prouve que Worksheets(2) et Sheets("Feuil2") correspondent au même objet.
-
Merci pour ta réponse!
Effectivement, en recherchant, j'ai compris la différence:Worksheet(2)est une référence par index, alors queSheets("Feuil2")est une référence par nom.
Si je remplace par Worksheets("Feuil2"), ça passe ....
Pour mon exemple, Feuil2 contient quatre cellules qui correspondent au texte recherché . Le code trouve bien ces quatre adresses situées dans la zone en C230 (la 1ère), C234, C236, C238 (la dernière) mais il redonne en dernier C230 ???
-
-
As-tu bien lu la remarque concernant ce que fait la recherche quand elle atteint la fin de la plage de recherche spécifiée?
-
Comme indiqué dans mon message d'origine, le but de ce bout de code Test est de localiser l'adresse des cellules d'une plage contenant un texte donné.
J'ai finalement abandonné les .Find et .FindNext pour revenir à une technique basique simple et efficace: analyser cellule par cellule avec une classique boucle FOR...Next : ça fonctionne comme je le souhaite et sur quelques centaines de cellules, ça ne plombe pas le temps d'exécution.
Merci pour ton aide. Cordialement, Mikel -
-