VBA - Trouver la valeur exacte d'une variable dans une plage

Peon33 -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à toutes et à tous !

J'ai récemment poster le topic : "VBA - Trouver un mot dans une plage"
On m'a était d'une très grande aide mais un nouveau problème du même genre se présente face a moi...

Je m'explique :

J'ai un grand nombre de cellules comportant des phrases diverses et variées. (en A)
J'ai créé une feuille avec un certain nombre de mots / phrases clé me permettant de repartir les cellules de la colonne A dans tel ou tel catégorie.
Je souhaite utiliser une variable qui prend les valeurs de mes mots clé et teste mes phrases.

Mon problème :

je souhaite que la recherche fonctionne uniquement quand la valeur inscrite dans ma variable soit retrouvé à l'identique dans mes phrases.

Exemple :

Avec la phrase : "c'est l'histoire de toto qui fait du vba"
pour un variable Var = "toto" , ma recherche doit fonctionner
pour Var = "toto qui fait du" , ma recherche doit fonctionner
pour Var = "totoo" , ma recherche ne doit rien trouver
pour Var = "totoquifait" ma recherche ne doit pas fonctionner
...etc

je cherche bien la valeur exacte de ma variable dans les cellules.
Le code donné dans le topic "VBA - Trouver un mot dans une plage", ne permet pas de trouver la cellule lorsque que l'on effectue une recherche à partir d'une phrase (Var = "toto qui fait")

Une fois de plus quelqu'un pourrait il me guider ?

Merci d'avance

Peon33

4 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    a adapter, ici recherche colonne A en partant d'un bouton de formulaire ( code vba sur la feuille)

    Private Sub CommandButton1_Click()
    Var = "toto qui"
    Nbre = Application.CountIf(Columns("A"), "*" & Var & "*")
    If Nbre > 0 Then
    lig = Columns("A").Find(Var, Range("A1"), , xlPart).Row
    Range("A" & lig).Select
    Else
    MsgBox "Pas trouvé"
    End If
    End Sub

    A+
    0
    1. Peon33
       
      Bonjour,
      le problème de la fonction find c'est que dans la cas ou j'ai : Var ="toto qui"
      la phrase : "toto quitte" va être trouvé...
      de même pour Instr..
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Oui, mais normalement il y a un espace apres qui, donc essayez avec Var ="toto qui "
      0
    3. Peon33
       
      Bonjour,
      C'est vrai que cela fonctionne dans ce cas, mais pas si on est en fin de phrase, c'est ce qui me complique la vie...
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Avec une fonction personnalisée:

    Function toto(cellule As Range) As String
    Dim tablo, Cptr As Byte

    tablo = Split(cellule, " ")
    For Cptr = 0 To UBound(tablo)
    If UCase(tablo(Cptr)) = "TOTO" Then toto = "OK"
    Exit Function
    Next

    End Function


    Michel
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour michel_m,
      Oui, merci, mais vue les cas que cette personne compte englober :

      pour un variable Var = "toto" , ma recherche doit fonctionner
      pour Var = "toto qui fait du" , ma recherche doit fonctionner


      et ce qui peut etre entre ses deux exemples .......
      0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour F89

    Excuse facile:
    à 19h20, j'avais droit au top "wan" de la chorale occitane: "ch'uis pas mariée avec un ordinateur !!!"
    Donc, ce matin, tranquilou...

    Option Explicit
    Function toto(cellule As Range) As String
    Dim tablo, Cptr As Byte

    tablo = Split(cellule, " ")
    For Cptr = 0 To UBound(tablo)
    If UCase(tablo(Cptr)) = "TOTO" Then
    toto = "OK"
    Exit Function
    End If
    Next
    End Function

    Merci de m'avoir signalé cette ânerie

    Bon WE à toi
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re michel_m,

      pas de probleme pour ce petit bug, mais je me repete,

      moi Oui, merci, mais vue les cas que cette personne compte englober :
      lui pour un variable Var = "toto" , ma recherche doit fonctionner
      relui pour Var = "toto qui fait du" , ma recherche doit fonctionner

      et rerelui et ce qui peut etre entre ses deux exemples .......

      mettre en tableau OK si seulement "toto" mais le reste des possibilites !!!!!!
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut michel, f894009,

      Le problème inhérent à ce sujet réside dans les "mots" qu'il va chercher.
      Je dirais, à lui à bien choisir les mots clés.
      Un peu comme lors d'une recherche sous google.....

      Sur ce... Bon week end à tous!
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Cest aussi ma facon de voir. Tout est dans les "mots cles"

      Bon week end à tous
      0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour,

    encore moi
    Option Explicit

    Function Texte_precis(cellule As Range, cle As String) As Boolean
    Dim Nbcar1 As Byte, Cptr1 As Byte, Lettre As String * 1 'cellule
    Dim Nbcar2 As Byte, Cptr2 As Byte 'cle

    Nbcar1 = Len(cellule)
    Nbcar2 = Len(cle)
    Cptr2 = 1
    For Cptr1 = 1 To Nbcar1
    Lettre = Mid(cellule, Cptr1, 1)
    If Lettre = Mid(cle, Cptr2, 1) Then
    Cptr2 = Cptr2 + 1
    If Cptr2 > Nbcar2 Then
    Texte_precis = True
    Exit For
    End If
    Else
    Cptr2 = 1
    End If
    Next
    If Cptr2 < Nbcar2 Then Texte_precis = False

    End Function

    maquette:
    https://www.cjoint.com/?3Lqkkjl1T5i
    Michel
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour michel_m,

      Moi, ça me va bien.

      Merci. A Peon 33 d'expérimenter .

      Bye
      0
    2. Peon33
       
      Merci pour la réponse, je vais essayer aujourd'hui :)
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Et alors ?
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour michel_m,

      Zorro n'est pas arriive et Juanita a ete decoupee par le train ........ Dommage !!!
      0
    5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      A mon avis, Peon confond "bénévole" et "domestique gratuit corvéable à merci"
      0