Re...
Pas de problèmes, suivant cet exemple, valeurs contenues dans la plage B4😀11.
A ! A ! A
A ! toto ! A
A ! A ! A
A ! A ! A
A ! A ! toto
A ! A ! A
A ! A ! A
toto ! A ! A
=PETITE.VALEUR((B4😀11="toto")*COLONNE(B4😀11);NB.SI(B4😀11;"<>"&"toto")+1)
Comme la fonction de Michel (j'ai repris sa base) elle utilise une matrice.
La première Matrice sera constituée de résultat du comparateur (B4😀11="toto"), VRAI ou FAUX, elle sera stocker en mémoire.
La seconde Matrice aura le résultat de la fonction COLONNE(B4😀11)
Contenu de la 1ère matrice
{FAUX . FAUX . FAUX ;
FAUX . VRAI . FAUX ;
FAUX . FAUX . FAUX ;
FAUX . FAUX . FAUX ;
FAUX . FAUX . VRAI ;
FAUX . FAUX . FAUX ;
FAUX . FAUX . FAUX ;
VRAI . FAUX . FAUX }
Contenu de la 2ème Matrice
{2 . 3 . 4 ;
2 . 3 . 4 ;
2 . 3 . 4 ;
2 . 3 . 4 ;
2 . 3 . 4 ;
2 . 3 . 4 ;
2 . 3 . 4 ;
2 . 3 . 4 }
Partie le symbole * on va cumuler les deux matrices. Vrai correspond à une valeur numérique de 1 et FAUX correspond à 0. En cumulant VRAI ou FAUX, Excel transforme automatiquement VRAI et FAUX.
Le résultat de la matrice retournée à la fonction PETITE.VALEUR sera celle-ci
{0 . 0 . 0 ;
0 . 3 . 0 ;
0 . 0 . 0 ;
0 . 0 . 0 ;
0 . 0 . 4 ;
0 . 0 . 0 ;
0 . 0 . 0 ;
2 . 0 . 0 }
Cette fonction trie par ordre croissant les valeurs contenues dans la matrice, et retourne la valeur en fonction d'un rang (2ème argument).
{0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 0 ; 2 ; 3 ; 4}
NB.SI(B4😀11;"<>"&"toto") retourne le nombre de données dans la plage de cellules qui sont différentes de "toto", il faut additionner 1 pour avoir la valeur du rang de la 1ère colonne contenant le terme "toto", dans notre cas 21+1.
J'espère que mes explications te permettront d'apprivoiser la puissance des fonctions matricielles.
@+Jean-Marie