Recherche d'une text ds une feuille de calcul

Résolu
nuxaly Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   -  
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   -
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!

3 réponses

Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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
nuxaly Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   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
nuxaly Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
bonsoir;

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

nuxaly!!
0
nuxaly Messages postés 24 Date d'inscription   Statut Membre Dernière intervention  
 
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
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Bonjour,

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


;o)

Polux
0