Monsieur Excel
Pour tout savoir faire sur Excel !

24 septembre 2014

Nombre de modalités - Autre

Nous avons déjà publié il y a quelques jours un article intitulé « Calcul du nombre de modalités » où nous montrions comment calculer le nombre de valeurs différentes dans une colonne.

Cette fonction est en effet une fonction qui manque cruellement à la série des fonction BD…().

Aujourd’hui, nous rouvrons le sujet pour vous montrer deux nouvelles façons de définir cette fonction.

Formule de D1 (cf. article précédent) :
=somme(si(equiv(A2:A15;A:A;0)=ligne(A2:A15);1;0))
Formule de D2 (cf. article précédent) :
=somme(1*(equiv(A2:A15;A:A;0)=ligne(A2:A15)))
Formule de D3 : =sommeprod(1/nb.si(A2:A15;A2:A15))

Les deux premières formules sont matricielles, donc validées avec [Ctrl]-[Maj]-[Entrée].


La première formule est assez compréhensible : quand le numéro de la ligne est le numéro de la première ligne où l’on trouve la valeur considérée, c’est la première occurrence de cette valeur et cela compte donc pour 1.

La seconde formule montre que l’on peut très bien remplacer le « si », dans une telle situation, par un simple produit par « 1 », qui a la vertu de transformer les « VRAI » en « 1 ».

La troisième formule présente le double avantage d’être plus compacte et de ne pas être une formule matricielle. Nous y notons une particularité : le second argument, au lieu d’être un élément unique, comme c’est normalement prévu dans le mode d’emploi de la fonction, est en fait un vecteur.

Quand nous évaluons la partie nb.si(A2:A15;A2:A15) de la formule, nous obtenons le vecteur {2;1;4;3;1;2;4;1;4;1;1;4;3;3}. On va donc compter 1/ 2 pour chaque élément apparaissant deux fois, 1/3 pour chaque élément apparaissant trois fois,… Au total, nous aurons donc le nombre de modalités.

Remarque 1 – Ce n’est pas la première fois que nous découvrons des ressources inespérées d’Excel en « détournant » le mode d’emploi officiel d’une fonction…

Remarque 2 – Il y a enfin, assez logiquement, une formule encore plus courte, mais de nouveau matricielle, avec =somme(1/nb.si(A2:A15;A2:A15)). Ce n'est pas surprenant car, comme nous l'avons déjà expliqué à plusieurs reprises, la fonction sommeprod() sert souvent à « éviter » une formule matricielle puisqu'elle génère naturellement une boucle...