Monsieur Excel
Pour tout savoir faire sur Excel !

21 novembre 2012

Calcul du nombre de modalités

Nous avons déjà publié le 1er juin 2007 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 DB…().

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

Formule de D1 : =somme(si(equiv(A2:A15;A:A;0)=ligne(A2:A15);1;0))
Formule de D2 : =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 reprend la solution proposée dans l’article publié il y a cinq ans. Elle 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.

Quant 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...

4 Commentaire(s):

  • ne supporte pas les cellules vides ni une plage plus grande

    J'utiliserai plutôt :
    =SOMME(SI(FREQUENCE(SI(NBCAR(A2:A50)>0; EQUIV(A2:A50; A1:A50; 0); ""); SI(NBCAR(A2:A50)>0; EQUIV(A2:A50; A2:A50; 0); ""))>0;1))

    Peut-être que c'est pour dans 4 jours...

    By Anonymous ES, sur 10:29 AM  

  • J'ai oublié de dire en validation matricielle.

    By Anonymous ES, sur 10:31 AM  

  • OK pour les cellules vides.

    En revanche, rien n'empêche d'étendre la formule à 50 lignes ou plus : il faudra alors simplement utiliser un nom élastique pour qu'il ne couvre que les cellules renseignées...

    By Blogger Hervé Thiriez, sur 10:42 AM  

  • Ce qui est un peu gênant, c'est le système de comparaison Excel, qui assimile majuscule et minuscule. Donc si on construit une liste LEROUGE,LeRouge, Lerouge, leROUGE, etc... les formules proposées n'indiqueront qu'1 modalité alors que, fonctionnellement, il peut s'agir de modalités différentes.

    By Anonymous cduigou, sur 6:06 PM  

Enregistrer un commentaire

<< Accueil