Grade (A, B, C, D...) avec moyenne

D

David

Guest
Bonjour le forum

J'ai une liste de +- 50 côtes classées de la plus haute à la plus basse.

Exemple :

89,50
75,50
60
45
...

On me demande de retirer les 10 premiers pourcent (ce qui me ferait les 5 premiers élèves) ensuite les 25% suivant, (25 % des 45 étudiants restant) ensuite les 30% suivant ensuite les 25% suivant et pour finir les 10 % suviants.

Pensez vous qu'on puisse faire cela avec une formule ou du code ?

Merci d'avance pour votre aide
David
 
S

Sylvain

Guest
Salut David, le forum
je ne sais si c'est possible avec des formules mais ça l'est sûrement avec quelques lignes de codes...
Il faut que tu ranges tes côtes dans une colonne et que tu balayes ta liste ainsi obtenue autant de fois que tu veux faire un trix en modifiant les critères.
Chaque fois que tu balayes ta liste, tu sélectionnes les éléments qui correspondent à ton critère et tu les ranges par exemple dans une autre colonne... et ainsi de suite.
Tu te retrouves à la fin avec ta liste initiale et ta liste des 10 premiers pourcent, puis celle des 25%...

Je ne dis pas que c'est la meilleure solution mais ça doit être jouable.
Sylvain
 
S

Sylvain

Guest
Re,
Je ne pense pas que tu sois obliger de créer une variable pour le nombre de côte, il suffit que tu balayes ta liste de la première cellule que tu dois connaître jusqu'à la dernière.
La dernière cellule d'une liste est accessible par la commande :
.Range("A65536").End(xlUp).Row avec dans le range la colonne où se situe ta liste

En espérant t'aider.
Sylvain
 
D

David

Guest
Bonjour Monique,

Il y'a quelque temps d'ici vous m'avez envoyé une formule qui me satisfaisait et qui me satisfait encore à 100 %. Le hic c'est qu'on me demande de l'expliquer, pourriez vous s'il vous plait me donner un peu d'info concernant cette formule ?

Voici le message que j'ai laissé sur le forum car je ne me souvenais plus de votre login (je l'ai trouvé en faisant une recherche)

Merci d'avance pour votre aide.
David

Bonjour le forum,

J’avais demandé il y’a quelque mois une formule qui me permettrait de calculer le grade des étudiants. Il me fallait retirer de la liste des cotes les premiers 10%, ensuite les 25% suivant, ensuite les 30%, ensuite les 25% suivant et pour finir les 10% final.

J’avais reçu une réponse fabuleuse car la formule est tout simplement tout ce qui me fallait. Le problème maintenant ce qu’on me demande d’expliquer cette formule pour qu’il puisse vérifier l’exactitude du résultat.

Quelqu’un pourrait-il me déchiffrer cette formule en sachat que :

Plage nommée
Cote =Feuil1!$A$3:$A$200

Voici la formule :



=SI(NB(D$2:D19)-1+NB($C$3:C$20)>=NB(Cote)*SOMME($C$2:D$2);"";
INDEX(Cote;LIGNES(D$3:D20)+NB($C$3:C$20)))
(20 ou +)

Je vais essayer d’insérer la feuille excel et de retrouver la personne qui m’avait enoyé la réponse.

Merci d’avance pour votre aide.

Bg’s

PS : Je ne comprend pas pourquoi vous faites référence à C3... car cette collone est vide ??
 
M

Monique

Guest
Bonjour,

Je vais essayer.

Si, dans la colonne D, la formule fait référence à C3:C20, c'est justement parce que C3:C20 est vide.
C'est pour pouvoir la copier-coller vers la droite, sans avoir à modifier la formule.
Toutes les formules sont "identiques", c'est la même formule, copiée-collée sur toute la plage D3:H20.

En fait c'est $C$3:C$20 en colonne D,
mais en la copiant vers la droite, ça devient $C$3:D$20 en colonne E,
$C$3:E$20 en colonne F, etc
En colonne F, NB($C$3:E$20) compte le nombre de valeurs déjà trouvées dans les colonnes C D et E.

En D3, NB(D$2:D2)-1 compte le nb de valeurs trouvées dans les cellules du dessus, donc 1 - 1 = 0
Mais elle est faite pour être copiée et vers le bas et vers la droite.
En D20, elle est devenue NB(D$2:D19)-1
En F20, elle est NB(F$2:F19)-1
Même raisonnement, on fait référence aux cellules de la ligne 2, qui n'ont rien à voir dans l'histoire,
on enlève 1 pour cette raison, mais c'est "recopiable" sans modification sur toute la plage.

En D20, INDEX(Cote;LIGNES(D$3:D20)+NB($C$3:C$20)) équivaut à :
INDEX(Cote;18 + les valeurs déjà trouvées)
INDEX(Cote;1) donne la valeur de la 1ère cellule de la colonne "Cote"
INDEX(Cote;2) donne la valeur de la 2ème cellule de la colonne "Cote"

Dans la 1ère sellule en haut à gauche,
INDEX(Cote;LIGNES(D$3:D3)+NB($C$3:C$20)) équivaut à
INDEX ( Cote ; 1 + 0 )
 

Statistiques des forums

Discussions
312 332
Messages
2 087 365
Membres
103 528
dernier inscrit
maro