VBA - Trouver un mot dans une plage

Résolu
Peon33 -  
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   -
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 !
A voir également:

4 réponses

melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Bonjour,

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
2
Peon33
 
Excellent, ça fonctionne comme je veux, je n'aurai pas trouvé tout seul !
Un gros MERCI ! vous êtes super :)
1
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Mets juste ton post en résolu stp (en dessous du titre)
0
tuxboy Messages postés 995 Date d'inscription   Statut Membre Dernière intervention   190
 
Bonjour,

peut-être cherches-tu "toto " (avec un espace) et non pas "toto" ?
0
Peon33
 
dans certains cas oui, d'autre non...
ça m'empêche d'utiliser des recherches de la forme "toto " ( avec l'espace pour couper le mot)..
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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 :
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

-1
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Oui, ca permet de trouver toto quelque soit l'endroit ou il est écrit dans la cellule. J'ai peut être mal compris sa demande.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Le but ici est de ne pas trouver toto dans totoo ni dans toto33.
Sinon, s'il faut le trouver systématiquement, la méthode Find (associée à FindNext), avec le paramètre optionnel Lookat réglé sur xlpart :
Set monRange = .Cells.Find("toto", LookAt:=xlpart)
0