VBA - Trouver un mot dans une plage
Résolu
Peon33
-
melanie1324 Messages postés 1561 Statut Membre -
melanie1324 Messages postés 1561 Statut Membre -
Bonjour à toute et à tous !
Malgré mes recherches, je n'arrive pas à trouver une solution à un problème qui au premier plan me semble simple..
J'ai dans la colonne A une grande quantité de mots.
Je cherche les cells ayant un mot en particulier.
Par exemple : je cherche les cells ayant le mot "toto"
Pour :
- toto : ça doit fonctionner
- toto galére : ça doit fonctionner
- totoo : ça ne doit pas le prendre
-toto33 : ça ne doit pas le prendre
..etc
Les fonctions find, instr ou like ne me permettent pas de sélectionner uniquement les cellules comportant mon mot exact...
quelqu'un pourrait il éclairer ma lanterne ? :)
merci d'avance !
Malgré mes recherches, je n'arrive pas à trouver une solution à un problème qui au premier plan me semble simple..
J'ai dans la colonne A une grande quantité de mots.
Je cherche les cells ayant un mot en particulier.
Par exemple : je cherche les cells ayant le mot "toto"
Pour :
- toto : ça doit fonctionner
- toto galére : ça doit fonctionner
- totoo : ça ne doit pas le prendre
-toto33 : ça ne doit pas le prendre
..etc
Les fonctions find, instr ou like ne me permettent pas de sélectionner uniquement les cellules comportant mon mot exact...
quelqu'un pourrait il éclairer ma lanterne ? :)
merci d'avance !
A voir également:
- Vba excel rechercher un mot dans une plage
- Trier un tableau excel - Guide
- Déplacer une colonne excel - Guide
- Liste déroulante excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Word et excel gratuit - Guide
4 réponses
Bonjour,
Voici une macro permettant de trouver le mot défini dans la variable mot où que se trouve le mot dans la cellule :
Voici une macro permettant de trouver le mot défini dans la variable mot où que se trouve le mot dans la cellule :
Sub trouver toto()
mot = "toto"
nbcarmot = Len(mot) 'nombre de caractère dans le mot
For i = 2 To 500 ' de la ligne 2 à 500
nbcarcellule = Len(Cells(i, 2)) 'nombre de caractère dans la cellule de la ligne i colonne 2
d = 0
If nbcarcellule >= nbcarmot Then 'si la cellule contient au moins autant de caractère que dans le mot
Do While c - d >= b 'boucle permettant de trouver le mot dans la cellule
a = Left(Right(Cells(i, 2), nbcarcellule - d), nbcarmot) 'ligne qui peut être enlever mais permet de voir ce qui est comparé en F8
If a = mot Then 'si le mot est trouvé
w = 1 'la variable w est égale alors à 1
End If
d = d + 1 'permettant d'étudier toute la cellule
Loop
End If
Next
End Sub
Bonjour,
Salut Mélanie,
Ta méthode, du moins il me semble, trouve également toto dans totoo et dans toto33, ce que ne veux pas Peon33.
Essaye plutôt comme ceci :
Salut Mélanie,
Ta méthode, du moins il me semble, trouve également toto dans totoo et dans toto33, ce que ne veux pas Peon33.
Essaye plutôt comme ceci :
Const monMot = "toto"
Sub Boucle()
Dim rngTrouve As Range, firstAddress As String
Set rngTrouve = Columns(1).Cells.Find(monMot, lookat:=xlPart)
'******************** Cas ou on ne trouve pas du tout le mot
If rngTrouve Is Nothing Then
MsgBox "Le mot " & monMot & " est introuvable colonne 1"
Exit Sub
End If
'******************** A partir d'ici on a trouvé au moins une occurrence du mot
If ExisteMot(rngTrouve.Value) Then
MsgBox monMot & " trouvé dans la cellule " & rngTrouve.Address
End If
firstAddress = rngTrouve.Address
Do While Not rngTrouve Is Nothing
Set rngTrouve = Columns(1).Cells.FindNext(rngTrouve)
If rngTrouve.Address = firstAddress Then Exit Do
If ExisteMot(rngTrouve.Value) Then
MsgBox monMot & " trouvé dans la cellule " & rngTrouve.Address
End If
Loop
End Sub
Function ExisteMot(Phrase As String)
Dim ListeMots, Mots As Variant
ListeMots = Split(Phrase, " ")
For Each Mots In ListeMots
If Mots = monMot Then ExisteMot = True: Exit Function
Next
End Function