Calcul de combinaisons possible

  • Initiateur de la discussion Initiateur de la discussion steve
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

steve

XLDnaute Nouveau
Bonjour,

Je souhaite créer un calcul me permettant de déterminé toutes les possibilités pour optimiser un débit de matière.

Mes barres mesurent 12000mm, et j'ai différentes pièces à couper dedans :
lg. 3935, lg 2150, lg 1018, lg 3615, lg 3500, lg 1597, lg 3666, lg 3175, lg 2894 et lg 3828

Il faudrais qu'il me montrent toutes les combinaisons que nous pouvons envisager.

Merci à vous pour votre aide.
 
Re : Calcul de combinaisons possible

Bonjour, steve et bienvenue sur XLD.

Suivez Ce lien n'existe plus.
L'original de Jean DUPRAT (sans pub aucune)
Et pour les prochaines questions, pensez à joindre un court fichier en exemple qui nous permettra de tester nos propositions avant de vous les soumettre.
 
Dernière édition:
Re : Calcul de combinaisons possible

Bonjour,

Veuillez trouver ci-joint un fichier contenant la liste des combinaisons possibles, triée par longueur de chute croissant
(il existe une solution pour laquelle il n'y a pas de chute, mais en découpe il faut toujours prendre en compte la perte matière du à la largeur de l'instrument de découpe..)
 

Pièces jointes

Re : Calcul de combinaisons possible

Hello

ce que je te propose ne va pas te donner Toutes les combinaisons possibles: car trop de paramètres à prendre en compte
notamment celui de: Combien de fois chaque longueur peut elle êre débitée?
faut il un débit de chaque longueur etc etc

Dans la PJ
pour chaque longueur possible (table jaune), je te calcul le nombre de fois max que tu peux faire pour chaque longueur unique
en clair: dans 12 000mm, tu peux faire 11 * 1018 OU 7*1597 OU 5*2150... etc etc
auquel cas, en colonne C, il te restera...x mm
exemple:
11 * 1018: te restera 802mm
5*2150, te restera 1250.. donc.. tu pourra faire une longueur de plus en 1018...

pour ca
tu choisis en B18, La longueur 1
en C18, tu récupères le nombre max que tu peux faire
tu choisis en D18
restera donc en E18
en F: les longueurs encore possibles apparaissent avec le nombre max pour chacune en G
tu choisis encore une fois en H etc etc..
 

Pièces jointes

Re : Calcul de combinaisons possible

Bonjour à tous.


Rien de neuf dans ma proposition : j'ai simplement repris le code de NezQuiCoule pour l'accélérer (x 4) et le paramétrer pour le rendre plus facile à maintenir.​
Code:
Sub Croisement21()
Dim Longueur#, L(), M&(1 To 10), L0#, nb&, i&
Dim i1&, i2&, i3&, i4&, i5&, i6&, i7&, i8&, i9&, i10&
Const k& = 10

Rem     Au choix, ces deux lignes :
Rem =============================================================================

'  Longueur = 12000
'  L = Array(Empty, 3935, 2150, 1018, 3615, 3500, 1597, 3666, 3175, 2894, 3828)

Rem =============================================================================

Rem     ou ces quatre lignes :
Rem =============================================================================

  With Worksheets("Données")
    Longueur = .Range("C2").Value
    L = WorksheetFunction.Transpose(.Range("C3").Resize(k).Value)
  End With

Rem =============================================================================

  With Worksheets("Combinaisons").Range("A1").Resize(1, k + 2)
    Intersect(.CurrentRegion.Offset(1), .Parent.Columns(1).Resize(, k + 2)).ClearContents

    L0 = Longueur
    For i = 1 To k
      If L(i) > 0 Then M(i) = Longueur \ L(i): If L(i) < L0 Then L0 = L(i)
    Next

    For i1 = 0 To M(1): Longueur = Longueur + L(1) * (i1 > 0): If Longueur < 0 Then i1 = i1 + 1: Exit For
    For i2 = 0 To M(2): Longueur = Longueur + L(2) * (i2 > 0): If Longueur < 0 Then i2 = i2 + 1: Exit For
    For i3 = 0 To M(3): Longueur = Longueur + L(3) * (i3 > 0): If Longueur < 0 Then i3 = i3 + 1: Exit For
    For i4 = 0 To M(4): Longueur = Longueur + L(4) * (i4 > 0): If Longueur < 0 Then i4 = i4 + 1: Exit For
    For i5 = 0 To M(5): Longueur = Longueur + L(5) * (i5 > 0): If Longueur < 0 Then i5 = i5 + 1: Exit For
    For i6 = 0 To M(6): Longueur = Longueur + L(6) * (i6 > 0): If Longueur < 0 Then i6 = i6 + 1: Exit For
    For i7 = 0 To M(7): Longueur = Longueur + L(7) * (i7 > 0): If Longueur < 0 Then i7 = i7 + 1: Exit For
    For i8 = 0 To M(8): Longueur = Longueur + L(8) * (i8 > 0): If Longueur < 0 Then i8 = i8 + 1: Exit For
    For i9 = 0 To M(9): Longueur = Longueur + L(9) * (i9 > 0): If Longueur < 0 Then i9 = i9 + 1: Exit For
    For i10 = 0 To M(10): Longueur = Longueur + L(10) * (i10 > 0)
      If Longueur < 0 Then
        i10 = i10 + 1: Exit For
      ElseIf Longueur < L0 Then
        nb = nb + 1
        .Offset(nb) = Array(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, Longueur, i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9 + i10)
        DoEvents
      End If
    Next: Longueur = Longueur + L(10) * (i10 - 1)
    Next: Longueur = Longueur + L(9) * (i9 - 1)
    Next: Longueur = Longueur + L(8) * (i8 - 1)
    Next: Longueur = Longueur + L(7) * (i7 - 1)
    Next: Longueur = Longueur + L(6) * (i6 - 1)
    Next: Longueur = Longueur + L(5) * (i5 - 1)
    Next: Longueur = Longueur + L(4) * (i4 - 1)
    Next: Longueur = Longueur + L(3) * (i3 - 1)
    Next: Longueur = Longueur + L(2) * (i2 - 1)
    Next

  End With

End Sub


Bonne soirée.


ℝOGER2327
#7767


Mercredi 25 Gueules 142 (Sainte Marmelade, inspirée - fête Suprême Quarte)
1[SUP]er[/SUP] Ventôse An CCXXIII, 7,1690h - tussilage
2015-W08-4T17:12:20Z
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour