Utilisation de l'objet find

Résolu
yodjeseb Messages postés 39 Statut Membre -  
 yodjeseb -
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. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. yodjeseb Messages postés 39 Statut Membre
     
    Merci pour vos réponses mais ça marche pas, meme après avoir corrigé quelques bugs.
    --
    0
  4. melanie1324 Messages postés 1561 Statut Membre 156
     
    Bonjour,

    Pour plus de simplicité, peux tu mettre ton fichier sur cjoint.com et mettre le lien ici stp.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  7. yodjeseb Messages postés 39 Statut Membre
     
    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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  8. yodjeseb Messages postés 39 Statut Membre
     
    Non ça na change rien.

    --
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  9. yodjeseb
     
    c'est ça qui change tout : "*" & Ref & "*"

    Ca marche, merci pour le coup de main. Bonne journée
    0