Sub Combinaisons(texte, N)
Dim s, P&, Nar&, temp(), d As Object, i&, j&
Range("C2:C" & Rows.Count).ClearContents 'RAZ
N = Int(Val(CStr(N)))
If CStr(texte) = "" Or N < 1 Then Exit Sub
s = Split(CStr(texte), "-")
P = UBound(s) + 1
Nar = P ^ N 'nombre d'arrangements
ReDim temp(1 To N)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Nar
For j = 1 To N
temp(j) = s(Int((i - 1) * P ^ j / Nar) Mod P)
Next
Call tri(temp, 1, N) 'tri des items
d(Join(temp, "-")) = "" 'élimine les doublons
Next
If d.Count > Rows.Count - 1 Then MsgBox d.Count & _
" : impossible d'afficher !", , "Nombre de combinaisons": Exit Sub
s = d.keys
ReDim temp(1 To d.Count, 1 To 1)
For i = 1 To d.Count 'transposition
temp(i, 1) = s(i - 1)
Next
[C2].Resize(d.Count) = temp
End Sub
Sub tri(a, gauc, droi) ' Quick sort
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