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 -
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!
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!
A voir également:
- Recherche d'une text ds une feuille de calcul
- Bruler une feuille de laurier - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment supprimer une feuille sur word - Guide
- Comment imprimer en a5 sur une feuille a4 - Guide
3 réponses
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
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
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
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
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!!!
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!!!
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!