VBA Excel : .Find qui fonctionne dans un cas et pas l'autre

Résolu
mikel831 Messages postés 120 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 28 avril 2024 - Modifié le 25 avril 2024 à 12:29
yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 - 28 avril 2024 à 10:18

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

A voir également:

1 réponse

yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 1 479
25 avril 2024 à 17:22

bonjour,

Rien ne prouve que Worksheets(2) et Sheets("Feuil2") correspondent au même objet.

1
mikel831 Messages postés 120 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 28 avril 2024 10
Modifié le 25 avril 2024 à 18:32

Merci pour ta réponse!
Effectivement, en recherchant, j'ai compris la différence: Worksheet(2) est une référence par index, alors que Sheets("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 ???
 

0
yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 1 479 > mikel831 Messages postés 120 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 28 avril 2024
26 avril 2024 à 10:49

Pourquoi fais-tu le test "c.Address <> firstAddress", si tu ne t'attends pas à ce que cela continue à boucler et donne à nouveau le premier résultat?

Le code que tu as partagé ne "donne" rien et ne fait rien sur les cellules trouvées.

0
yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 1 479 > mikel831 Messages postés 120 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 28 avril 2024
26 avril 2024 à 10:52

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?

0
mikel831 Messages postés 120 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 28 avril 2024 10 > yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024
26 avril 2024 à 17:03

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

0
yg_be Messages postés 22754 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 4 mai 2024 1 479 > mikel831 Messages postés 120 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 28 avril 2024
26 avril 2024 à 21:30

C'est une bonne idée d'éviter Find() et Findnext() tant que tu ne les comprends pas.

0