VBA: moyennes des X meilleures notes
Bonjour
je souhaiterais calculer les moyennes des x meilleures notes d'une plage. (via vba)
Exemple j'ai une liste de 100 notes dont 60 notes filles et 40 notes garçons.
Et je souhaiterais connaitre
1- la moyenne des 12 meilleures notes F
2- LA moyenne des 18 meilleures notes G
sachant que 12 et 18 dans l'exemple sont modifiables.
Je mets un fichier en exemple
merci de votre aide.
Asso132
Bonjour
Super ! Merci !
j'ai une 2e demande du même style
Dans la feuille inscrits , j'ai des colonnes (categ, v1,v2,v3,b1,b2)
je souhaiterais avoir la même possibilité pour connaitre les moyennes des X meilleurs
1- pour les catégories différentes
2- pour les 2 sexes
une idée ?
merci
Asso132
Bonsoir le fil, bonsoir le forum,
Une autre proposition (1 post) avec la fonction personnalisée MS (Moyenne par Sexe) ci-dessous :
Public Function MS(NB As Byte, PL As Range, Sexe As String)
'NB = cliquer dans une cellule contenant NomBre de notes prise en compte ou le taper
'PL = sélectionner la PLage contenant les notes (il faut sélectionner les 2 colonnes "notes" et "sexe" uniquement, sans les en-têtes)
'Sexe = sélectionner une cellule contenant le Sexe ou taper {"f", "F", "g" ou "G"}
Dim TD As Variant 'déclare la variable TD (Tableau des Données)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TNS() As Variant 'déclare le tableau TNS (Tableau des notes par Sexe)
Dim J As Integer 'déclare la variable J (Incrément)
Dim TNM() As Double 'décalre la variable TNM (Tableau des notes maximum)
Dim T As Double 'déclare la variable T (Total)
TD = PL 'définit le tableau de données TD
For I = 1 To UBound(TD, 1) 'boucle sur touts les lignes du tableau TB
If UCase(TD(I, 2)) = UCase(Sexe) Then 'si la valeur en ligne I, colonne 2 du TD est égale à la variable Sexe
ReDim Preserve TNS(J) 'redimensionne le tableau des notes par sexe TNS
TNS(J) = CDbl(TD(I, 1)) 'récupère la note
J = J + 1 'incrémente J
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
ReDim Preserve TNM(1 To NB) 'redimensionne le tableau des notes maximum TNM en fonction du nombre NB de notes prises en compte
For I = 1 To NB 'boucle NB fois
'attribue à TNM(I) la Ième plus grande valeur de la colonne 0 du tabelau TNS
TNM(I) = Application.WorksheetFunction.Large(Application.Index(TNS, , 0), I)
T = T + TNM(I) 'définit le total T
Next I 'prochaine fois de la boucle
MS = Round(T / NB, 2) 'renvoie la moyenne
End FunctionÀ adapter pour ton second problème...
Bonsoir
merci pour cette 2e proposition.
Je vais tenter d'adapter ... pour le 2e problème.
Asso132
Rebonsoir
Pour le 2e problème, j'ai renommé la fonction mcat
et par exemple pour v1 et BF :
=mcat(U6;saisie_résultats!C8:C127;saisie_résultats!K8:K127;statistiques!U7)
ca ne fonctionne pas, est ce un problème de colonne non concomitante ?
voici ce que j'ai modifié dans le code mais j'ai une erreur #valeur
Public Function MCAT(NB As Byte, PL As Range, Cat As String)
'NB = cliquer dans une cellule contenant NomBre de notes prise en compte ou le taper
'PL = sélectionner la PLage contenant les notes (il faut sélectionner les 2 colonnes "notes" et "sexe" uniquement, sans les en-têtes)
'Sexe = sélectionner une cellule contenant le Sexe ou taper {"f", "F", "g" ou "G"}
Dim TD As Variant 'déclare la variable TD (Tableau des Données)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TNS() As Variant 'déclare le tableau TNS (Tableau des notes par Sexe)
Dim J As Integer 'déclare la variable J (Incrément)
Dim TNM() As Double 'décalre la variable TNM (Tableau des notes maximum)
Dim T As Double 'déclare la variable T (Total)
TD = PL 'définit le tableau de données TD
For I = 1 To UBound(TD, 1) 'boucle sur touts les lignes du tableau TB
If UCase(TD(I, 2)) = UCase(Cat) Then 'si la valeur en ligne I, colonne 2 du TD est égale à la variable Sexe
ReDim Preserve TNS(J) 'redimensionne le tableau des notes par sexe TNS
TNS(J) = CDbl(TD(I, 1)) 'récupère la note
J = J + 1 'incrémente J
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
ReDim Preserve TNM(1 To NB) 'redimensionne le tableau des notes maximum TNM en fonction du nombre NB de notes prises en compte
For I = 1 To NB 'boucle NB fois
'attribue à TNM(I) la Ième plus grande valeur de la colonne 0 du tabelau TNS
TNM(I) = Application.WorksheetFunction.Large(Application.Index(TNS, , 0), I)
T = T + TNM(I) 'définit le total T
Next I 'prochaine fois de la boucle
MCAT = Round(T / NB, 2) 'renvoie la moyenne
End Functionmerci
asso132