VBA - Trouver la valeur exacte d'une variable dans une plage [Fermé]

Signaler
-
Messages postés
16392
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
27 février 2021
-
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

Messages postés
15612
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
26 février 2021
1 460
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+
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..
Messages postés
15612
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
26 février 2021
1 460
Bonjour,

Oui, mais normalement il y a un espace apres qui, donc essayez avec Var ="toto qui "
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...
Messages postés
16392
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
27 février 2021
3 144
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
Messages postés
15612
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
26 février 2021
1 460
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 .......
Messages postés
16392
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
27 février 2021
3 144
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
Messages postés
15612
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
26 février 2021
1 460
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 !!!!!!
Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 février 2021
2 575
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!
Messages postés
15612
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
26 février 2021
1 460
Bonjour,

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

Bon week end à tous
Messages postés
16392
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
27 février 2021
3 144
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
Messages postés
15612
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
26 février 2021
1 460
Bonjour michel_m,

Moi, ça me va bien.

Merci. A Peon 33 d'expérimenter .

Bye
Merci pour la réponse, je vais essayer aujourd'hui :)
Messages postés
16392
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
27 février 2021
3 144
Et alors ?
Messages postés
15612
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
26 février 2021
1 460
Bonjour michel_m,

Zorro n'est pas arriive et Juanita a ete decoupee par le train ........ Dommage !!!
Messages postés
16392
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
27 février 2021
3 144
A mon avis, Peon confond "bénévole" et "domestique gratuit corvéable à merci"