Programme ressemblance lexicale

Bonjour à tous,

Dans ma lignée des problèmes pas possible, je cherche un programme permettant, à partir d'une colonne B de référence de noms, fouiller une colonne A de données brutes, entre séparateurs |, et me renvoyer dans une colonne C, le 1er résultat que le programme aura trouver dans la donnée brute (son équivalent de référence).

La donnée brute est des cellules, contenant des packs de noms, séparés par des |. Ils peuvent être composés (- tiret) ou également contenir des "&" (comme |Lois & Clark|).

Alors j'avais déjà des solutions fonctions sous excel pour venir scanner une colonne à partir du contenu d'une autre, faire une condition et écrire oui / non si présent dans l'une comme dans l'autre, m'écrire le terme si il est présent, mais je n'ai jamais réalisé de macro pour cette utilité.

Les voici :

=SI(NB.SI($A$2:$B$500;C2);"Présent au moins dans un des deux";"Absent")

=SI(ESTNA(RECHERCHEV(B2;$A$2:$A$500;1;FAUX));"Absent en A";"Présent dans les deux")

=NB.SI($A$2:$A$101,A2)*NB.SI($C$2:$C$101,A2)*NB.SI($E$2:$E$101,A2)*NB.SI($G$2:$G$101,A2)

{=SI(NB.SI($A$2:$A$500,$B2)+NB.SI($C$2:$C$500,$B2)+NB.SI($D$2:$D$500,$B2),"Présent au moins dans un des deux","Exclusif")}

Voilà si quelqu'un a une idée, je suis preneur.

Fichier joint.

Merci beaucoup,

G.


Je me dis qu'en utilisant la ressemblance, on pourrait considérer que si la ref et la donnée brute ont + de 3 caractères différents, par exemple, alors il ne peut pas match, on écrit donc 0.

21test-2.xlsx (12.02 Ko)

Je me permets de up un coup sur ce sujet.

Merci,

G.

Bonsoir,

Ci-joint 2 propositions à tester.

Pour être honnête, pas sûr d'avoir bien compris le résultat attendu, mais basé sur ce qui m'a semblé du bon sens.

Avec un % de correspondance à saisir.

Si ce n'est pas ça, j'espère que ça pourra servir d'inspiration

Et si possible, quelques exemples en plus ...

Bonne soirée

Bouben

Bonsoir,

avec une macro XL4 et une formule matricielle.

15pwetzou-5.xlsm (10.40 Ko)

@ + +

Bonjour, merci à vous deux pour vos suggestions. elles marchent très bien.

Deux questions en retour, avant de clore le topic :

R@chid :

- dans cette instruction-ci

=INDEX(LesMots,EQUIV(VRAI,NB.SI(B$2:B$14,LesMots)>0,0))

LesMots =

SUPPRESPACE(EVALUER("{"""&SUBSTITUE(SUBSTITUE(Feuil1!$A2;"&";"|");"|";""";""")&"""}"))

Pus-je alors directement écrire dans la cellule "résultat attendu" ceci ? :

INDEX(SUPPRESPACE(EVALUER("{"""&SUBSTITUE(SUBSTITUE(Feuil1!$A2;"&";"|");"|";""";""")&"""}")),EQUIV(VRAI,NB.SI(B$2:B$14,SUPPRESPACE(EVALUER("{"""&SUBSTITUE(SUBSTITUE(Feuil1!$A2;"&";"|");"|";""";""")&"""}")))>0,0))

Bouben : Je vois les deux propositions, à quoi corresponde chacune d'elle, un % de ressemblance différent ?

Merci beaucoup,

G.

Bonjour @ tous,

Non tu ne peux pas faire cela, puisque EVALUER() est une macro XL4 et il faut impérativement l'utiliser dans le gestionnaire de noms.

@ + +

Ok ca marche

Merci.

G.

Bonjour,

Pwetzou a écrit :

Bouben : Je vois les deux propositions, à quoi corresponde chacune d'elle, un % de ressemblance différent ?

Ce n'est pas ça !

Dans les 2 cas, se base sur le % de ressemblance (qui peut être modifié)

Dans le premier cas ;

on se base sur 80% de la table de référence (ex : PASCAL => PASC)

"PASCAL ww" n'est pas trouvé, puisqu'on cherche "PASC" exactement

"PASC" est trouvé

Dans le deuxième cas ;

on se base sur 80% du nom recherché (c'est l'inverse) :

"PASC" n'est donc pas trouvé

Après, il y a peut-être un bug

Il faut juste des exemples pour continuer et ne pas partir sur des propositions à mettre en place au hasard sans savoir ce qui est attendu exactement

Bonne soirée

Bouben

Dans les deux cas cela me semble assez génial.

Si je mets "50%" dans la plage "Approximation", le programme me cherche 50% des deux propositions ?

Merci encore,

G.

Les 2 propositions ne répondent pas au même besoin.

Comme il n'y a qu'un besoin, c'est l'une ou l'autre.

A tester, et tu verras ...

Rechercher des sujets similaires à "programme ressemblance lexicale"