Boucle + .FindNext ne trouve pas toutes mes occurences

Bonjour,

J'ai un fichier excel avec toutes mes infos sur une seul page.

Un bloc de lignes pour l'année 2016 avec toutes les personnes pour 2016 et ainsi de suite pour 2017, 2018 Etc...

Je souhaite trouver dans la colonnes des noms toutes les cellules contenant ma valeur cherchée.

Si le résultat cherché est trouvé, il apparaît dans une ListBox et ainsi de suite pour les autres résultats.

Mon problème est que je trouve bien un résultat, je cherche bien le résultat suivant mais je dois avoir un problème dans ma boucle car lors de tout mes tests je n'arrive à afficher que deux résultats dans ma ListBox, surement le résultat de Find et le résultat de FindNext.

Je ne comprend pas pourquoi je n'ai que 2 résultats.

Par exemple pour "James" qui a une ligne présente dans chaque bloc de chaque année, il devrait apparaitre 4 fois et non pas 2 fois dans ma ListBox.

Merci d'avance!

Edit: je débute avec le visual basic

Mon code ici ==>

Private Sub RechercheButton1_Click()
Dim Val_chercher As Range
Dim Val_trouver As Range
Dim Value As String
Dim result As String

Set Val_chercher = Worksheets("Feuil2").Range("C2:C171")
'zone de recherche
'Vidage de la ListBox1
ListBox1.Clear

   With Val_chercher
       Set Val_trouver = .Find(TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart)
       ' si le resultat chercher est trouvé
       If Not Val_trouver Is Nothing Then
            result = Val_trouver.Address
            'Set Val_chercher = .FindNext(Val_chercher)
            UserForm1.ListBox1.AddItem Val_trouver.Value
            'c.Select
            'essais de boucle + addlistebox
            Do
            Set Val_trouver = .FindNext(Val_trouver)
            Loop While Not Val_trouver Is Nothing And Val_trouver.Address = result
            UserForm1.ListBox1.AddItem Val_trouver.Value
       ' si résultat pas trouvé
       Else
            Value = MsgBox(TextBox1.Value & " résultat PAS trouvé!")
       End If
   End With

End Sub

Bonjour,

à tester,

Private Sub RechercheButton1_Click()
Dim Val_chercher As Range
Dim Val_trouver As Range
Dim Value As String
Dim result As String

ListBox1.Clear
Set Val_chercher = Worksheets("Feuil2").Range("C2:C171")

   With Val_chercher
       Set Val_trouver = .Find(TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart)

       If Not Val_trouver Is Nothing Then
            result = Val_trouver.Address

            Do
                Set Val_trouver = .FindNext(Val_trouver)
                UserForm1.ListBox1.AddItem Val_trouver.Value
            Loop While Not Val_trouver.Address = result

       Else
            Value = MsgBox(TextBox1.Value & " résultat PAS trouvé!")
       End If
   End With
End Sub

Merci pour votre retour.

En continuant à debug se petit morceau de code, je me suis dis que l'instruction ci-dessous bloqué la suite de la boucle, enfin sans en être sûr.

UserForm1.ListBox1.AddItem Val_trouver.Value

Du coup j'ai remis le bloc de la boucle à la suite, et là en effet je réussi bien a trouver les 4 occurences de ma recherche.

Par contre je pense que je "triche" un peu en faisant ça et en plus je rajoute du code superflue...

       If Not Val_trouver Is Nothing Then
            result = Val_trouver.Address
            'Set Val_chercher = .FindNext(Val_chercher)
            UserForm1.ListBox1.AddItem Val_trouver.Value
            'c.Select
            'essais de boucle + addlistebox
            Do
            Set Val_trouver = .FindNext(Val_trouver)
            Loop While Not Val_trouver Is Nothing And Val_trouver.Address <> result
            UserForm1.ListBox1.AddItem Val_trouver.Value
            Do
            Set Val_trouver = .FindNext(Val_trouver)
            Loop While Not Val_trouver Is Nothing And Val_trouver.Address <> result
            UserForm1.ListBox1.AddItem Val_trouver.Value
            Do
            Set Val_trouver = .FindNext(Val_trouver)
            Loop While Not Val_trouver Is Nothing And Val_trouver.Address <> result
            UserForm1.ListBox1.AddItem Val_trouver.Value

Je reste toujours à la recherche d'une solution légère et efficace

bonjour,

proposition de correction

Private Sub RechercheButton1_Click()
    Dim Val_chercher As Range
    Dim Val_trouver As Range
    Dim Value As String
    Dim result As String

    Set Val_chercher = Worksheets("Feuil2").Range("C2:C171")
    'zone de recherche
    'Vidage de la ListBox1
    ListBox1.Clear
    With Val_chercher
        Set Val_trouver = .Find(TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart)
        ' si le resultat chercher est trouvé
        If Not Val_trouver Is Nothing Then
            result = Val_trouver.Address
            Do
                UserForm1.ListBox1.AddItem Val_trouver.Value
                Set Val_trouver = .FindNext(Val_trouver)
            Loop Until Val_trouver.Address = result
            ' si résultat pas trouvé
        Else
            Value = MsgBox(TextBox1.Value & " résultat PAS trouvé!")
        End If
    End With

End Sub

Bonjour,

Bonjour i20100, h2so4,

Une proposition avec un exemple.

Cdlt.

4mh033.xlsm (20.83 Ko)
Private Sub UserForm_Initialize()
    Me.ListBox1.Clear
End Sub

Private Sub CommandButton1_Click()
Dim rngData As Range, Result As Range
Dim FirstResult As String
    Set rngData = Worksheets("Feuil2").Range("C2:C21")
    With rngData
        Set Result = .Find(TextBox1.Text, LookIn:=xlValues, LookAt:=xlPart)
        If Not Result Is Nothing Then
            FirstResult = Result.Address
            Do
                Me.ListBox1.AddItem Result.Value
                Set Result = .FindNext(Result)
            Loop While Not Result Is Nothing And Result.Address <> FirstResult
        Else
            MsgBox (TextBox1.Text & " résultat PAS trouvé !...")
        End If
    End With
End Sub

Merci à vous de vos retours.

J'ai testé les deux solutions.

la solution de Jean-Eric: Fonctionne en retrouvant les 4 occurrences mais même une cinquième qui sort de je ne sais pas où...?! Je réfléchis la-dessus.

La solution de h2so4: Fonctionne aussi, trouve bien les 4 occurrences mais efface la ListBox et n'en laisse plus qu'une à la fin, je souhaiterai que les 4 occurrences restent dans la ListBox et ne s'efface qu'au démarrage d'une nouvelle recherche.

Je continue mes recherches et mes tests

Re,

Télécharge mon fichier, si tu est autorisé à le faire.

La procédure ne fait pas petits.

Cdlt.

bonjour,

Fonctionne aussi, trouve bien les 4 occurrences mais efface la ListBox et n'en laisse plus qu'une à la fin, je souhaiterai que les 4 occurrences restent dans la ListBox et ne s'efface qu'au démarrage d'une nouvelle recherche.

c'est ce que fait la macro que j'ai fournie. il y a peut-être une interaction avec d'autres parties de ton code ...

Et Bonjour,

Je n'ai pas pu re-tester vos solutions avant cette après-midi car j'ai eu le déménagement de mon service se matin.

Et du coup, en re-testant la solution proposé par i20100, je me rend compte qu'elle fonctionne à merveille. Je ne sais pas se que j'ai fais (ou ce que j'ai oublier de faire) lors de mes tests hier.

Je vous remercie des retours, vraiment efficace et rapide!

Je marque le sujet comme résolu.

Rechercher des sujets similaires à "boucle findnext trouve pas toutes mes occurences"