Bonjour
C'est vrai que je n'ai pas mis d'explications sur cette formule, je vais essayer de t'expliquer son fonctionnement avec mon baragouinement.
La formule de la cellule B17 est à valider par les touches Ctrl+Shift+Entrer, c'est ce qui identifie une formule matricielle ({})
=SI(LIGNES(A$17:A17)>NB.SI(C$3:C$12;'>0');'';INDEX(articles;PETITE.VALEUR(SI(C$3:C$12>0;LIGNE(articles));LIGNES(A$17:A17))-LIGNE(B$2);0))
Voilà ce que fait la formule.
La partie LIGNE
S(A$17:A17) retourne le nombre de lignes de la plage définies. Le symbole $ rend la ligne 17 de la 1ère cellule de la plage fixe, ce que l'on appelle aussi 'Absolue', cette référence ne bougera pas lors d'un glisser déposer vers le bas.
La partie NB.SI(C$3:C$12;'>0') retourne le nombre de valeurs de la plage C$3:C$12 sui sont supérieures à 0.
Donc en foncton du comparateur >, on demande à afficher une valeur ou mettre à blanc la cellule.
Le reste de la formule utilise une 'matrice'.
- Une matrice est un tableau qui conserve en mémoire le résultat d'une fonction.
- Une matrice prend de la place en mémoire, sa taille est en fonction de la longueur de la plage passée dans une fonction.
- C'est SI(C$3:C$12>0;LIGNE(articles)) qui alimente en valeur la matrice, dans le fichier la matrice va contenir ceci
La valeur 1 correspond à la formule SI(C$3>0;LIGNE(B$3)) qui sera égale à 3
La valeur 2 correspond à la formule SI(C$4>0;LIGNE(B$4)) qui sera égale à 4
La valeur 3 correspond à la formule SI(C$5>0;LIGNE(B$5)) qui sera égale à FAUX
La valeur 4 correspond à la formule SI(C$6>0;LIGNE(B$6)) qui sera égale à 6
La valeur 5 correspond à la formule SI(C$7>0;LIGNE(B$7)) qui sera égale à FAUX
La valeur 6 correspond à la formule SI(C$8>0;LIGNE(B$8)) qui sera égale à 8
La valeur 7 correspond à la formule SI(C$9>0;LIGNE(B$9)) qui sera égale à FAUX
La valeur 8 correspond à la formule SI(C$10>0;LIGNE(B$10)) qui sera égale à 10
La valeur 9 correspond à la formule SI(C$11>0;LIGNE(B$11)) qui sera égale à 11
La valeur 10 correspond à la formule SI(C$12>0;LIGNE(B$12)) qui sera égale à 12
La matrice peut-être représentée sous cette forme
{3;4;FAUX;6;FAUX;8;FAUX;10;11;12}
Ensuite cette matrice est être utilisée par la fonction PETITE.VALEUR(...;....)
Cette fonction va triée la matrice en mémoire du plus petit au plus grand et retourne la Xième valeur (2ème argument). La 'valeur logique' FAUX n'est pas pris en compte, comme valeur numérique, la fonction inverse se nomme GRANDE.VALEUR.
Cette valeur (il y a plus qu'une valeur, et la matrice est 'erase') est ensuite utilisée par la fonction INDEX, qui va retourner la valeur dans la plage définie, qui se trouve à l'intersection en ligne et en colonne. Attention il faut soustraire le numéro de la ligne de l'entête de ton tableau, LIGNE retournant le numéro par rapport à la feuille dans sa globalité, et non en fonction de la plage spécifiée de la plage.
Si tu veux d'autres explications, je suis à ta dispostion sur le t'chat XLD.
@+Jean-Marie