Lister des combinaisons sur plusieurs colonnes

AudreyR

XLDnaute Nouveau
Bonjour,

je cherche à faire une liste de combinaisons sur Excel qui s'afficherait sur plusieurs colonnes. Il y aurait 7 colonnes avec un nombre d'entrées différentes pour chaque colonne:

Col 1: 3 entrées
Col 2: 14 entrées
Col 3: 2 entrées
Col 4: 13 entrées
Col 5: 4 entrées
Col 6: 3 entrées
Col 7: 8 entrées

Le sujet a déjà été lancé ici mais la macro comportait beaucoup moins de combinaisons et je ne sais pas comment modifier la macro déjà proposée.

Merci d'avance!
 

vgendron

XLDnaute Barbatruc
Hello
j'ai repris ton fichier de l'autre post

la macro que tu avais déjà, pourrait etre modifiée pour aller jusqu'à 7 colonnes... sauf que.. ca va durer des plombes.
donc, autre solution avec des tables..


voir PJ

et attention.. si tu es en version Excel 97 ca ne va pas aller.. car il est limité à 65636 lignes...
 

Pièces jointes

  • Fargeadx.xlsm
    20.6 KB · Affichages: 73

AudreyR

XLDnaute Nouveau
Bonjour,

je voudrais une seconde fois solliciter votre aide. J'ai 2 autres listes de combinaisons à faire, l'une mène à une liste de 9408 combinaisons, et la deuxième à 645120 combinaisons. Est-ce que les nouvelles versions de Excel permettent de lister la deuxième? Et si oui, comme la fois précédente, je ne suis pas en mesure de faire la macro. Merci d'avance!
 

Pièces jointes

  • 2Combinaisons.xlsx
    11.8 KB · Affichages: 42

vgendron

XLDnaute Barbatruc
Hello
THE solution que je cherche depuis un moment pour s'affranchir du nombre de colonnes..
VB:
Sub col2a2()
Dim TabCol1(), TabCol2() As Variant
Dim TabloInter() As Variant
Dim tabloFinal() As Variant
Dim Dimension() As Variant

Sheets("Feuil3").UsedRange.ClearContents
With ActiveSheet
    NbCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 'récupère le nombre de colonnes
    nbLignemax = .UsedRange.Rows.Count 'taille de la zone de data
    TabData = .Range("A1").Resize(nbLignemax, NbCol).Value 'on récupère tout le tablo de données

    ReDim Dimension(1 To NbCol) 'tablo 1D contenant les dimensions de chaque colonne
    nbligne = 1 'initialisation du nombre total de combinaisons

    For i = 1 To NbCol 'sur chaque colonne
        Dimension(i) = Cells(Rows.Count, i).End(xlUp).Row  'on compte le nombre d'éléments de la colonne
        nbligne = nbligne * Dimension(i) 'calcul du nombre final de combinaisons
    Next i
  
'on set la première colonne
    If Dimension(1) = 1 Then
        TabCol1 = Range("A1").Value
    Else
        TabCol1 = .Range("A1:A" & Dimension(1)).Value
    End If

    For i = 1 To NbCol - 1
        If Dimension(i + 1) = 1 Then  'Cas Particulier d'un SEUL élément ==> Table impossible...?..
            Element = Cells(1, i + 1)
            ReDim TabloInter(1 To (UBound(TabCol1)), 1)
            j = 1
            For A = 1 To UBound(TabCol1)
                TabloInter(j, 1) = TabCol1(A, 1) & "-" & Element
                j = j + 1
            Next A
        '************
        Else
            TabCol2 = .Range("A1").Offset(0, i).Resize(Dimension(i + 1)).Value 'on set la colonne 2
  
            ReDim TabloInter(1 To (UBound(TabCol1)) * (Dimension(i + 1)), 1)
            j = 1
            For A = 1 To UBound(TabCol1)
                For b = 1 To UBound(TabCol2)
                    TabloInter(j, 1) = TabCol1(A, 1) & "-" & TabCol2(b, 1)
                    j = j + 1
                Next b
            Next A
            'ReDim TabCol1(1 To UBound(TabloInter), 1)
            'TabCol1 = TabloInter
        End If
        ReDim TabCol1(1 To UBound(TabloInter), 1)
        TabCol1 = TabloInter
Next i
                      
End With

If UBound(TabloInter) > Rows.Count Then
    MsgBox "Trop de lignes, il faut Separer"
    Sheets("Feuil3").Range("A1").Resize(UBound(TabloInter) / 2, 2) = TabloInter
Else
    Sheets("Feuil3").Range("A1").Resize(UBound(TabloInter), 2) = TabloInter
End If

Sheets("Feuil3").Activate
Columns("B:B").Select
    Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _
        1)), TrailingMinusNumbers:=True
End Sub

Bon.. j'ai encore des choses à changer..
le cas d'une colonne avec un SEUL element.. ce qui empeche apparemment d'utiliser un tablo
j'ai déjà traité le cas lorsque une des colones 2 3 4 ... ne contient qu'un seul element
mais j'ai pas traité le cas ou c'est DES la première colonne qu'il n'y a qu'un élément

Puis traiter le cas ou il y a plus de combinaison de nombres de lignes possible dans excel (pour l'instant si ca dépasse (ta Deuxième feuille), je n'affiche que la moitié

puis traiter la fin pour séparer les éléments selon le caractère "-"
 

vgendron

XLDnaute Barbatruc
Me revoici avec la solution "Quasi finale"==> j'ai encore un pb d'indice.....Grrrr.. que j'ai du mal avec ces redim tablo, resize ubound .. 1 to ubound.....

Bref..
tu peux quand meme tester le fichier joint
pour le "Premier cas".. ca passe nickel.. et c'est assez rapide (1seconde environ)
par contre. pour le "Deuxième" cas.. c'est beaucoup plus long. et il me manque juste une dernière combinaison..
 

Pièces jointes

  • 2Combinaisons.xlsm
    36.7 KB · Affichages: 31

vgendron

XLDnaute Barbatruc
Salut @pierrejean
il me semble que tu es assez familier avec les tableaux (me trompe je??)
Si c'est bien le cas, peux tu stp jeter un oeil au dernier fichier pour voir si tu trouves mon problème d'indice..
la toute dernière combinaison (cas feuille "Deuxième") est manquante..
je ne sais pour l'instant pas, si elle est manquante dans le tablo ou seulement à l'affichage...
Merci :-D
 

pierrejean

XLDnaute Barbatruc
Re

Bon voila j'y suis aussi arrivé
Mais tu es meilleur au point de vue vitesse !!
Il semble que l'on ait suivi le même raisonnement mais interprété de façon différente
Tu pourras noter l'utilisation du tablo en tant que tableau de tableaux
On peut remarquer que le 'calcul' est extrêmement rapide contrairement à l’écriture
 

Pièces jointes

  • 2Combinaisons (2).xlsm
    42.7 KB · Affichages: 66

Discussions similaires

Réponses
25
Affichages
803

Statistiques des forums

Discussions
311 726
Messages
2 081 955
Membres
101 852
dernier inscrit
dthi16088