Private Sub WorkSheet_Activate()
Dim d As Object, tablo, ncol%, i&, x$, n&, resu(), a, nn&, j%
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With Sheets("Feuil1") 'à adapter
If .FilterMode Then .ShowAllData 'si la feuille est filtrée
tablo = .Range("A1:AW" & .Range("A" & .Rows.Count).End(xlUp).Row)
End With
ncol = UBound(tablo, 2)
For i = 2 To UBound(tablo)
x = tablo(i, 2) & Chr(1) & tablo(i, 4) & Chr(1) & tablo(i, 8) & Chr(1) & tablo(i, 12)
If d.exists(x) Then If tablo(i, 1) < tablo(d(x), 1) Then d.Remove x 'teste la date
If Not d.exists(x) Then d(x) = i 'mémorise la ligne
Next i
'---tableau des résultats---
n = d.Count
If n Then
ReDim resu(1 To n, 1 To ncol)
a = d.items
For i = 1 To n
nn = a(i - 1)
For j = 1 To ncol
resu(i, j) = tablo(nn, j)
Next j, i
End If
'---restitution---
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [A2] '1ère cellule de restitution, à adapter
If n Then .Resize(n, ncol) = resu
.Offset(n).Resize(Rows.Count - n - .Row + 1, ncol).ClearContents 'RAZ en dessous
End With
Columns.AutoFit 'ajuste les largeurs
End Sub