XL 2019 Combinaison de valeur sans doublon

NewTeam

XLDnaute Nouveau
Bonjour,
Etant nouveau sur ce forum, je vais essayer de m'exprimer du mieux possible.
J'ai 7 valeurs d'équipements
FoilHeavyHullLightRadioSkinWinch
et je cherche à trouver toutes les combinaisons possible tout en respectant l'ordre de mes valeurs. Le résultat peut aller de 1 à 7 valeurs combinés avec un séparateur de "," .
Merci d'avance pour votre aide précieuse.
 

job75

XLDnaute Barbatruc
Bonsoir NewTeam, bienvenue sur XLD,

Je n'ai pas cherché mais ce problème a certainement déjà été traité.

Voyez le fichier joint et cette macro brute de fonderie :
VB:
Sub Combinaisons()
Dim liste, ub%, s$, col%, lig&, a%, b%, c%, d%, e%, f%
liste = Array("Foil", "Heavy", "Hull", "Light", "Radio", "Skin", "Winch")
ub = UBound(liste)
s = ", "
Application.ScreenUpdating = False
Rows("2:" & Rows.Count).ClearContents 'RAZ
'---1 mot---
col = 1: lig = 2
Cells(lig, col).Resize(ub + 1) = Application.Transpose(liste)
'---2 mots---
col = 2: lig = 2
For a = 0 To ub - 1
    For b = a + 1 To ub
        Cells(lig, col) = liste(a) & s & liste(b)
        lig = lig + 1
Next b, a
'---3 mots---
col = 3: lig = 2
For a = 0 To ub - 2
    For b = a + 1 To ub - 1
        For c = b + 1 To ub
            Cells(lig, col) = liste(a) & s & liste(b) & s & liste(c)
            lig = lig + 1
Next c, b, a
'---4 mots---
col = 4: lig = 2
For a = 0 To ub - 3
    For b = a + 1 To ub - 2
        For c = b + 1 To ub - 1
            For d = c + 1 To ub
                Cells(lig, col) = liste(a) & s & liste(b) & s & liste(c) & s & liste(d)
                lig = lig + 1
Next d, c, b, a
'---5 mots---
col = 5: lig = 2
For a = 0 To ub - 4
    For b = a + 1 To ub - 3
        For c = b + 1 To ub - 2
            For d = c + 1 To ub - 1
                For e = d + 1 To ub
                    Cells(lig, col) = liste(a) & s & liste(b) & s & liste(c) & s & liste(d) & s & liste(e)
                    lig = lig + 1
Next e, d, c, b, a
'---6 mots---
col = 6: lig = 2
For a = 0 To ub - 5
    For b = a + 1 To ub - 4
        For c = b + 1 To ub - 3
            For d = c + 1 To ub - 2
                For e = d + 1 To ub - 1
                    For f = e + 1 To ub
                        Cells(lig, col) = liste(a) & s & liste(b) & s & liste(c) & s & liste(d) & s & liste(e) & s & liste(f)
                        lig = lig + 1
Next f, e, d, c, b, a
'---7 mots---
col = 7: lig = 2
Cells(lig, col) = Join(liste, s)
Columns.AutoFit 'ajustement largeurs
End Sub
Avec 7 éléments le nombre total de combinaisons est 2^7-1 = 127.

La macro est améliorable en terme de rapidité.

A+
 

Pièces jointes

  • Combinaisons(1).xlsm
    18.4 KB · Affichages: 17

Statistiques des forums

Discussions
312 103
Messages
2 085 310
Membres
102 859
dernier inscrit
Diallokass