Bonjour à tous,
Toujours assez compliqué d'expliquer des formules matricielles.
J'avais commencé, je termine. C'est bien moins détaillé que l'explication de
@Scoub que je salue
NB.SI(Plage,valeur) va compter le nombres de fois où valeur est présent dans la plage.
Maintenant si valeur correspond aussi à plage, NB.SI(plage, plage) va pour
chaque valeur de plage (2ème argument) compter le nombre de fois où cette valeur apparait dans plage (1er argument).
Comme il traite cela pour chaque valeur de plage, NB.SI va retourner non pas une seule valeur mais
une matrice avec le nombre d'apparition de chaque valeur et ceci autant de fois qu'il y a de valeurs dans la plage.
Ici on utilise une astuce : plutôt que de renvoyer le nombre d'apparition pour chaque valeur, on va renvoyer son inverse (1 / nombre d'occurrence de chaque valeur ). En effet :
- si a apparait une fois, alors dans la matrice des inverses on a une fois 1/1 (1/1 fois 1 =1)
- si b apparait 2 fois, alors dans la matrice des inverses apparait deux fois 1/2 (1/2 fois 2 =1)
- si a et b apparaissent chacun 2 fois, alors dans la matrice des inverses apparait quatre fois 1/2 (1/2 fois 4 =2)
- si a apparait 3 fois , alors dans la matrice des inverses apparait 3 fois 1/3 (1/3 fois 3 =1)
On s'aperçoit donc que la somme de la matrice des inverses du nombre d'occurrence de chaque valeur de la plage est égal au nombre de valeurs différentes de la plage.
Soit plage = {1, 2, 2, 3 ,1 , 4 , 5, 5 , 9 , 5}
La matrice des occurrences donne : {2, 2, 2, 1, 2, 1 3, 3, 1, 3}
La matrice des inverses donne : {1/2, 1/2, 1/2, 1/1, 1/2, 1/1, 1/3, 1/3, 1/1, 1/3}
Si on somme les éléments, on trouve 6