Bonjour.
En access standard, il n'y a rien qui te permette cela.
Si tu as acces a SSIS il y a u operateur de comparaison floue (fuzzy) qui permet cela.
Personnellement j'ai fais truc du genre avec des noms de rue dans des adresses en calculant la "distance" entre deux chaines de caracteres.
Dans les 2 bases,
- Tu remplaces tout ce qui est punctuation par un espace.
- Tu remplaces certain mots par leur equivalents (ex : "les trois petits cochons" devient "les 3 petits cochons").
La function Split et une table de substitutions seront utiles. - Tu elimines tout ce qui n'est pas des lettres ou des chiffres du titre (incluant les espaces)
- Tu remplace les lettres accentues par la lettre non accentuee du titre.
Tu fais cela une fois sur chacune des table pour calculer [TitreEpure] que tu stockes.
Apres tu calcules la fameuse distance entre les 2 [TitreEpure].
Ici un article pour Excel :
Levenshtein Distance in VBA [closed]
https://stackoverflow.com/questions/...istance-in-vba
Mais le code devrait marcher directement en Access car ca a l'air de VBA "independent" de l'appli.
Sinon tu as cela :
Levenshtein Approximate String Matching
https://bytes.com/topic/access/insig...tring-matching
Attention il faut faire cela enregistrement par enregistrement.
Si tu le fais par requete cela va etre un produit croise : tous les enr. de ta table x tous les enr. de l'autre table.
Ca peut faire un paquet d'enr et "exploser" Access. Rappel une BD Access ne peut pas depasser 2 Go.
La solution que j'avais adoptee etait de parcourir en VBA les enregistrements des deux tables avec 2 boucles imbriquees : une sur ma table et une sur la table de "reference".
Ca donne un truc du genre :
pour tout les enregistrements de T1
pour tous les enregistrements de T2
calculer la distance entre T1 et T2.
Tu stockes dans la table resultat :
ClefT1
ClefT2
Distance
Et tu ne gardes que la plus "courte" distance.
Et tu es PATIENT car le calcul des disatnces peut etre TRES LONG !
A+
Partager