RECHERCHEV multiple sans macro [Résolu]

Fermé
Rubakava
Messages postés
1
Date d'inscription
mercredi 30 novembre 2011
Statut
Membre
Dernière intervention
30 novembre 2011
- 30 nov. 2011 à 19:30
Bonjour,

Voici une solution souple et pratique pour faire du RECHERCHEV "multiple" : c'est-à-dire, du RECHERCHEV qui ramène toutes les valeurs liées à une valeur de départ ayant plusieurs occurrences dans la colonne étudiée (ceux qui connaissent RECHERCHEV comprendront !)

Ça semble complexe, mais une fois maitrisé c'est vraiment sympa...

1- ajouter le filtre pour la plage étudiée, et tout trier par ordre alphabétique. Les occurrences multiples sont ainsi regroupées par paquets.

2- plutôt que faire RECHERCHEV, on va utiliser une alternative beaucoup plus puissante : la combinaison INDEX et EQUIV. Petit cours progressif :

- si je mets =INDEX(B:B;3), j'obtiens la valeur en 3ème ligne de la colonne B
- si je mets =INDEX(B:C;3;2), j'obtiens la valeur en 3ème ligne de la 2nde colonne, soit C3
- si je mets =INDEX(B:C;EQUIV(A1;B:B);2), j'obtiens la valeur de la 2nde colonne, C, à la ligne n où se trouve dans la colonne B la valeur correspondant à la cellule A1... Pour faire simple, on a ici l'exact équivalent d'un RECHERCHEV normal.

3- note intéressante à ce stade : RECHERCHEV cherche de haut en bas... s'il y a plusieurs occurrences, il va donc s'arrêter à la première et rapporter la valeur correspondante demandée. INDEX/EQUIV fait l'inverse et cherche de bas en haut. S'il y a plusieurs occurrences, il va donc s'arrêter à la dernière et rapporter la valeur correspondante demandée.

4- on approche du but : pour rapporter les différentes valeurs correspondant à une valeur ayant plusieurs occurrences, il faut donc faire :

=INDEX(B:C;EQUIV(A1;B:B);2)
=INDEX(B:C;EQUIV(A1;B:B)-1;2)
=INDEX(B:C;EQUIV(A1;B:B)-2;2)
=INDEX(B:C;EQUIV(A1;B:B)-3;2)

Traduction : d'abord on fait un RECHERCHEV classique, en rapportant la valeur dans la colonne C qui est en face de la valeur A1 trouvée dans la colonne B. Comme expliqué dans le point 4, INDEX/EQUIV nous place sur la dernière ligne où cela peut se produire. Puis on cherche pareil, mais en rapportant la valeur qui figure juste une ligne au-dessus. Et encore une ligne au-dessus. Et encore une ligne au-dessus... et ça marche parce qu'on a regroupé toutes les occurrences en un même paquet au début.

5- dernière chose : il faut s'assurer que lorsqu'on va chercher une ligne au-dessus on soit toujours dans des valeurs correspondant à la valeur de départ (que ce soit toujours du A1 dans la colonne B). A quel moment il faut arrêter de remonter les lignes ? Pour cela, il faut mettre une condition qui servira d'alerte. Exemple :

=SI(INDEX(B:C;EQUIV(A1;B:B)-1;1)<>A1;"Pas bon";INDEX(B:C;EQUIV(A1;B:B)-1;2))
=SI(INDEX(B:C;EQUIV(A1;B:B)-2;1)<>A1;"Pas bon";INDEX(B:C;EQUIV(A1;B:B)-2;2))
=SI(INDEX(B:C;EQUIV(A1;B:B)-3;1)<>A1;"Pas bon";INDEX(B:C;EQUIV(A1;B:B)-3;2))

Ce qui est demandé ici, c'est : je vérifie qu'en remontant d'une ligne, la valeur dans la colonne B colonne est toujours une occurrence correspondant à la valeur A1. Si c'est différent, j'écris Pas bon (par exemple). Si c'est pas différent, alors je vais bien chercher la valeur en 2ème colonne.

J'espère que ça pourra servir...