OVH Cloud OVH Cloud

FxM

1 réponse
Avatar
Charles Ingalls
Bonsoir,

Mon intention n'=E9tait bien entendu pas de vous=20
faire "faire le boulot" =E0 ma place. Navr=E9 que cela ait pu=20
=EAtre interpr=E9t=E9 ainsi. A la relecture, il est vrai que=20
cette demande est scandaleuse;) J'admets donc volontiers=20
ma part de responsabilit=E9. Ceci pos=E9, Je souhaite=20
simplement partager l'exp=E9rience voire l'expertise de ceux=20
qui veulent r=E9pondre. Je vais donc recadrer les choses :

Je dispose de 2 listes de noms
Je dois mettre en =E9vidence les noms de la liste 2 qui se=20
retrouvent, pour certains, dans la liste 1 ; le r=E9sultat=20
fera l'objet d'un traitement statistique.
Probl=E8me : les 2 listes ont une origine diff=E9rente ; il y=20
a donc parfois des saisies sensiblement diff=E9rentes pour=20
une seule et m=EAme personne (ex : C=E9cile sur la liste 1=20
sera CECILE sur la liste 2).
Pour fiabiliser au maximum le r=E9sultat, mon id=E9e est=20
d'harmoniser le mieux possible via VBA ces deux listes.
Cela passe par les op=E9rations suivantes :
1/ Chercher et remplacer ou supprimer tous les caract=E8res=20
de type "=E9,=E8,=EA,=E7, mais aussi "-", ".", etc.)
2/ Convertir les 2 listes en majuscules
3/ Boucler sur les 2 listes pour comparer les cha=EEnes
4/ Reste un ultime probl=E8me : certains noms sont compos=E9s=20
(nom de jeune fille + =E9poux) dans une liste mais ne=20
comportent que l'un des deux noms dans l'autre liste. De=20
la m=EAme fa=E7on, des erreurs mineures de saisie existent=20
(une lettre en trop d'un nom =E0 l'autre). Je cherche donc =E0=20
mettre en place un syst=E8me qui permette =E0 l'utilisateur de=20
choisir ou d'=E9carter un nom donn=E9 en fonction de son=20
affinit=E9 =E0 un autre avec un syst=E8me de msgbox du=20
style "Trouv=E9 la(les) occurrence(s) suivantes avec le nom=20
suivant... Voulez-vous retenir ce nom ?" ;=20

Si j'ai r=E9solu 1, 2 et 3 (m=E9thode poussive mais =E7a=20
fonctionne), je suis en panne sur le 4.

Les id=E9es sont bienvenues. Merci.

1 réponse

Avatar
FxM
Bonsoir Charles,

Mon intention n'était bien entendu pas de vous
faire "faire le boulot" à ma place. Navré que cela ait pu
être interprété ainsi. A la relecture, il est vrai que
cette demande est scandaleuse;) J'admets donc volontiers
ma part de responsabilité. Ceci posé, Je souhaite
simplement partager l'expérience voire l'expertise de ceux
qui veulent répondre. Je vais donc recadrer les choses :


J'explique un peu le pourquoi de ma réaction :
De + en +, de parfaits inconnus arrivent sur le forum avec des
questions vastes et vagues du style "je voudrais gérer ma compta". Si
la question est simple, les réponses et la réalisation le sont moins.
Il n'est pas rare de se faire eng... car un cas peu probable mais
toutefois possible avait été oublié !
Ne vois aucune responsabilité dans mon propos, ce qui suit montre que
tu as parcouru les réponses fournies, que tu en as tiré profit et
avancé sur ton projet.

4/ Reste un ultime problème : certains noms sont composés
(nom de jeune fille + époux) dans une liste mais ne
comportent que l'un des deux noms dans l'autre liste. De
la même façon, des erreurs mineures de saisie existent
(une lettre en trop d'un nom à l'autre).


<snip>
Ahhh, pour ce genre de chose, rien ne vaut le cerveau humain.
Si la comparaison est seulement une partie commune (donc excluant de
trouver une lettre en plus/moins dans le nom), tu pourrais scruter les
deux listes et vérifier si le nom de l'un est contenu dans l'autre en
oubliant les identiques. Ce ne sera surement pas optimisé mais mes
collègues vont sûrement prendre plaisir à "avoir la plus courte"
[blague réservée aux initiés ;o) ]

Sur le principe :
instr(debut, tout, partie)
instr te renvoit la position de partie dans tout.
Si partie est absent, instr(..)=0
instr(1,"tout","o")=2
instr(1,"tout","p")=0
instr(1,"o","tout")=0

Qq chose du style :
for each nom1 in liste1
for each nom2 in liste2
if nom1 <> nom2 then '(oublie les identiques car forcément bons)
if instr(1, nom1, nom2) then '-> nom2 fait partie de nom1
...
end if

if instr(1, nom2, nom1) then '-> nom1 fait partie de nom2
...
end if

end if
next nom2
next nom1

mais j'ai un doute sur la fin de la boucle si tu effaces directement.
Peut-être vaut-il mieux marquer que le nom devra être effacé puis
faire les effacements à la fin.
D'aucun vont sûrement te parler de "like" [nom2 like "*"&nom1&"*"],
c'est équivalent.

Les idées sont bienvenues. Merci.
Voilà, voilà, ça reste de la théorie. A voir si c'est réaliste en

pratique.

@+
FxM