Private Sub Worksheet_Change(ByVal target As Range)
Dim critere As Range, dest As Range, tablo, i&
Set critere = [K3:K4]
Set dest = [L3:N3] '3 colonnes
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
'dest.Offset(1).Resize(Rows.Count - dest.Row).ClearContents 'RAZ inutile, à supprimer
Range("B3:F" & Range("B" & Rows.Count).End(xlUp).Row).AdvancedFilter xlFilterCopy, critere, dest 'filtre avancé copié
With Range(dest, Cells(Rows.Count, dest.Column).End(xlUp))
.Sort .Columns(1), xlAscending, Header:=xlYes 'tri sur la 1ère colonne
tablo = .Value 'matrice, plus rapide
For i = UBound(tablo) To 2 Step -1
If tablo(i, 1) = tablo(i - 1, 1) Then tablo(i, 1) = ""
Next
.Columns(1) = tablo
.Cells(.Rows.Count + 1, 3) = "=SUM(" & .Columns(3).Address(0, 0) & ")" 'total
.Offset(.Rows.Count).Resize(Rows.Count - .Rows.Count - .Row + 1).Borders.LineStyle = xlNone 'effacement des bordures
End With
Application.EnableEvents = True 'réactive les évènements
End Sub