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.
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 !!