Recherche Correspondances de Textes entre 2 listes
Bonsoir à Tous,
Tous les jours, je reçois 2 listes de 2 postes visités (1 poste = le nom d'une ville avec ou sans n°).
Or, il se trouve que les noms des postes ne sont pas toujours écrits de la même façon dans les deux listes (ce serait trop facile pour ma mise à jour).
Dans la Liste 1, les deux postes sont saisis dans la même colonne et séparés par un trait d'union.
Dans la liste 2, les deux postes sont saisis dans 2 colonnes différentes.
De plus, les couples de villes ne sont pas dans le même ordre dans les deux listes.
Chaque liste contient une colonne Index.
Je souhaite trouver les correspondances entre les postes de la liste 1 et ceux de la liste 2.
Pour visualiser plus concrètement, le résultat que je souhaite obtenir, je joins un fichier présentant :
- dans l'onglet "Données", les deux listes non exhaustives telles que je les reçois en 2 classeurs distincts ;
- dans l'onglet "Résultat souhaité", la façon dont je souhaiterai visualiser les données après traitement. On considère que le traitement s'effectuera dans le même onglet (l'onglet "Données" par exemple), après avoir copier/coller la liste 2 auprès de la liste 1.
Je souhaiterai que le traitement réalise 4 actions :
- mettre en couleur "Rouge" les 2 colonnes Postes de la liste 2, correspondant aux non-correspondances entre les 2 listes ;
- mettre en couleur "Vert" les 2 colonnes Postes de la liste 2, correspondant aux correspondances entre les 2 listes ;
- insérer le n° d'index de la liste 1 dans la 4ème colonne (nommée Index Liste 1) de la liste 2 ;
- insérer le n° d'index de la liste 2 dans la 4ème colonne (nommée Index Liste 2) de la liste 1 ;
Auriez-vous des suggestions à me proposer afin de réaliser le traitement de correspondance de mes deux listes ?
D'avance merci pour vos propositions.
Bonjour,
Pour faire ce que vous désirez, je vous conseille de construire une table de correspondance, ainsi avec une formule pour ferait la comparaison des 2 listes sans risque d'erreur.
Sur la feuille "Données", copiez-y les nouvelles listes reçues,
Puis, copiez-les aussi à la suite dans la feuille "Table_de_correspondance", replacer les éléments de la liste 2 en face de ceux de la liste1(s'il y a des doublons, supprimez-les) .
La formule dans la colonne H de la feuille "Données" renverra le N° d'index adéquat. Une MFC est ensuite appliquée en fonction du résultat dans cette colonne pour y appliquer une couleur de fond.
La formule utilisée en H4: -- ATTENTION, formule matricielle à valider avec CTRL + SHIFT + ENTREE puis à tirer vers le bas.
=SIERREUR(INDEX($A:$B;EQUIV(INDIRECT("Table_de_correspondances!A"&EQUIV($F4&" "&$G4;Table_de_correspondances!$B$1:$B$1000&" "&Table_de_correspondances!$C$1:$C$1000;0));$B:$B;0);1);"")le fichier
Cdlt
Bonjour à tous,
Merci Arturo83 pour votre proposition.
Toutefois, votre solution va être difficile à intégrer dans mon cas.
Je ne vous ai donné qu'une petite liste de ce que je reçois au quotidien et alimenter une table de correspondance en permanence (même si l'idée est très intéressante) va devenir très vite fastidieux et source d'erreur.
J'attendais plutôt une proposition en VBA car je pense que c'est la seule façon de traiter de longues listes (ou tableaux) rapidement et sans ajout supplémentaire (tel que la table de correspondance).
Si quelqu'un pouvait me suggérer une solution dans ce sens, je suis preneur.
Bon dimanche à tous.
alimenter une table de correspondance en permanence, il y aura bien un moment où la liste sera complète, Non ! et le risque d'erreur est quasiment nul.
J'attendais plutôt une proposition en VBA car je pense que c'est la seule façon de traiter de longues listes (ou tableaux) rapidement et sans ajout supplémentaire (tel que la table de correspondance). OUI, traiter des longues listes avec le VBA est très rapide, seulement le problème c'est que ces listes ne sont pas fiables dans leurs structures. j'explique; si on doit faire la recherche d'un nom dans une cellule composée d'au moins 2 noms, il va falloir ne travailler que sur une partie du contenu de la cellule.
Exemple: Une cellule de la liste 1 contenant "La Rochelle-O32 - Luçon", si on fait une recherche uniquement sur le nom "Luçon" on va appliquer un code du style: "recherche *Luçon* ", or s'il trouve "Monluçon" sur son chemin, pour lui ce sera correct, alors que pas du tout, sans parler de toutes les villes qui contiennent le même noms comme"Villefranche sur Saône, Villefranche sur mer, Villefranche de Panat, Villefranche de Rouergue etc.., ici le risque d'erreur est max.
Cdlt
Merci Arturo83 pour votre retour.
Point n°1 : il y aura bien un moment où la liste sera complète. Non, pas obligatoirement car les possibilités de mixer les postes sont quasi infinies.
De plus, je ne suis pas la seule personne à m'occuper de la mise à jour de ces listes. Et, je crains que ce soit trop contraignant pour les autres personnes de procéder quotidiennement à la vérification et à la mise à jour de la table de correspondances.
Point n°2 concernant le traitement VBA. En fait, la recherche s'effectue sur un couple de postes.
Pour trouver les couples en correspondance, voici comment je fonctionne :
- Pour extraire le 1er élément du couple, je pars de la colonne "Poste visité 1" de la liste 2, puis je vais chercher la correspondance dans la 1ère partie (identifiée par " - " ; d'ailleurs je pensais utiliser un split en VBA) de la colonne "Postes visités" de la liste 1.
- De même, pour extraire le 2ème élément du couple, je pars de la colonne "Poste visité 2" de la liste 2, puis je vais chercher la correspondance dans la 2ème partie de la colonne "Postes visités" de la liste 1.
Pour qu'il y ait correspondance, il faut que je retrouve le couple des deux côtés.
Bien sûr, le traitement en VBA n'est pas infaillible mais je pense, malgré tout, que cela reste la solution la plus aisée pour tous les utilisateurs.
Merci encore pour votre proposition. Je vais voir si je peux l'exploiter au mieux ou trouver une solution relativement fiable en VBA.