Utilisation de l'objet find

Résolu
Bonjour,

Je viens demander de l'aide car je ne sais pas comment procéder.

J'ai crée une userform avec 2 textbox et un bouton.

- textbox1 est l'intitulé de ma recherche
- textbox2 est le résultat de ma recherche
- le bouton sert à lancer la recherche

Je souhaite rechercher dans la colonne "I" d'une feuille de calcul un mot clé (que je rentre dans la textbox1) et que le nom figurant dans la colonne "A" de la meme ligne s'inscrive dans la textbox2

J'ai le code qui fonctionne mais la recherche s'arrete au premier trouvé et je souhaiterais avoir, toutes les cellules correspondantes au mot clé, à la suite.

Private Sub CommandButton1_Click()
Dim Trouve As Range
Dim ligne As Integer
Dim col As Integer

With Sheets("Ma Cave")
Set Trouve = .Columns("I").Cells.Find(Me.TextBox1.Text, LookAt:=xlPart)

If Trouve Is Nothing Then
MsgBox "pas trouvé"

Else
ligne = Trouve.Row
col = Trouve.Column
TextBox2 = Sheets("Ma Cave").Cells(" & ligne & ", " & col & ").Offset(0, -8).Value
End If
End With
End Sub

Merci d'avance

--

8 réponses

  1. c'est ça qui change tout : "*" & Ref & "*"

    Ca marche, merci pour le coup de main. Bonne journée
    0
    1. Non ça na change rien.

      --
      0
      1. Contributeur
        Ci joint ma maquette de travail où ça fonctionne
        https://www.cjoint.com/?3JqnNF8lZy6

        peut-être mettre ton classeur (ou un extrait) en pièce jointe

        pour joindre une pièce
        mettre le classeur sans données confidentielles en pièce jointe sur
        https://www.cjoint.com/
        puis copier l'adresse du lien et la coller dans le message de réponse
        0
    2. Merci michel, j'ai bien avancé, malgré tout je bloque encore sur les cellules composées de plusieurs mots. Dans ta maquette si je rajoute des autres mots dans les cellules "I" ça ne marche plus correctement et je ne trouve pas la solution.

      --
      0
      1. Contributeur
        Bonjour

        essaies
        Ligne = .Columns("I").Cells.Find(What:=Ref, after:=.Cells(Ligne, "I"), lookat:=xlPart).Row
        a la place de
        Ligne = .Columns("I").Cells.Find(Ref, .Cells(Ligne, "I"), xlValues).Row
        tu dis
        0
    3. Contributeur
      Désolé,"Ca marche" après modifs de syntaxe surlignées

      Private Sub CommandButton1_Click()
      Dim Nbre As Integer, Ref As String
      Dim Ligne As Integer, Cptr As Integer

      Application.ScreenUpdating = False
      Ref = Me.TextBox1.Text
      With Sheets("Ma Cave")
      Nbre = Application.CountIf(Columns("I"), Ref)
      If Nbre > 0 Then
      Ligne = 1
      For Cptr = 1 To Nbre
      Ligne = .Columns("I").Cells.Find(Ref, .Cells(Ligne, "I"), xlValues).Row
      ListBox1.AddItem .Cells(Ligne, "A")
      Next
      Else
      MsgBox "pas trouvé", vbCritical
      End If
      End With
      End Sub


      La maquette
      https://www.cjoint.com/?3JoppQFQjxk
      0
      1. Bonjour,

        Pour plus de simplicité, peux tu mettre ton fichier sur cjoint.com et mettre le lien ici stp.
        0
        1. Merci pour vos réponses mais ça marche pas, meme après avoir corrigé quelques bugs.
          --
          0
          1. Contributeur
            Bonjour,

            Comme tu veux voir tous les éléments correspondants à ton choix, il ne faut utiliser un Textbox(textbox2) qui ne renvoie qu'une valeur mais une Listbox qui elle renvoie N valeurs et permet de sélectionner 1 ou plusieurs Valeurs de A

            Tu renvoie toujours la valeur de la colonne A donc tu peux remplacer
            Sheets("Ma Cave").Cells(" & ligne & ", " & col & ").Offset(0, -8).Value
            par cells(Ligne,"A")

            proposition (non testée) en ne bouclant que sur le nombre de mots clé choisi)
            ( on suppose que la ligne1 est dédiée aux noms de champ)

            Private Sub CommandButton1_Click()
            Dim Nbre As Integer, Ref As String
            Dim Ligne As Integer, Cptr As Integer

            Application.ScreenUpdating = False
            Ref = Me.TextBox1.Text
            With Sheets("Ma Cave")
            Nbre = Application.CountIf(Columns("I"), Ref)
            If Nbre > 0 Then
            Ligne = 1
            For Cptr = 1 To Nbre
            Ligne = .Columns("I").Cells.Find(Ref, .Cells(Ligne, "I"), xlValues).Row
            Me.ListBox1.AddItem = .Cells(Ligne, "A")
            Hext
            Else
            MsgBox "pas trouvé", vbCritical
            End With
            End Sub

            petit détail: "find" n'est pas un objet mais une méthode :o)
            Michel
            0
            1. Bonjour,

              essaie ca :

              Private Sub CommandButton1_Click()
              Dim Trouve As Range
              Dim ligne As Integer
              Dim col As Integer

              textbox2.value = ""
              for i = 1 to 10000
              if Sheets("Ma Cave") .cells(i,9) = Me.TextBox1.Text
              ligne = Trouve.Row
              col = Trouve.Column

              If textbox = "" then
              TextBox2 = Sheets("Ma Cave").Cells(" & ligne & ", " & col & ").Offset(0, -8).Value
              else
              textbox2= textbox2 & vbnewline & Sheets("Ma Cave").Cells(" & ligne & ", " & col & ").Offset(0, -8).Value

              End If
              end if
              next

              if textbox2.value = "" then
              MsgBox "pas trouvé"

              end if
              End Sub
              0