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

Fermé
Peon33 - 12 déc. 2013 à 17:03
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 20 déc. 2013 à 11:16
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

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
12 déc. 2013 à 17:40
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
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
13 déc. 2013 à 11:00
Bonjour,

Oui, mais normalement il y a un espace apres qui, donc essayez avec Var ="toto qui "
0
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 13/12/2013 à 19:30
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 déc. 2013 à 07:10
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 déc. 2013 à 08:14
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 déc. 2013 à 11:20
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
14 déc. 2013 à 11:52
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 déc. 2013 à 16:23
Bonjour,

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

Bon week end à tous
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 16/12/2013 à 10:10
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
16 déc. 2013 à 11:04
Bonjour michel_m,

Moi, ça me va bien.

Merci. A Peon 33 d'expérimenter .

Bye
0
Merci pour la réponse, je vais essayer aujourd'hui :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 déc. 2013 à 08:29
Et alors ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
20 déc. 2013 à 11:02
Bonjour michel_m,

Zorro n'est pas arriive et Juanita a ete decoupee par le train ........ Dommage !!!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 20/12/2013 à 11:17
A mon avis, Peon confond "bénévole" et "domestique gratuit corvéable à merci"
0