Permutation et combinaisons

Bonjour à tous,

J'ai besoin de votre aide et de votre expertise en excel pour me débloquer d'un problème dont je ne trouve pas de solutions.

Voila le sujet :

A partir de 4 tables de données de distances, j'aimerais calculer toutes les combinaisons (possibilités) dont le résultat donne l'addition de 4 distances.

Exemple : distance a1+distance b1+distance c1+distance d1 =x ; distance a1+distance b1+distance c1+ distance d2=x1 etc.....

J'ai réaliser la permutation/combinaison "à la main" (en décalant à chaque fois les valeurs des differentes disctances) mais l'objectif est d'automatiser tout ca.

Existe t-il une fonction ou algorithme permettant d'éffectuer cela ?

Je vous laisse le fichier qui contient 4 feuilles de distances et une feuille pour le calcul de toutes les combinaisons possibles.

bonjour,

une proposition avec 4 boucles imbriquées

Sub aargh()
    v = 1
    For i1 = 2 To 11
        d1 = Sheets("distance 1").Cells(i1, 2)
        For i2 = 2 To 11
            d2 = Sheets("distance 2").Cells(i2, 2)
            For i3 = 2 To 11
                d3 = Sheets("distance 3").Cells(i3, 2)
                For i4 = 2 To 11
                    d4 = Sheets("distance 4").Cells(i4, 2)
                    v = v + 1
                    Sheets("Variant Combination").Cells(v, 2) = "Variant " & v
                    Sheets("Variant Combination").Cells(v, 2) = d1
                    Sheets("Variant Combination").Cells(v, 3) = d2
                    Sheets("Variant Combination").Cells(v, 4) = d3
                    Sheets("Variant Combination").Cells(v, 5) = d4
                    Sheets("Variant Combination").Cells(v, 6) = d1 + d2 + d3 + d4
                Next i4
            Next i3
        Next i2
    Next i1
End Sub

Bonjour,

Sub CombiDistances()
    Dim TD(1 To 4), Tbl(), i%, a%, b%, c%, d%
    For i = 1 To 4
        TD(i) = Worksheets("Distance " & i).Range("B2:B11").Value
    Next i
    ReDim Tbl(9999, 1 To 4): i = 0
    For a = 1 To 10
        For b = 1 To 10
            For c = 1 To 10
                For d = 1 To 10
                    Tbl(i, 1) = TD(1)(a, 1)
                    Tbl(i, 2) = TD(2)(b, 1)
                    Tbl(i, 3) = TD(3)(c, 1)
                    Tbl(i, 4) = TD(4)(d, 1)
                    i = i + 1
                Next d
            Next c
        Next b
    Next a
    Worksheets("Variant combination").Range("B2").Resize(10000, 4).Value = Tbl
End Sub

Pas vraiment optimisé, mais 10000 combinaisons, cela reste un nombre relativement réduit.

edit: Salut h2so4 !

Merci beaucoup vous êtes des machines les gars !

Au niveau des combinaisons possibles cela fait bien 4^10 = 10000 ?

Avec ton algo h2so4, j'obtient 6562 possibilités.

4^10 = 1048576

10^4 = 10000 solutions normalement

Avec ton algo h2so4, j'obtient 6562 possibilités.

j'ai confondu nombre de lignes et nombre de distance, c'est corrigé.

Etant donné les valeurs en double on tombe à 6480 si on considère l'ordre des distances

Merci, vous êtes vraiment impressionant !

Comment gérer les doublons dans vos scripts ?

Il arrive que j'ai trois ou quatres fois la même combinaison. (variant 4209;4249;4909;4949) pour le dernier script de h2so4.

Bonjour,

normal si tu as plusieurs fois la même distance dans le même tableau (300 et 500 dans tableau 3).

pour exclure ces valeurs sans modifier les tableaux des distances

Sub aargh()
    v = 1
    Set dict = CreateObject("scripting.dictionary")
    For i1 = 2 To 11
        d1 = Sheets("distance 1").Cells(i1, 2)
        For i2 = 2 To 11
            d2 = Sheets("distance 2").Cells(i2, 2)
            For i3 = 2 To 11
                d3 = Sheets("distance 3").Cells(i3, 2)
                For i4 = 2 To 11
                    d4 = Sheets("distance 4").Cells(i4, 2)
                    k = d1 & "|" & d2 & "|" & d3 & "|" & d4
                    If Not dict.exists(k) Then
                    dict.Add k, 1
                    v = v + 1
                    Sheets("Variant Combination").Cells(v, 1) = "Variant " & v - 1
                    Sheets("Variant Combination").Cells(v, 2) = d1
                    Sheets("Variant Combination").Cells(v, 3) = d2
                    Sheets("Variant Combination").Cells(v, 4) = d3
                    Sheets("Variant Combination").Cells(v, 5) = d4
                    Sheets("Variant Combination").Cells(v, 6) = d1 + d2 + d3 + d4
                    End If
                Next i4
            Next i3
        Next i2
    Next i1
End Sub
Rechercher des sujets similaires à "permutation combinaisons"