Lister toutes les combinaisons de plusieurs colonnes
Bonjour à tous,
Je débute un peu en VBA et je voudrais savoir s'il est possible d'effectuer une liste de toutes les combinaisons de valeur possibles sans les concaténer dans une même cellule.
Je m'explique, dans mon fichier j'ai 3 onglets, un onglet "Parametres", un onglet "Donnees" et un onglet "Exemple".
- Dans l'onglet Parametres, je possède 3 colonnes : dans la colonne Test1 j'ai 3 valeurs qui sont 1 2 3; dans la colonne Test2 j'ai 5 valeurs qui sont 1 2 3 4 5 et dans la colonne Test3 j'ai 2 valeurs qui sont 1 2
- Dans l'onglet Parametres, je possède également ces 3 mêmes colonnes Test1 Test2 et Test3 qui sont toutes les 3 vides. L'idée serait de remplir ces colonnes avec toutes les combinaisons possibles (ex : 1 1 1 puis 1 1 2 puis 1 2 1.... voir onglet "Exemple")
En cherchant un peu, j’ai pu trouver une macro qui répond en partie à mon besoin. En effet, elle permet bien de décliner toutes les combinaisons possibles, mais le résultat est concaténé dans la colonne A.
Est-ce qu’il serait possible de réaliser quelque chose de similaire, mais sans concaténer les valeurs dans une même colonne ?
Merci pour votre aide !
bonjour,
une proposition
Sub ListAllCombinations()
'Updateby Extendoffice
'Dim wbLocal As Workbook
'Set wbLocal = ActiveWorkbook
Dim wsDonnees As Worksheet
Set wsDonnees = Worksheets("Donnees")
Dim xDRg1, xDRg2, xDRg3 As Range
Dim xRg As Range
Dim xStr As String
Dim xFN1, xFN2, xFN3 As Integer
Dim xSV1, xSV2, xSV3 As String
Set xDRg1 = Range("A2:A4") 'First column data
Set xDRg2 = Range("B2:B6") 'Second column data
Set xDRg3 = Range("C2:C3") 'Third column data
xStr = "-" 'Separator
Set xRg = wsDonnees.Range("A2") 'Output cell
For xFN1 = 1 To xDRg1.Count
xSV1 = xDRg1.Item(xFN1).Text
For xFN2 = 1 To xDRg2.Count
xSV2 = xDRg2.Item(xFN2).Text
For xFN3 = 1 To xDRg3.Count
xSV3 = xDRg3.Item(xFN3).Text
xRg.Value = xSV1
xRg.Offset(, 1).Value = xSV2
xRg.Offset(, 2).Value = xSV3
Set xRg = xRg.Offset(1, 0)
Next
Next
Next
End SubBonjour,
Bonjour H2so4
une autre proposition :
Sub code_combins()
Dim Tbl1, Tbl2, Tbl3
Dim Tbl()
Dim I As Long, J As Long, K As Long, M As Long
With Sheets("Parametres")
Tbl1 = .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
Tbl2 = .Range("B2:B" & .Cells(Rows.Count, "B").End(xlUp).Row)
Tbl3 = .Range("C2:C" & .Cells(Rows.Count, "C").End(xlUp).Row)
End With
ReDim Tbl(1 To (UBound(Tbl1) * UBound(Tbl2) * UBound(Tbl3)), 1 To 3)
M = 1
For I = LBound(Tbl1) To UBound(Tbl1)
For J = LBound(Tbl2) To UBound(Tbl2)
For K = LBound(Tbl3) To UBound(Tbl3)
Tbl(M, 1) = Tbl1(I, 1): Tbl(M, 2) = Tbl2(J, 1): Tbl(M, 3) = Tbl3(K, 1): M = M + 1
Next K
Next J
Next I
With Sheets("Donnees")
.Range("A2").Resize(UBound(Tbl), 3) = Tbl
End With
End SubBonne journée
Merci beaucoup à tous les deux, c'est parfait !
Et je crois que j'arrive à comprendre les subtilités dans vos réponses