Nombre occurrence selon critère


#1

Bonjour ,

je suppose que je ne suis pas le premier à poser la question , mais je n’ai pas trouvé dans le forum

Voici le cas que j’essaie de résoudre :
j’ai un certain nombre d’élèves et un certain nombre de matières
Chaque élève a une moyenne pour chaque matière

Je cherche à connaitre pour chaque élève, le nombre de matières dans lesquelles il a obtenu la meilleure moyenne, et nombre de matières ou il a obtenu la deuxième meilleure moyenne.

Note.xlsx (8,5 Ko)

Je précise que j’attends que la formule tienne sur une cellule , et qu’elle soit la plus concise possible (éviter les SI imbriqués par exemple)

Merci par avance à ceux qui voudront bien me prêter assistance


#2

Bonjour,
Il y a peut-être plus court, mais moi, je ne vois pas alors voici les formules

Nb Meilleure Note à mettre en C11
=NB.SI(C3;MAX($C$3:$F$3))+NB.SI(C4;MAX($C$4:$F$4))+NB.SI(C5;MAX($C$5:$F$5))+NB.SI(C6;MAX($C$6:$F$6))+NB.SI(C7;MAX($C$7:$F$7))+NB.SI(C8;MAX($C$8:$F$8))

C’est donc l’addition de la formule suivante suivant le Nb de lignes
=NB.SI(C3;MAX($C$3:$F$3))
Calcule le Nb de fois si (NB.SI), la valeur de C3 (15) est le Max de la ligne( MAX($C$3:$F$3))

Et pour la 2ème place à mettre en C12
=NB.SI(C3;GRANDE.VALEUR($C$3:$F$3;2))+NB.SI(C4;GRANDE.VALEUR($C$4:$F$4;2))+NB.SI(C5;GRANDE.VALEUR($C$5:$F$5;2))+NB.SI(C6;GRANDE.VALEUR($C$6:$F$6;2))+NB.SI(C7;GRANDE.VALEUR($C$7:$F$7;2))+NB.SI(C8;GRANDE.VALEUR($C$8:$F$8;2))

la formule
=NB.SI(C3;GRANDE.VALEUR($C$3:$F$3;2)) est le même principe, sauf que je remplace le MAX() par GRANDE.VALEUR() avec comme recherche du K (k-ième) le 2 pour la deuxième grande valeur

et je tire les deux formules vers la droite

Note.xlsx (10,4 Ko)


#3

Bonjour Mimi ,
et merci pour ton retour rapide et efficace (puisque tu réponds à mon besoin)

Néanmoins, (je vais être embêtant !) , la solution d’imbriquer les NB.SI ne me convient pas trop. Car dans mon fichier exemple, j’ai mis 4 élèves et 6 matières, donc la formule reste lisible.
Il faut s’imaginer une classe de 30 élèves et 15 matières, ça devient vite ingérable. Il va falloir ajouter un NB.SI pour chaque matière : c’est faisable, mais pas top, je trouve.

J’espérais qu’il serait possible de répondre au besoin avec un SOMMEPROD, ou via les matrices , mais personnellement, je ne maitrise pas assez…


#4

D’autre part, la solution proposée présente un défaut (mais c’est secondaire on va dire),
si deux élèves ont la meilleure moyenne , alors :

  • ca va leur comptabiliser pour chacun +1 pour le nb fois meilleure note => OK
  • mais aussi +1 pour le nb de fois 2ème meilleure note => KO

#5

Re,
Le SOMMEPROD ne fera pas mieux, vu qu’il faut se référer à chaque valeurs de la ligne à analyser, de plus, des matricielles sur un gros nombre de calcul, ralenti fortement.
Mais il y a peut-être mieux en formule

Pour moi, le plus rapide, sans se casser la tête, est le VBA, pas besoin de chercher le Nb de lignes ou de colonnes à analyser,
Un appui sur un bouton, et HOP


#6

Merci Mimi ,

merci encore pour ta réponse.
Pour d’autres raisons, la solution VBA ne me convient pas non plus (tu vas dire que j’ai beaucoup de contraintes !)
Tant pis
Merci encore.
Je laisse un peu le sujet ouvert ? Des fois que quelqu’un ait une lumière…


#7

Bonjour,
J’ai trouvé une alternative
A voir si cela pourrait te convenir
Sur une deuxième feuille (Calcul) qui pourra être masquée, le calcul du classement s’effectue suivant les notes des élèves. Comme exemple j’ai mis 35 élèves et 30 Matières

Le Nb de meilleures notes et de 2ème meilleures notes s’effectue en temps réel avec pour les ex-equao
seul contrainte, il faut que les notes se remplissent en suivant les colonnes. S’il y a un trou, les résultats ne s’affichent pas immédiatement, il faut que la ligne soit sans cellule vide qui se suivent.

Pour sa mise en fonction, on peut très bien réduire le Nb d’élèves et/ou de matière en masquant les lignes et/ou colonnes afin de pouvoir les afficher pour une utilisation ultérieure

Notes classement.xlsx (28,7 Ko)

Formule commune pour la feuille calcul
=SI(Notes!C6="";"";SOMMEPROD((DECALER(Notes!$C6;;;;NBVAL(Notes!6:6)-1)>=Notes!C6)/NB.SI(DECALER(Notes!$C6;;;;NBVAL(Notes!6:6)-1);DECALER(Notes!$C6;;;;NBVAL(Notes!6:6)-1))))

Formule des 1er pour la ligne 2 Feuille Notes
=SI(NB.SI(Calcul!C6:C35;1)=0;"";NB.SI(Calcul!C6:C35;1))

Formule des 2ème pour la ligne 3 Feuille Notes
=SI(NB.SI(Calcul!C6:C35;2)=0;"";NB.SI(Calcul!C6:C35;2))


#8

Bonjour ,

il suffit d’utiliser la fonction RANG dans la feuille Calcul (me semble que c’est + simple que ce que tu as saisi)

Notes classement.xlsx (28,8 Ko)

Après, j’aurais aimé ne pas avoir à passer par une feuille intermédiaire, même cachée…
Mais bon , je crois que je vais devoir m’y résoudre


#9

Re,

Sans feuille ou cellule intermédiaire, pas possible à mon avis
mais comme j’ai précisé, la feuille Calcul peut être masquée
ou les calculs peuvent être mis dans la même feuille mais en colonne BB par exemple