Bon alors, je sais que cette macro n'a plus rien à voir, mais essaye là et dis moi si le résultat te conviens...
'A déclarer en entête de votre Module
Dim Tb(), IndTab As Long
Sub Appel_Combinaisons()
Dim i As Integer, p As Integer
Dim Chaine As String, Lettre As String
Erase Tb
IndTab = 0
p = InputBox("nombre d'elements: ")
For i = 1 To p
Lettre = InputBox("saisir la " & i & " ième valeur : ")
Chaine = Chaine & Lettre
Next
' La procédure Combiner a besoin de deux paramètres :
' La chaine : strText
' La sous chaine permettant la permutation : debut
' Celle-ci, lors de l'appel est bien évidemment vide
Combiner Chaine, ""
Range("G65535").End(xlUp).Offset(1, 0).Resize(UBound(Tb)) = Application.Transpose(Tb)
End Sub
Sub Combiner(strText As String, debut As String)
Dim i As Integer
If Len(strText) = 1 Then ' Lorsque la longueur de strText égale 1
' On stocke la chaine composée de : debut et strText
ReDim Preserve Tb(IndTab)
Tb(IndTab) = debut & strText
IndTab = IndTab + 1
Else
For i = 1 To Len(strText)
' On envoie le premier caractère de la sous-chaine strText au bout
Combiner Mid(strText, 2, Len(strText) - 1), debut & Mid(strText, 1, 1)
' Travail sur la chaine de caractères
strText = Mid(strText, 2, Len(strText) - 1) & Mid(strText, 1, 1)
Next
End If
End Sub
Note : Lorsque tu déclares plusieurs variables sur une même ligne, il convient de toutes les typer. Sinon, celles que tu ne typeras pas seront déclarées As Variant.
Dimi, p As Integer est équivalant à : Dim i As Variant, p As Integer