Monsieur Excel
Pour tout savoir faire sur Excel !

11 février 2014

Un equiv() sur une matrice (c)

Nous continuons ici sur la lancée des articles précédents : quelle est la meilleure formule pour localiser un élément dans une matrice, alors que la localisation par equiv() ne fonctionne que sur un vecteur.

Dans le choix d’une formule par rapport à une autre, plusieurs critères interviennent :
  • la longueur de la formule
  • la lisibilité (ou auditabilité) de la formule
  • le fait que la formule soit matricielle ou pas
  • le temps de calcul de la formule
  • la flexibilité de la formule
Nous nous intéressons aujourd’hui au problème de la flexibilité de la formule. La question qui me semble la plus importante pour le problème que nous cherchons à résoudre est la suivante : « Qu’arrive-t-il s’il existe deux occurrences ou plus de ce que l’on recherche ? »

Nous voyons ci-dessous le résultat obtenu avec les solutions présentées dans les articles précédents :


Nous constatons que seule la formule originale de Roberto trouve la première occurrence quand il y en a deux (ici, C3 et B4)..

En revanche, ma formule en B9 est intéressante car elle récupère les adresses des deux occurrences.

En fait, elle ne prendra pas toutes les occurrences, mais seulement la première de chaque ligne… Enfin, c’est déjà mieux que le résultat auquel les autres formules arrivent.

Remarque - Notons au passage que la formule originale de Roberto en D8 supporte bien la seconde occurrence du "h" alors que la formule plus courte en E8 ne la supporte pas...

Pour les autres formules à part la formule originale de Roberto, on pourrait utiliser :
=si(nb.si(B6;B2:D4)>1;nb.si(B6; B2:D4)&" sol.";formule) à la place de =formule.

Rappelons pour mémoire la formule de Roberto, en D8 (formule matricielle) :
=petite.valeur(si(B2:D4=B6;(ligne(B2:D4)-min(ligne(B2:D4))+1)*100+(colonne(B2:D4)-min(colonne(B2:D4))+1);"");1)