VBA - Trouver un mot dans une plage

Résolu
Peon33 -  
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 !

4 réponses

  1. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  2. Peon33
     
    Excellent, ça fonctionne comme je veux, je n'aurai pas trouvé tout seul !
    Un gros MERCI ! vous êtes super :)
    1
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      Mets juste ton post en résolu stp (en dessous du titre)
      0
  3. tuxboy Messages postés 1083 Statut Membre 190
     
    Bonjour,

    peut-être cherches-tu "toto " (avec un espace) et non pas "toto" ?
    0
    1. 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
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      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
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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