S’ouvre dans un nouvel onglet

RECHERCHEV avec plusieurs résultats : récupérer toutes les correspondances

Bannière Recherche toutes

Vous cherchez toutes les commandes d’un client. Vous écrivez un RECHERCHEV, il renvoie une ligne, et il s’arrête là. Pourtant le client en a passé sept.

C’est le comportement normal de la fonction, et c’est aussi sa limite la plus gênante au quotidien. RECHERCHEV répond à la question « quelle est la valeur associée à cette clé », pas à « quelles sont toutes les valeurs associées à cette clé ».

Voici les méthodes qui répondent à la seconde question, avec ce qu’elles coûtent.

Tableau Excel montrant la formule PF.RECHERCHE_TOUTES qui renvoie les trois achats d'Alice sur trois lignes
Trois lignes correspondent, trois résultats. La formule se dimensionne seule.

Pourquoi RECHERCHEV s’arrête à la première ligne

RECHERCHEV parcourt la colonne de recherche de haut en bas, trouve la première correspondance, renvoie la valeur et termine. Il n’existe aucun paramètre pour lui demander de continuer.

RECHERCHEX ne change rien sur ce point. Son argument mode_recherche accepte la valeur -1 pour balayer du bas vers le haut, ce qui donne la dernière correspondance au lieu de la première. Une seule valeur, dans les deux cas.

La raison est structurelle : ces deux fonctions renvoient une valeur unique. Récupérer plusieurs résultats demande soit une formule qui renvoie un tableau, soit une formule qui concatène.

Comparaison entre RECHERCHEV qui ne renvoie qu'un résultat et PF.RECHERCHE_TOUTES qui en renvoie trois
La même recherche, sur les mêmes données. RECHERCHEX se comporte comme RECHERCHEV.

Méthode 1 : INDEX et PETITE.VALEUR

La solution historique, celle qui circule sur les forums depuis Excel 2003. Elle se recopie vers le bas, et chaque ligne récupère la correspondance suivante.

=SIERREUR(INDEX($B$2:$B$100;PETITE.VALEUR(SI($A$2:$A$100=$D$1;
LIGNE($A$2:$A$100)-1);LIGNE()-1));"")

Sur Excel 2016 et 2019, elle demande une validation par Ctrl+Maj+Entrée.

Le mécanisme tient en trois temps. SI teste chaque ligne et renvoie son numéro quand la clé correspond. PETITE.VALEUR récupère le premier de ces numéros, puis le deuxième, puis le troisième, selon la ligne où la formule est recopiée. INDEX va chercher la valeur à ce numéro de ligne.

Le principe est clair. Sa mise en oeuvre l’est beaucoup moins.

Les décalages

Les -1 qui traînent dans la formule compensent le fait que les données commencent en ligne 2 et que la formule est écrite en ligne 2. Déplacez le tableau d’une ligne et tout se décale silencieusement. C’est la source d’erreur numéro un de cette méthode.

Le nombre de lignes à prévoir

Vous devez recopier la formule sur assez de lignes pour couvrir le maximum de correspondances possibles. Trop peu, vous perdez des résultats. Trop, vous remplissez votre feuille de cellules vides.

Méthode 2 : TEXTEJOINDRE, pour concaténer

Quand vous voulez les résultats dans une seule cellule plutôt que sur plusieurs lignes :

=TEXTEJOINDRE(", ";VRAI;SI($A$2:$A$100=$D$1;$B$2:$B$100;""))

Plus lisible que la précédente, et elle tient en une cellule. Deux réserves : elle réclame Ctrl+Maj+Entrée sur Excel 2019, et elle n’existe pas avant Excel 2019.

Méthode 3 : FILTRE, sur Microsoft 365

La réponse native moderne, et il faut lui reconnaître sa qualité :

=FILTRE($B$2:$B$100;$A$2:$A$100=$D$1;"Aucun")

Une formule courte, lisible, qui renvoie toutes les correspondances sous forme de tableau débordé et se met à jour quand les données changent. Sur un parc entièrement à jour, elle règle le problème.

Ses deux limites. Elle est réservée à Microsoft 365 et renvoie #NOM? sur Excel 2016, 2019 et 2021. Et elle raisonne en condition matricielle, pas en clé : pour un test simple d’égalité cela reste léger, mais la syntaxe demande de manipuler des plages entières là où l’on pense en « toutes les valeurs de ce client ».

Comparaison entre la formule INDEX PETITE.VALEUR et la fonction PF.RECHERCHE_TOUTES
À gauche les décalages à surveiller, à droite une formule qui se dimensionne seule.

Méthode 4 : la fonction dédiée PF.RECHERCHE_TOUTES

HexFormula ajoute une fonction qui pose la question dans les termes où vous la pensez : une clé, une plage où la chercher, une plage de valeurs à ramener.

=PF.RECHERCHE_TOUTES(valeur; plage_recherche; plage_resultat; [si_non_trouve]; [delimiteur])
ParamètreDescriptionObligatoire
valeurLa clé à chercherOui
plage_rechercheLa colonne où chercher la cléOui
plage_resultatLa colonne des valeurs à ramenerOui
si_non_trouveTexte affiché si aucune correspondanceNon
delimiteurSi renseigné, renvoie un texte concaténé au lieu d’un tableauNon

En tableau, par défaut

Tous les produits achetés par Alice :

=PF.RECHERCHE_TOUTES("Alice"; A2:A100; B2:B100)

→ T-shirt
  Chaussures
  Chapeau

Le résultat déborde sur les cellules du dessous, comme FILTRE, et s’ajuste au nombre de correspondances.

En texte, avec un délimiteur

Le cinquième paramètre change la nature du résultat. Renseignez un délimiteur et la fonction renvoie une chaîne unique :

=PF.RECHERCHE_TOUTES("CMD-001"; A2:A100; B2:B100; "Aucun statut"; " → ")

→ "Reçue → Traitée → Expédiée"

Ce mode texte fonctionne sur les versions d’Excel dépourvues du moteur de tableaux dynamiques, là où FILTRE échoue.

Voir la documentation complète de PF.RECHERCHE_TOUTES

Les deux formats de sortie de PF.RECHERCHE_TOUTES, en tableau ou en texte concaténé
Même formule, mêmes données. Seul le dernier paramètre change.

Cas pratiques

L’historique d’un client dans une fiche

Une fiche client avec la liste de ses achats, sur une seule ligne :

="Achats : " & PF.RECHERCHE_TOUTES(A2; Commandes!$A:$A; Commandes!$C:$C)

Les membres d’une équipe projet

=PF.RECHERCHE_TOUTES("Alpha"; A2:A100; B2:B100)

→ Alice, Carol, Eve

Les tags d’une catégorie produit

Avec un délimiteur choisi pour produire directement le format voulu :

="#" & PF.RECHERCHE_TOUTES("Vêtements"; A2:A100; B2:B100; ""; " #")

→ "#Coton #Bio #Été"

Comparatif des méthodes

CritèreINDEX + PETITE.VALEURTEXTEJOINDREFILTREPF.RECHERCHE_TOUTES
LisibilitéFaibleMoyenneBonneBonne
Résultat en tableauOui, par recopieNonOuiOui
Résultat en texteNonOuiNonOui
Nombre de lignes à prévoirÀ la mainSans objetAutomatiqueAutomatique
Excel 2016 et 2019Oui, en CSE2019 en CSENonOui
Sans add-inOuiOuiOuiRequiert HexFormula

Sur Microsoft 365, pour un besoin ponctuel, FILTRE fait le travail sans rien installer et reste le bon réflexe. L’intérêt d’une fonction dédiée apparaît sur trois points : les versions antérieures à 365, le mode texte concaténé, et une syntaxe qui parle de clé plutôt que de condition matricielle.

Questions fréquentes

RECHERCHEX peut-il renvoyer plusieurs résultats ?

Non. RECHERCHEX renvoie une seule valeur. Son paramètre mode_recherche réglé sur -1 inverse le sens de balayage et donne la dernière correspondance au lieu de la première, mais il n’en ramène jamais plusieurs.

Quelle est la différence entre FILTRE et une recherche multiple ?

FILTRE prend une condition matricielle et renvoie les lignes qui la vérifient. Une fonction de recherche multiple prend une clé et ramène les valeurs associées. Le résultat se ressemble sur un test d’égalité simple, mais la première raisonne en filtre de tableau et la seconde en correspondance de clé.

Comment éviter les cellules vides sous la formule INDEX ?

Vous recopiez la formule sur un nombre de lignes fixe, donc les lignes excédentaires affichent le résultat du SIERREUR, en général une chaîne vide. Réduire ce nombre fait perdre des correspondances. C’est le compromis inhérent à cette méthode, et l’une des raisons de préférer une formule qui dimensionne son résultat elle-même.

Peut-on récupérer plusieurs colonnes à la fois ?

FILTRE accepte une plage de plusieurs colonnes et renvoie le bloc correspondant. Pour ramener une colonne de valeurs associée à une clé, PF.RECHERCHE_TOUTES traite une colonne de résultat à la fois, ce qui couvre la majorité des usages de fiche ou de synthèse.

Que se passe-t-il si la clé n’existe pas ?

Le quatrième paramètre de PF.RECHERCHE_TOUTES définit le texte à afficher, par défaut une chaîne vide. Avec FILTRE, c’est le troisième argument qui joue ce rôle. Avec INDEX et PETITE.VALEUR, il faut envelopper la formule dans un SIERREUR, sans quoi elle renvoie #NOMBRE!.

Conclusion

Récupérer toutes les correspondances d’une clé est une demande banale à laquelle RECHERCHEV et RECHERCHEX ne répondent pas, par construction. Les contournements existent depuis longtemps, mais INDEX avec PETITE.VALEUR accumule les décalages de lignes et les références absolues à surveiller.

Sur Microsoft 365, FILTRE a réglé la question pour les cas simples. Pour les versions antérieures, pour un résultat concaténé en une cellule, ou pour écrire la formule dans les termes du besoin, =PF.RECHERCHE_TOUTES() couvre les deux formats de sortie avec la même syntaxe.

Essayez HexFormula gratuitement sur hexformula.com et récupérez toutes vos correspondances en une formule.

À lire aussi : RECHERCHEV vs RECHERCHEX vs INDEX/EQUIV, lequel choisir

Essayez HexFormula Gratuitement

Si vous savez utiliser SOMME(), vous savez utiliser HexFormula
=Pf.SOMME_SI_COULEUR(C2:C1000; ref)

Table des matières