Optimisation d'un dimensionnement bi-composant

Bonjour,

Je ne sais pas si tout le monde comprend mon titre de sujet, mais j'ai eu du mal à le formuler succinctement.

Dans le cadre de mon travail, je dois dimensionner des installations composé profilés.

Je souhaite récupérer 2 valeurs :

- Le nombre de profilé X (3300mm)

- Le nombre de profilé Y (2250mm)

En fonction d'une longueur total demandé, connu bien sur !

Le but est d'assuré la longueur total demandé tout en optimisant la quantité de profilés utilisés, et en réduisant la quantité de chute.

Exemple :

- La longueur total est de 9400mm : on doit avoir un résultat de 3 profilés de 3300mm (avec un chute de 500mm)

- La longueur total est de 8600mm : on doit avoir un résultat de 2 profilés de 3300mm et 1 de 2250mm (avec chute de 250mm)

Je pourrais y arriver avec une formule de 1 ou 2 km avec 40 SI, mais je suis sur qu'il doit y avoir une méthode plus simple

Merci par avance de votre lecture et de votre aide.

Math

Bonjour,

en vba, il faut accepter les macros à l'ouverture.
J'ai mis un nombre de barres maxi à 20 de chaque. Changer la constante nbMax si ce n'est pas assez.
Tu as 15 zones de saisies possibles en A5:A19. On peut étendre facilement dans le code si besoin.
Tu peux y coller plusieurs valeurs d'un coup.
Juste saisir la longueur et le résultat s'affiche.

16chute.xlsm (19.83 Ko)
image

eric

re, il faut installer l'app "Solveur" et puis on ajoute les limites etc.

8math8210.xlsx (15.53 Ko)

Salut BsAlv

c'était mon idée de départ mais le solveur fourni souvent une solution optimisée mais pas LA meilleure solution.
Es-tu sûr à 100% que ce n'est pas le cas avec la méthode Simplex ?
J'avoue que je l'ignore...
eric

re,

je pense que si on utilise "simplex" qu'on a une solution optimalisé, avec les 2 autres méthodes, cela n'est pas vrai. Mais on a aussi une autre app, le "OpenSolver" qui fonctionne presque pareil et qui est plus vite et plus omnivalent. Donc si vous aves souvent ce genre de problèmes, c'est un bon alternatif.

Bonjour à tous,

Merci à tous pour vos retour.

Je test actuellement la solution d'@eriiic (Plus pratique pour moi car je dois pouvoir faire ressortir 4 résultat en même temps afin d'implémenter les nombres de profilés dans ma Feuil1)

Ayant implanter le code en Feuil2 et en reliant les cases "Longueur" aux calculs de ma Feuil1, ces valeurs s'implémentent bien, mais le calcul ne se met pas à jour.

Je dois cliquer sur les valeur de longueur dans le tableau de calcul (2x) pour actualiser le calcul.

J'ai essayer d'insérer un bouton de commande :

Private Sub Refresh_Click()
 ActiveWorkbook.RefreshAll
End Sub

Cela ne fonctionne malheureusement pas.

Du coup je me demande si on peux insérer une actualisation automatique dans le code ?

Bonjour,

si, on pourrait, mais le calcul se fait sur l'événement Change, c'est à dire lors que tu saisis la longueur voulue.
Si celle-ci ne change pas il n'y a pas lieu de rafraichir.
Soit tu l'as mal implanté, soit il manque des éléments sur ton fonctionnement.
Tu as bien vu que les plages vertes étaient nommées ?
Et déposes un fichier de travail comme préconisé dans la charte du site que tu n'as pas manqué de lire
.RefreshAll c'est pour les TCD, rien à voir...
eric

re, oubien on utilise une fonction personallisée

12chute-1.xlsm (27.69 Ko)
Function Nombre_P(Longueur, Profiles As Range)
     Dim aP, Res(2)

     aP = Profiles.Value
     If UBound(aP, 2) <> 2 Then Nombre_P = "Problème"     '2 valeurs horizontales ?
     Res(0) = 1E+99                          'perte exagéré
     For i = WorksheetFunction.RoundUp(Longueur / aP(1, 1), 0) To 0 Step -1
          j = Application.Max(0, WorksheetFunction.RoundUp((Longueur - i * aP(1, 1)) / aP(1, 2), 0))
          x = i * aP(1, 1) + j * aP(1, 2) - Longueur     'perte de cette combinaison
          If x < Res(0) Then
               Res(0) = x
               Res(1) = i
               Res(2) = j
          End If
     Next

     Nombre_P = Res
End Function
Rechercher des sujets similaires à "optimisation dimensionnement composant"