Sub Test()
'Tu ajoutes dans la fenêtre "références"
'de la barre des menus / outils / références
'la référence suivante en la cochant :
'"Microsoft Scripting Runtime"
Dim Dic As Dictionary, C As Range
Dim t(), A As Long, N As Variant, X As Integer
Dim DerLig As Long
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Feuil1")
With .Range("A:D")
DerLig = .Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
For Each C In .Range("D2:D" & DerLig)
If C <> "" Then
If Not Dic.exists(C.Value) Then
Dic.Add C.Value, C.Offset(, -3).Value
End If
End If
Next
ReDim t(1 To Dic.Count, 1 To 2)
For A = 0 To Dic.Count - 1
N = Dic.Keys(A)
X = Application.CountIf(Feuil1.Range("D1:D" & DerLig), N)
t(A + 1, 1) = Dic.Items(A)
t(A + 1, 2) = Dic.Keys(A)
Next
.Range("G1").Resize(A, 2) = t
With .Range("G1:H" & A)
.Sort key1:=Range("H1"), Order1:=xlDescending, Header:=xlNo
End With
End With
End Sub