Bonjour
Un essai à tester. Te convient-il ?
Option Explicit
Dim f As Worksheet, fs As Worksheet, tablo, tablor()
Dim dico As Object, dicoN As Object
Dim i&, ln&
Sub Synthese()
Set fs = Sheets("Synthèse des résultats")
Set dico = CreateObject("Scripting.Dictionary")
Set dicoN = CreateObject("Scripting.Dictionary")
Application.EnableEvents = False
fs.Range("A3:C" & fs.Range("C" & Rows.Count).End(xlUp)(2).Row).ClearContents
For Each f In Worksheets
If f.Range("B2") <> "Moyenne par compétence" Then
tablo = f.Range("A2").CurrentRegion
For i = 2 To UBound(tablo, 1)
If dico.exists(tablo(i, 2)) Then
dico(tablo(i, 2)) = (dico(tablo(i, 2)) * dicoN(tablo(i, 2)) _
+ tablo(i, 1)) / (dicoN(tablo(i, 2)) + 1)
dicoN(tablo(i, 2)) = dicoN(tablo(i, 2)) + 1
Else
dico(tablo(i, 2)) = tablo(i, 1)
dicoN(tablo(i, 2)) = 1
End If
Next i
ln = Cells(Rows.Count, 2).End(xlUp).Row
ln = IIf(ln = 2, 2, ln + 2)
fs.Range("A2:C2").Copy Range("A" & ln)
fs.Range("A" & ln) = f.Name
fs.Range("B" & ln + 1).Resize(dico.Count, 1) = Application.Transpose(dico.items)
fs.Range("C" & ln + 1).Resize(dico.Count, 1) = Application.Transpose(dico.keys)
Erase tablo
dico.RemoveAll
End If
Next f
Application.EnableEvents = True
End Sub
Option Explicit
Private Sub Worksheet_Activate()
Call Synthese
End Sub
Bye !