Comme promis, voici le code pour concaténer une série de codes et composer ttes les variantes possibles.
Il faut 2 feuilles: "PARAM" pour les listes de codes, et "RESULT" pour le résultat.
Peut-être qu'un jour dans 1000 ou 2000 ans, ça pourra servir à qqun d'autre ;-)
A+
SVri
Sub CreeCodes()
Dim NbParam, VarI, VarJ, VLig, Lig, Test As Integer
Dim Code, MarqueurFin As String
'=====================================================================
MarqueurFin = "FIN" ' <== marqueur de fin de liste ou dernier param.=
'=====================================================================
NbParam = 0
' ===== Recherche le Nb de paramètres à prendre en compte =====
' (Limité à 8 params)
Sheets("PARAM").Activate
For VarI = 1 To 9
If Cells(2, VarI).Value = "FIN" Then NbParam = VarI - 1: Exit For
Next VarI
' ===== recherche le nb de valeurs pour chq paramètre =====
Dim LongParam(8)
For VarI = 1 To NbParam
For VarJ = 2 To 1000
If Cells(VarJ, VarI).Value = MarqueurFin Then LongParam(VarI) = VarJ - 2: Exit For
Next VarJ
Next VarI
' met 1 dans la long. des params non utilisés de façon à passer ds la boucle finale
For i = NbParam + 1 To 8
LongParam(i) = 1
Next i
' ici, obligé de donner une longueur par défaut, ce ne peut pas être une variable (??!)
Dim Param1(100)
Dim Param2(100)
Dim Param3(100)
Dim Param4(100)
Dim Param5(100)
Dim Param6(100)
Dim Param7(100)
Dim Param8(100)
' ===== Alimente les tableaux avec les valeurs trouvées, pour chq paramètre =====
For VarI = 1 To LongParam(1)
Param1(VarI) = Cells(VarI + 1, 1).Value
If Param1(VarI) = MarqueurFin Then Param1(VarI) = ""
Next VarI
For VarI = 1 To LongParam(2)
Param2(VarI) = Cells(VarI + 1, 2).Value
If Param2(VarI) = MarqueurFin Then Param2(VarI) = ""
Next VarI
For VarI = 1 To LongParam(3)
Param3(VarI) = Cells(VarI + 1, 3).Value
If Param3(VarI) = MarqueurFin Then Param3(VarI) = ""
Next VarI
For VarI = 1 To LongParam(4)
Param4(VarI) = Cells(VarI + 1, 4).Value
If Param4(VarI) = MarqueurFin Then Param4(VarI) = ""
Next VarI
For VarI = 1 To LongParam(5)
Param5(VarI) = Cells(VarI + 1, 5).Value
If Param5(VarI) = MarqueurFin Then Param5(VarI) = ""
Next VarI
For VarI = 1 To LongParam(6)
Param6(VarI) = Cells(VarI + 1, 6).Value
If Param6(VarI) = MarqueurFin Then Param6(VarI) = ""
Next VarI
For VarI = 1 To LongParam(7)
Param7(VarI) = Cells(VarI + 1, 7).Value
If Param7(VarI) = MarqueurFin Then Param7(VarI) = ""
Next VarI
For VarI = 1 To LongParam(8)
Param8(VarI) = Cells(VarI + 1, 8).Value
If Param8(VarI) = MarqueurFin Then Param8(VarI) = ""
Next VarI
' ===== BOUCLE FINALE =====
' ===== Ecrit le résultat dans Result =====
Lig = 1
Sheets("RESULT").Activate
For a = 1 To (LongParam(1))
For b = 1 To (LongParam(2))
For c = 1 To (LongParam(3))
For d = 1 To (LongParam(4))
For e = 1 To (LongParam(5))
For f = 1 To (LongParam(6))
For g = 1 To (LongParam(7))
For h = 1 To (LongParam(8))
Cells(Lig, 1).Value = Param1(a) & Param2(b) & Param3(c) & Param4(d) & Param5(e) & Param6(f) & Param7(g) & Param8(h)
Lig = Lig + 1
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
MsgBox ("Terminé !!" & Chr(13) & Lig - 1 & " Codes créés!")
End Sub