=OrdreParColonne(B3:J5)
Function OrdreParColonne(Plage As Range) As Integer()
Dim Tbl() As Integer
Dim Cel As Range
Dim Col As Range
Dim I As Integer
For Each Col In Plage.Columns
For Each Cel In Col.Cells
If Cel.Value <> "" Then
I = I + 1
ReDim Preserve Tbl(1 To I)
Tbl(I) = Cel.Value
End If
Next Cel
Next Col
OrdreParColonne = Tbl()
End Function
Function Classement(tablo, Optional ncite&)
Dim a(), d As Object, e, b, c, i&, n&
tablo = tablo 'matrice, plus rapide
ReDim a(1 To Application.Caller.Columns.Count)
If ncite Then
Set d = CreateObject("Scripting.Dictionary")
For Each e In tablo
If e <> "" Then d(e) = d(e) + 1 'comptage
Next
If d.Count Then
b = d.keys: c = d.items
For i = 0 To UBound(b)
If c(i) = ncite Then
n = n + 1
a(n) = b(i)
End If
Next
End If
Else
For Each e In tablo
If e <> "" Then
n = n + 1
a(n) = e
End If
Next
End If
For i = n + 1 To UBound(a)
a(i) = "" 'évite les valeurs zéros
Next
Classement = a 'vecteur ligne
End Function
Function ClassementNombre(tablo, Optional ncite&)
Dim d As Object, e, b, c, i&, n&, a()
tablo = tablo 'matrice, plus rapide
If ncite Then
Set d = CreateObject("Scripting.Dictionary")
For Each e In tablo
If IsNumeric(CStr(e)) Then d(e) = d(e) + 1 'comptage
Next
If d.Count Then
b = d.keys: c = d.items
For i = 0 To UBound(b)
If c(i) = ncite Then
n = n + 1
ReDim Preserve a(1 To n)
a(n) = b(i)
End If
Next
End If
Else
For Each e In tablo
If IsNumeric(CStr(e)) Then
n = n + 1
ReDim Preserve a(1 To n)
a(n) = e
End If
Next
End If
If n Then ClassementNombre = a Else ClassementNombre = "" 'vecteur ligne
End Function
Dim d As Object 'mémorise la variable
If d Is Nothing Then Set d = CreateObject("Scripting.Dictionary") Else d.RemoveAll