Private Sub Worksheet_Activate()
Dim d As Object, w As Worksheet, tablo, col As Byte, i&, x$, n&
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
ReDim resu(1 To Rows.Count, 1 To 13)
For Each w In Worksheets
If LCase(w.Cells(1, 2)) = "fournisseur" Then
tablo = w.Cells(1).CurrentRegion.Resize(, 6) 'matrice, plus rapide
col = Month("1/" & w.Name) + 1
For i = 2 To UBound(tablo)
x = CStr(tablo(i, 2))
If Not d.exists(x) And x <> "" Then
n = n + 1
d(x) = n 'mémorise la ligne
resu(n, 1) = x 'nom sans doublon
End If
If IsNumeric(CStr(tablo(i, 6))) Then resu(d(x), col) = resu(d(x), col) + tablo(i, 6)
Next
End If
Next
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de restitution, à adapter
If n Then .Resize(n, 13) = resu
.Offset(n).Resize(Rows.Count - n - .Row + 1, 13).ClearContents 'RAZ en dessous
End With
End Sub