Vérifier la présence d'une chaine de caractére dans une autre en VBA

frederic974

XLDnaute Nouveau
Bonjour,
j'ai une macro qui ne fonctionne pas vraiment comme je veux alors je me permet de solliciter des experts.
Le problème est simple et tout d'abord je précise qu'il me faut un code vba (autrement dit je ne veux pas de formule de calcul)
J'ai un ensemble de mot appelé cible (exemple engrenage, problème etc)
Dans ma cellule A1 je vais avoir un texte d'environs 20 mots
Je souhaite tester la présence d'un mot cible dans la cellule A1.

Mon code fonctionne si il y a un seul mot dans la cellule A1
Exemple si je met engrenage dans A1 alors il détecte la présence du mot mais si je met une phrase qui contient le mot engrenage cela ne fonctionne plus.

Voici mon fichier pour être plus claire
 

Pièces jointes

  • cherche trouve vba.xlsm
    13.5 KB · Affichages: 49

Roland_M

XLDnaute Barbatruc
Re : Vérifier la présence d'une chaine de caractére dans une autre en VBA

bonjour,

Code:
Sub RechercheMultiple()
    Dim Tablo
    Tablo = Array("engrenage", "reducteur", "courroie")
    For I = 0 To 2
     If InStr(Range("A1"), Tablo(I)) = 0 Then MsgBox "Non" Else MsgBox "Oui"
    Next
End Sub
 

Pièces jointes

  • checher trouve vba.xlsm
    13.6 KB · Affichages: 50
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Vérifier la présence d'une chaine de caractére dans une autre en VBA

Bonjour à tous

Essaie ce biais
(test ok avec ton fichier exemple)
Code:
Sub RechercheMultiple()
    Dim Cible As String
    Dim i, j
    Cible = "engrenage,reducteur,courroie"
    tmp = Split(Cible, ",")
    For i = LBound(tmp) To UBound(tmp)
    j = j + InStr(Range("A1").Text, tmp(i))
    Next i
    If j = 0 Then
        MsgBox "Non"
    Else
        MsgBox "Oui"
    End If
End Sub

EDITION: houps pas rafraichi à temps, Bonjour Roland_M
 
Dernière édition:

frederic974

XLDnaute Nouveau
Re : Vérifier la présence d'une chaine de caractére dans une autre en VBA

Bonjour à tous

Essaie ce biais
(test ok avec ton fichier exemple)
Code:
Sub RechercheMultiple()
    Dim Cible As String
    Dim i, j
    Cible = "engrenage,reducteur,courroie"
    tmp = Split(Cible, ",")
    For i = LBound(tmp) To UBound(tmp)
    j = j + InStr(Range("A1").Text, tmp(i))
    Next i
    If j = 0 Then
        MsgBox "Non"
    Else
        MsgBox "Oui"
    End If
End Sub

EDITION: houps pas rafraichi à temps, Bonjour Roland_M

Bonjour,
Merci effectivement ce code fonctionne j'ai cherché et le split permet effectivement de scinder la chaines de caractéres...
Merci bcp!
Cdt
 

Roland_M

XLDnaute Barbatruc
Re : Vérifier la présence d'une chaine de caractére dans une autre en VBA

bonsoir

mais frederic974, as-tu au moins vu et essayais le code que je t'ai mis ?
il n'y a pas besoin de split !? autant mettre directement dans un array() !


Code:
Sub RechercheMultiple()
Dim Tablo
Tablo = Array("engrenage", "reducteur", "courroie")
For I = 0 To 2
 If InStr(Range("A1"), Tablo(I)) = 0 Then MsgBox "Non" Else MsgBox "Oui"
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Vérifier la présence d'une chaine de caractére dans une autre en VBA

Bonsoir Roland_M

Roland_M
Moi aussi, je suis dans l'array avec mon tmp ;)
Et j'aime bien le Split (ça me rappelle Lio et les années 80.)
Et tu comprendras que par un accès d’égoïsme, je ne peux que féliciter frederic d'avoir choisi ma solution à moi.
Néanmoins, si j'étais moi, j'opterai pour ta syntaxe sans hésiter, mais ensuite mon égo en souffrirait terriblement ;)
Mais qui suis-je pour m'autoriser à me dire ce est mieux pour moi ;) ?
Hein! Tu peux me le dire ? de toi à moi.

NB: Mon but ultime a été de préservé la Cible coute que coute.
Ce que ton code ne fait pas ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 180
Messages
2 085 995
Membres
103 082
dernier inscrit
adri77