Recherche d'une text ds une feuille de calcul

Résolu
nuxaly Messages postés 27 Statut Membre -  
Polux31 Messages postés 7219 Statut Membre -
Bonjour,

je souhaite que vous pouvez m'aider a resoudre mon problemecar je suis encore debutante en vba.
bon voila le prbleme: j'ai creé un userform qui contient de textbox(textbox1 et textbox2) avec un bouton(CommandButton1) pour chercher les 2 mots taper dans les 2 zones de text dans une feuille de calcule, je veus losque je click sur le bouton le msgbox m'envoi oui s'il exist et non sinon. bon j'ai utiliser la boucle for pour parcourire tous les lignes de ma feuille. le probleme que la boucle for m'affiche le msgbox (oui ou non) rows.count fois (c-a-d le msgbox affiche jusqua la derniere lignes de ma feuille).

le code est :

Private Sub CommandButton1_Click()
Dim Cible As String

Cible1 = TextBox1.Text
Cible2 = TextBox2.Text
n = Rows.Count

For i = 1 To n

If InStr(Cible1, Cells(i, 1)) = 1 And InStr(Cible2, Cells(i, 2)) = 1 Then

MsgBox "oui"

Else

MsgBox "non"

End If

Next i

End Sub

je veus lorsque les 2 mots sont trouvés la recherche arrete et le msgbox affiche "oui ou non" just une fois.
merci d'avance

nuxaly!
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Il faut écrire la boucle de recherche dans une fonction qui renvoie True si elle trouve les 2 mots ou False si elle ne trouve pas :
    Private Sub CommandButton1_Click()
    Dim Cible As String

    Cible1 = TextBox1.Text
    Cible2 = TextBox2.Text

    If SearchMot(Cible1, Cible2) = True Then
    MsgBox "Oui"
    Else
    MsgBox "non"
    End If
    End Sub

    Private Function SearchMot(ByVal c1 As String, ByVal c2 As String) As Boolean
    Dim i As Long

    For i = 1 To Rows.Count
    If (InStr(Cible1, Cells(i, 1)) = 1) And (InStr(Cible2, Cells(i, 2)) = 1) Then
    SearchMot = True
    Exit Function
    Else
    SearchMot = False
    End If
    Next i
    End Function

    ;o)

    polux
    0
    1. nuxaly Messages postés 27 Statut Membre
       
      salut polux,
      merci beaucoup pour ton aide.
      le prbleme reste encore mais cette fois le msgbox affiche just "non" meme si les mots existe dans ma feuille de calcul...
      merci autre fois

      nuxaly!
      0
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    bonjour,

    Je n'ai pas testé le code que je t'ai donné mais je viens de voir que la fonction InStr n'est pas vraiment appropriée pour ce que tu veux faire et que mon code contient des erreurs. Ensuite il faut faire la recherche dans 2 boucles et non dans une comme je te l'ai faite. Il faut d'abord rechercher le premier texte (cible1) dans toute la feuile et si l'on trouve le premier alors on lance une recherche du second mot sur toute la feuille ... Essaies de travailler la dessus, et si tu as des difficultés, n'hésites pas à m'en faire part.

    ;o)
    Polux
    0
    1. nuxaly Messages postés 27 Statut Membre
       
      bonsoir;

      ok j'essaye de faire ce que tu ma dis , et merci de ton aide...

      nuxaly!!
      0
    2. nuxaly Messages postés 27 Statut Membre
       
      salut polux;

      j'ai des difficultés a afficher le contenu d'un plage de cellules, je m'explique: lorsque je trouve les 2 mots recherché je veux que ma listbox m'affiche des info sur les 2 mots . par exemple si les mots sont dans les cellules A3 et B3 alors j e ve affiche le contenu des cellules de A3 à F3 (par exemple) .

      lorsque j ecris : ListBox1.AddItem Range("A & i:F & i").Value il menvoi un message d'erreur : erreur dexecution 1004 et la methode 'range' de l'obget '_global' a echoué.

      merci !!!

      nuxaly!!!
      0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    il faut faire comme ça :
    ListBox1.AddItem Range("A & i).Value & " " & Range("F & i).Value


    ;o)

    Polux
    0