Bonsoir Gardou, bonsoir le forum,
Par formule je ne sais pas faire... Ton fichier modifié avec le code ci-dessous :
Sub Macro1()
Dim N As Worksheet 'déclare la variable N (onglet des Notes)
Dim G As Worksheet 'déclare la variable G (onglet des Groupes)
Dim M As Worksheet 'déclare la variable M (onglet des Moyennes)
Dim TC1 As Variant 'déclare la variable TC1 (Tableau des Cellules 1)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TG() As Variant 'déclare la variable TG (Tableau des Groupes)
Dim NM As Byte 'déclare la variable NM (Nombre de Membres)
Dim T As Integer 'déclare la variable T (Total)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Set N = Sheets("Feuil1") 'définit l'onglet N
Set G = Sheets("Feuil2") 'définit l'onglet G
Set M = Sheets("Feuil3") 'définit l'onglet M
M.Range("A1").CurrentRegion.ClearContents 'éfface les éventuelles anciennes moyennes
'********************************
'combien il y a-t-il de groupes ?
'********************************
TC1 = G.Range("A1").CurrentRegion 'définit le tableau de cellule TC1 (Groupes)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TC1, 1) 'boucle sur toutes les lignes I du tableau de cellues TC1 (en partant de la seconde)
D(TC1(I, 2)) = "" 'alimente le dictionnaire D avec la valeur en colonne 2 de TC (le groupe)
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste du dictionaire D sans doublon
'*******************************************
'combien il y a-t-il de membres par groupe ?
'*******************************************
For I = 0 To UBound(TMP, 1) 'boucle 1 : sur tous les groupes
NM = 0: T = 0 'initialise les variable NM et T
Erase TG 'initialise le tableau TG
For J = 2 To UBound(TC1, 1) 'boucle 2 : sur toutes les lignes J du tableau de cellules TC1 (en partant de la seconde)
If TC1(J, 2) = TMP(I) Then 'condition : si la valeur ligne J colonne 2 de TC1 est égale au groupe TMP(I)
ReDim Preserve TG(K) 'redimensionne le tableau des groupes TG
TG(K) = TC1(J, 1) 'récupère dans la ligne K de TG le membre ligne J colonne 1 de TC1
K = K + 1 'incrémente K
End If 'fin de la condition
Next J 'prochaine ligne de la boucle 2
'TG contient maintenant tous les membres du groupe TMP(I)
'******************************
'calcul et renvoie des moyennes
'******************************
TC2 = N.Range("A1").CurrentRegion 'définit le tableau de cellue TC2 (Notes)
For K = 0 To UBound(TG, 1) 'boucle 3 : sur tous les membres de TG
For L = 2 To UBound(TC2, 1) 'boucle 4 sur toutes les lignes L du tableau de cellules TC2 (en partant de la seconde)
If TG(K) = TC2(L, 1) Then 'si le membre est égal à la valeur ligne L colonne 1 de TC2
NM = NM + 1 'incrémente le nombre de membres NM
T = T + TC2(L, 2) 'cacule le total des notes des membres T
End If 'fin de la condition
Next L 'prochaine ligne de la boucle 4
Next K 'prochain menbre de la boucle 3
'définit la cellule de destination DEST (A1 si A1 est vide, sinon la première cellule vide de la colonne 1 de l'onglet M)
Set DEST = IIf(M.Range("A1") = "", M.Range("A1"), M.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
DEST.Value = "Moyenne Groupe " & TMP(I) 'revoie le texte dans DEST
'renvoie le calcul de la moyenne arrondi à deux chiffres dans DEST décalée d'une colonne à droite
DEST.Offset(0, 1).Value = Round(T / NM, 2)
Next I 'prochain groupe de la boucle 1
M.Select 'sélectionne l'onglet M
End Sub