Function Classmt(Rg As Range, Rang As Integer) As Variant
Dim Tablo, i As Long, F As Long, P As Long, Id As Long, DC As Object, a, rés
Tablo = Rg.Value2
Set DC = CreateObject("Scripting.Dictionary")
For F = 1 To UBound(Tablo, 1)
DC(Tablo(F, 1)) = DC(Tablo(F, 1)) + Tablo(F, 2)
Next
Clefs = DC.Keys: Ttx = DC.items
NbF = DC.Count
ReDim a(1 To NbF, 1 To 3)
For F = 1 To NbF
a(F, 1) = Clefs(F - 1)
a(F, 2) = Ttx(F - 1)
Next F
'Tri par ordre alphabétique décroissant des noms des fournisseurs
Call Q_Tri_TxtD(a, 1, UBound(a), UBound(a, 2), 1)
'Ajout d 'une clé de tri tenant compte de l'ordre alphabétique
Fmax = WorksheetFunction.Max(Ttx)
F = Log(Fmax) \ Log(10) + 1 'Comptage du nbre de zéros pour format1
format1 = String(F, "0") & ".00"
format2 = "_" & String(7, "0") 'Affichage sur 7 chiffres pour format2
For F = 1 To NbF
a(F, 3) = Format(a(F, 2), format1) & Format(F, format2)
Next F
'Tri alphanumérique décroissant suivant la nouvelle clé
Call Q_Tri_TxtD(a, 1, UBound(a), UBound(a, 2), 3)
'Liste du Top x (x = rang cherché)
F = 1: P = 1: Id = 1
Do
F = F + 1
If a(F, 2) = a(F - 1, 2) Then
Id = Id + 1 'Un fournisseur de plus à ce même rang
Else
P = P + Id 'Rang suivant
If P > Rang Then Exit Do
Id = 1
End If
Loop While F < NbF
F = F - 1
'Tableau résultant limité au rang demandé
ReDim rés(1 To F, 1 To 2)
For i = 1 To F
rés(i, 1) = a(i, 1)
rés(i, 2) = a(i, 2)
Next i
Classmt = rés
End Function