Bonsoir,
Du coup, je vois que tu n'as pas eu de solution VBA ! Pour combler cette lacune :
Sub RécapDéfauts()
Dim Tdf(), d As Object, k, i%, j%, n%
Set d = CreateObject("Scripting.Dictionary")
With ActiveSheet
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 2 To n
If .Cells(i, 1) > 1 Then
k = .Cells(i, 1) & "|" & .Cells(i, 2)
If d.exists(k) Then
d(k) = d(k) + 1
Else
d(k) = 1
End If
End If
Next i
End With
If d.Count > 0 Then ReDim Tdf(d.Count, 2): n = 0
For Each k In d.keys
n = n + 1: Tdf(n, 0) = k: Tdf(n, 1) = CInt(d(k))
Next k
For i = 1 To n - 1
For j = i + 1 To n
If Tdf(j, 1) > Tdf(i, 1) Then
Tdf(0, 0) = Tdf(j, 0): Tdf(0, 1) = Tdf(j, 1)
Tdf(j, 0) = Tdf(i, 0): Tdf(j, 1) = Tdf(i, 1)
Tdf(i, 0) = Tdf(0, 0): Tdf(i, 1) = Tdf(0, 1)
End If
Next j
Next i
For i = 1 To n
k = Split(Tdf(i, 0), "|")
Tdf(i, 0) = k(0): Tdf(i, 2) = k(1)
Next i
Tdf(0, 0) = "Code défaut": Tdf(0, 1) = "Quantité": Tdf(0, 2) = "Description"
ActiveSheet.Range("J1").Resize(n + 1, 3).Value = Tdf
End Sub
L'affectation du résultat (dernière ligne) peut bien sûr se faire n'importe où, en remplaçant ActiveSheet par une autre feuille et Range("J1") par une autre cellule comme cellule supérieure gauche de la plage résultats.
Cordialement.