Afficher toutes les permutations de n variables (nombres)

Bonjour,

Étant vraiment bloqué dans l'avancement de mon projet, je poste ce sujet en espérant qu'on puisse me débloquer !!

Contexte :

Je dois créer un fichier Excel pour optimiser les temps de changement d'un laminoir. Les changements s'effectuent lorsqu'on change de dimension. Il y a 45 dimensions différentes, mais nous ne pouvons en faire que 8 au maximum.

Problèmes :

Pour optimiser ce temps de changement, je voudrais créer la meilleure permutation possible de dimensions qui auront été choisiies au préalable. Il faudrait donc que l'on puisse changer ces variables sur des cellules directement.

De plus, il faudrait que chaque permutation possible soit les unes à la suite des autres sur des lignes différentes, mais que les variables soient sur des colonnes différentes. Vous trouverez ci-joint un fichier avec la solution que j'aimerais avoir.

Je vous remercie d'avance pour le temps que vous allez consacrer à ce problème

Cordialement.

Ps : Il n'y a pas de notion d'optimisation pour le moment, les temps seront rajoutés dans une deuxième partie en fonction des permutations.

18essai.xlsx (11.14 Ko)

Salut Hugo,

sibyllins, tes critères de permutation, dis donc !!!
Je vois bien des nombres qui changent de colonne mais sans schéma logique permettant d'en comprendre... la logique !!!
Les "etc" ne m'aident guère non plus ! Bizarre, hein ?

À ce stade, je ne vois aucune automatisation possible à moins que, in fine, tu ne demandes en fait qu'une macro te permettant de manipuler manuellement ces valeurs de colonne en colonne ?

Bête question : comment ces manip' seront-elles comprises par tes machines ???

Peux-tu être plus explicite quant à ta demande ?

A+

bonsoir à tous,

une proposition d'algorithme de génération de toutes les permutations possibles : (valeurs numériques à permuter doivent être comprises entre 0 et 255)

Sub aargh()
    Dim Tbl()
    Dim i As Long, ne As Long, j As Long, dl As Long, dc As Long
    Dim Chaine As String
    dc = Cells(4, Columns.Count).End(xlToLeft).Column
    For i = 3 To dc
        Chaine = Chaine & Chr(Cells(4, i))
    Next i
    If Len(Chaine) > 9 Then
        MsgBox "trop de caractères à permuter"
        Exit Sub
    End If
    ne = Application.WorksheetFunction.Fact(Len(Chaine))
    ReDim Tbl(1 To ne, 1 To Len(Chaine))
    Permuter Chaine, "", Tbl, j
    dl = Cells(Rows.Count, 1).End(xlUp).Row
    Cells(8, 1).Resize(dl - 8, 10).Delete
    Cells(8, 1).Resize(j, Len(Chaine)).Value = Tbl
End Sub

Sub Permuter(Chaine As String, Debut As String, Tbl(), j As Long)
    Dim i As Long, texte As String
    If Len(Chaine) = 1 Then
        j = j + 1
        texte = Debut & Chaine
        For i = 1 To Len(texte)
            Tbl(j, i) = Asc(Mid(texte, i, 1))
        Next i
    Else
        For i = 1 To Len(Chaine)
            Permuter Mid(Chaine, 2, Len(Chaine) - 1), Debut & Left(Chaine, 1), Tbl, j
            Chaine = Mid(Chaine, 2, Len(Chaine) - 1) & Left(Chaine, 1)
        Next
    End If
End Sub

Bonjour,

Merci beaucoup pour vos réponses.

h2so4, c'est exactement ce que je voulais, mais à un petit détail prêt (c'est de ma faute, je ne l'avais pas précisé). Mes dimensions peuvent comporter des virgules or quand j'active la macro, elle me supprime les virgules. C'est assez embêtant étant donné qu'on a des dimensions de 22 et 22,2 mm de diamètres par exemple.

J'ai essayé de changer de variable et la fonction "Chr" mais ça ne marche pas. Serait-il possible de m'aider encore un peu ?

Curulis57, peut-être qu'en regardant le fichier Excel de h2so4 m'a demande sera plus claire pour vous. Ma demande consisté seulement à afficher toutes les permutations possibles de n variables numériques.

Pour répondre à votre question "comment ces manip' seront-elles comprises par tes machines ???" : ce fichier ne sera qu'une aide à la décision pour planifier les dimensions à laminer dans une journée.

Cordialement,

bonjour,

une version adaptée (un peu plus lente)

Sub aargh()
    Dim Tbl(), tabval
    Dim i As Long, ne As Long, j As Long, dl As Long, dc As Long
    Dim Chaine As String
    With Sheets("feuil1")
        dc = .Cells(4, Columns.Count).End(xlToLeft).Column
        tabval = .Cells(4, 3).Resize(1, dc - 2)
        For i = 1 To UBound(tabval, 2)
            Chaine = Chaine & Chr(i + 64)
        Next i
        If Len(Chaine) > 9 Then
            MsgBox "trop de valeurs à permuter"
            Exit Sub
        End If
        ne = Application.WorksheetFunction.Fact(Len(Chaine))
        .Range("G7") = ne
        ReDim Tbl(1 To ne, 1 To Len(Chaine))
        Permuter Chaine, "", Tbl, j, tabval
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        On Error Resume Next
        .Cells(8, 1).Resize(dl - 8, 10).Delete
        On Error GoTo 0
        .Cells(8, 1).Resize(j, Len(Chaine)).Value = Tbl
    End With
End Sub

Sub Permuter(Chaine As String, Debut As String, Tbl(), j As Long, tabval)
    Dim i As Long, texte As String
    If Len(Chaine) = 1 Then
        j = j + 1
        texte = Debut & Chaine
        For i = 1 To Len(texte)
            Tbl(j, i) = tabval(1, Asc(Mid(texte, i, 1)) - 64)
        Next i
    Else
        For i = 1 To Len(Chaine)
            Permuter Mid(Chaine, 2, Len(Chaine) - 1), Debut & Left(Chaine, 1), Tbl, j, tabval
            Chaine = Mid(Chaine, 2, Len(Chaine) - 1) & Left(Chaine, 1)
        Next
    End If
End Sub

C'est parfait, merci pour la rapidité avec laquelle vous avez répondu.

Bonne continuation !!

Rechercher des sujets similaires à "afficher toutes permutations variables nombres"