Je recherche une formule qui me permettrait de trouver la valeur la plus proche d'une cellule par rapport à une BDD.
Exemple :
En cellule A1 : ROBERT SMITH
Dans ma BDD en colonne B :
- ROBERT DE SMITH en B1
- ROBERT DE MONACO en B2
Ma formule doit m'afficher pour résultat de la recherche pour la cellule A1 : ROBERT DE SMITH.
J'ai déjà trouvé des formules permettant de trouver une valeur approximative en texte mais celle ci n'est pas à 100% efficace : =RECHERCHEV("*" & A1 & "*";B1:B2;1;0). Cela ne marche pas car il y a un changement au milieu du texte et non sur les extrémités.
Mais cela ne fonction uniquement pour l'exemple.
Enfin si jamais j'inverse (bdd et recherche) ou si je rajoute une valeur avant ou après dans la cellule qu'on cherche, la formule ne marche plus.
exemple " al robert monaco" ou 'robert monaco al' ou encore 'al robert monaco al'
de même si ma cellule est "robert de monaco" et que je souhaite trouver "robert monaco" la formule ne fonctionne pas.
Désolé je n'avais pas précisé.
Je souhaiterais une formule qui trouve la valeur la plus proche possible peu importe ce qu'il y a autour ( avant après ou au milieu)
Il y a tellement de cas possible qu'il me semble que par formule on ne va pas y arriver alors la solution serait du VBA mais je suis une bille a ce jeu la alors désolé je passe la main
bonsoir
Effectivement beaucoup de cas de figure
une tentative avec la fonction prochede( cellule de référence; données à comparer) voir exemple dans le fichier
J'essaie de coter la la comparaison de phrase et choisie la plus chère....
1 note pour nombre de mot identique
1 note pour chaque mot identique
1 note pour nombre de lettre identique dans chaque mot
A tester longuement......
Edit :
Au passage, je trouve l'idée de sousou intéressante, sur la note des différentes entrées !
Et pour moi ça fonctionne plutôt bien même.
Bonsoir, ma foi j'ai bien une solution, étant donné que je me suis cassé la tête (oooh que oui) sur un tel problème de "recherche intelligente" pendant tout un petit moment. Je te propose un menu déroulant qui ferait appel à ta base de données, ce menu déroulant serait muni d'une "recherche intelligente", par exemple tu tapes "robert", dans ton menu déroulant ne s'affiche plus que les différentes entrées qui contiennent "robert".
Si tu peux me donner la base de données je peux essayer de t'adapter un des codes de l'excellent boisgontier : http://boisgontierjacques.free.fr/pages_site/listes_cascade.htm
En gros,
avec ce code VBA : Saisie intuitive type Google
Frapper les premières lettres du nom
Code:
Private Sub ComboBox1_GotFocus()
ComboBox1.List = Sheets("BD").Range("liste").Value
End Sub
Private Sub ComboBox1_Change()
If Me.ComboBox1 <> "" Then
Set d1 = CreateObject("Scripting.Dictionary")
clé = UCase(Me.ComboBox1) & "*"
For Each c In Sheets("BD").[Liste].Value
If UCase(c) Like clé Then d1(c) = ""
Next c
Me.ComboBox1.List = d1.keys
Me.ComboBox1.DropDown
[F3] = Me.ComboBox1
End If
End Sub
Private Sub ComboBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ComboBox1.List = Sheets("BD").Range("liste").Value
Me.ComboBox1.DropDown
End Sub
Pour avoir pas seulement les mots qui contiennent les premières lettres mais toutes les entrées qui contiennent ces lettres, tu remplaces clé = UCase(Me.ComboBox1) & "*"
par clé = "*" & UCase(Me.ComboBox1) & "*".
Tu dois changer les appels à la "BD" et à la "liste", je peux te le faire si besoin.
J'ai fait sur ton fichier exemple ce à quoi je pensais, il s'agit du menu déroulant. On peut faire plus joli (utiliser un userform : une petite fenêtre s'ouvrirait tatai tatata) évidemment, mais sur le principe, cela te convient-il ?
Excusé moi du retard.
J'ai bien lu vos différentes réponses mais j'ai fais en manuel car je ne souhaitais pas passer par VBA ( même si je sais un peu utiliser VBA).
Merci pour vos réponses ! Vous êtes vraiment sympas !
Bonsoir
On est là pour se faire Aider mais aussi Aider donc ... je partage
J'ai aussi passé plusieurs mois pour arriver à finaliser un Annuaire à entrée intuitive (pour les intéressés rechercher sur mes post de cet été vous aurez l'appli ) j'ai voulu qu'il soit Tip Top cela a été le cas ; la sub courte mais très "Siouxe" ( ruse indienne) est là :
Code:
Private Sub UserForm_Initialize()
a = [nom].Value
End Sub
' nom est votre liste de recherche donc une plage
Private Sub textBox1_Change()
Set d1 = CreateObject("Scripting.Dictionary")
If Me.TextBox1 = "" Then
tmp = ""
Else
tmp = Me.TextBox1 & "*"
End If
For Each c In a
If c Like tmp Then d1(c) = ""
Next c
Me.ListBox1.List = d1.keys
End Sub
Par contre je ne sais pas l'expliquer !!! mais si cela peut contribuer aux recherches de certains ......dans leurs appli. !!
Bonjour Lord
Autant suivre le topic pour que chacun puisse regarder
Une nouvelle version de la fonction à tester ou j'ai changé les prix
si mot identique=10 si mot bien placé+10
+nombre de caractères commun si mot non identique
Pas traité la casse (donc respect de la casse) a voir!
Pour ta problèmatique test les macro xla
voila mon problème j'ai deux feuilles qui contient des listes des clients chaque feuille est saisie par une personne donc les noms des clients ne sont pas les mêmes dans les deux feuilles je veux rapprocher les noms par la fonction valeur proche pour recherche le pin de la deuxième feuille dans la première .ci joint une fichier excel
Je viens de vous faire une proposition dans votre autre fil de discussion. Veillez à ne pas vous disperser. Si vous avez trouvé votre bonheur ici, ou une simple piste, mentionnez le dans votre dernier fil de discussion. Sinon on ne va plus savoir ou on en est.