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 !

45test-excel.xlsm (27.96 Ko)

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 Sub

Bonjour,

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 Sub

Bonne journée

Merci beaucoup à tous les deux, c'est parfait !

Et je crois que j'arrive à comprendre les subtilités dans vos réponses

Rechercher des sujets similaires à "lister toutes combinaisons colonnes"