Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, tablo, i&, x$, y#, a()
Set d = CreateObject("Scripting.Dictionary")
With [Table1] 'tableau structuré
'--- calcul des maxima---
tablo = .Resize(, 9) 'matrice, plus rapide
For i = 1 To UBound(tablo)
x = tablo(i, 1) & Chr(1) & tablo(i, 2) & Chr(1) & tablo(i, 9)
tablo(i, 1) = x 'mémorise la concaténation
If Not d.exists(x) Then d(x) = 0
y = Val(Replace(tablo(i, 3), ",", "."))
If y > d(x) Then d(x) = y
Next i
'---restitution en colonne M---
ReDim a(1 To UBound(tablo), 1 To 1)
For i = 1 To UBound(tablo)
a(i, 1) = d(tablo(i, 1))
Next i
Application.EnableEvents = False 'désactive les évènements
.Columns(13) = a
Application.EnableEvents = True 'réactive les évènements
End With
End Sub