Option Explicit
Const nb = 500000
Const frequence = 1
Sub test_Array()
ReDim t(1 To nb)
Dim max&, i&, n&, deb
deb = Timer: max = nb / frequence
For i = 1 To nb: t(i) = Int(Rnd * max): Next
tri t, 1, nb
n = 2
For i = 2 To nb
If t(i) <> t(n) Then n = n + 1: t(n) = t(i)
Next i
ReDim Preserve t(1 To n)
MsgBox "Durée = " & Format(Timer - deb, "0.00\ sec.") & vbLf & vbLf & _
Format(nb, "#,##0") & " éléments au départ -> " & Format(UBound(t), "#,##0") & " sans doublon."
End Sub
Sub tri(a(), gauc&, droi&) ' Quick sort par BOISGONTIER
Dim ref&, g&, d&, temp&
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
temp = a(g): a(g) = a(d): a(d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub