Determination taille max possible

Bonjour à tous,

j'ai récemment essayé de faire un nouveau programme, mais étant débutant je n'y arrive pas. C'est donc naturellement que je me tourne vers vous.

Le but :

Le but de ce programme est de déterminer la masse maximale que l’on peut produire en prenant en compte les contraintes d’équipements (Masses de dénoyages), et la formulation de produit (pourcentages massiques, quantités de matières dispo.

Les informations importantes :

-Les variables se situerons : le dispersant dans la cellule A2, le choix de la chaîne dans la cellule B2, la quantité disponible d’huile dans la cellule D2, la quantité disponible d’eau dans la cellule D3, et la quantité disponible de sel dans la cellule D4.

-Pour la recette du dispersant on sait qu’il faut 20% d’huile, 70% d’eau, et 10% de sel.

-Les masses de dénoyages se situent entre 0kg et 20683kg, 35456kg et 45798kg, 61701kg et 72042kg, et la masse totale ne doit pas dépasser 113200kg.

Le programme :

Si le dispersant A2=ADX500, et la chaîne B2=Chaîne 1.

Alors on calcul la masse d’huile et la masse de sel. Pour cela on prend la masse maximum d’eau disponible de la cellule D3.

Masse d’huile = 0,2*MasseEAU/0,7

Masse de sel = 0,1*MasseEAU/0,7

On vérifie que la masse d’huile et la masse de sel sont inférieures aux quantités disponibles dans les cellules D2 et D4. Car on ne peut pas produire avec ce que l’on a pas.

Sinon on enlève 1000kg de la masse d’eau et on recommence le programme jusqu’a ce que la masse d’huile et la masse de sel sont inférieures aux quantités disponibles.

Si la masse d’huile et de sel sont inférieures aux quantités disponibles alors on additionne la masse de sel, la masse d’huile, et la masse d’eau. Et on vérifie que la masse totale ne se situe pas dans les masses dénoyages et qu’elle n’est pas supérieure à la masse max.

Sinon on enlève 1000kg de la masse d’eau et on recommence le programme jusqu’a ce que la masse totale ne soit plus située dans les masses de dénoyages.

Ce que j’ai essayé de faire :

Sub TBmax()

'Définition des variables
Dim Dispersants As String
Dim Chaînes As String
Dim Huile As Single
Dim Eau As Single, Masse(1 To 3) As Single
Dim Sel As Single
Dim Continuer As Boolean, i As Integer

'emplacement des valeurs
Dispersants = Worksheets("Accueil").Cells(2, 1).Value
Chaînes = Worksheets("Accueil").Cells(2, 2).Value
Huile = Worksheets("Accueil").Cells(2, 4).Value
Eau = Worksheets("Accueil").Cells(3, 4).Value
Sel = Worksheets("Accueil").Cells(4, 4).Value

'************************ADX500************************
If Cells(2, 1).Value = "ADX500" And Cells(2, 2).Value = "Chaîne 1" Then

'on calcul la masse d’huile et de sel nécessaire qu'il faut si on utilise l'entièrté de l’eau
    Do While Not Continuer And Eau > 0
      Masse(1) = 0.20 * Eau / 0.70
      Masse(2) = 0.1 * Eau/ 0.70
      Masse(3) = Masse(1) + Masse(2) + Eau

'vérification si masse 1 et 2 inférieur aux quantités dispo et si la masse 3 totale se situe dans les volumes dénoyages ou et supérieur au volume max
    For i = 1 To 2
        Select Case Masse(i)
         Case Masse(1) < Huile, Masse(2) < Sel

        i = 3
        Select Case Masse(3)
         Case 0 To 20683, 35456 To 45798, 61701 To 72042, Is >= 113200

'si la masse totale est supérieur au volume maximum ou est compris dans les volumes de dénoyage alors on enlève 1000kg à la masse initiale d’eau
        Eau = Application.Max(0, Eau - 1000)
        Continuer = False
        Exit For
        Case Else
           Continuer = True 'Conditions OK, on passe à la suite
        End Select
        End Select
        Next i
   Loop

Range("H9").Value = Masse(3)

End If

End Sub

Je suis reconnaissant pour toute aide que vous pouvez me fournir, je suis à l’écoute si vous avez des questions.

Cordialement.

Bonjour Bertrand,

votre problème est très bien posé mais ce n'est pas vraiment une question Excel. D'après votre code, vous maitrisez suffisamment VBA pour le résoudre.
C'est juste une question d'algorithme.
Ce qui est étonnant, c'est que votre fichier est un .xlsx (donc sans macros) et vous envoyer le code d'une macro.
Quelques questions et remarques :
Vous donnez comme règle Si le dispersant A2=ADX500, et la chaîne B2=Chaîne 1.
Prévoyez-vous d'autres cas avec des règles de calcul différentes ?
Les proportions sont-elles fixes ?
Pour avoir un code plus souple, il serait préférable d'utiliser des cellules nommées pour les valeurs des proportions, masses de dénoyage.
Avez-vous tester votre code ? Vous ne dites pas ce qui ne marche pas. Pour le tester, faites le pas à pas en utilisant le débogueur et la fenêtre espion.
Je l'ai fait "tourner" avec le débogueur, l'eau n'est pas décrémentée à chaque tour.
Bon courage !

Bonjour,

Vous écrivez "débutant" mais j'aurais bien aimé débuter en VBA avec un pareil code... A moins que je n'ai pas saisi ce que vous vouliez dire

Du coup, en regardant vos demandes, ne serait-ce pas le même sujet qu'ici traité par Pedro22 ? --> https://forum.excel-pratique.com/excel/programme-pour-calculer-tailles-de-lots-183668

Pourquoi ceci dans vos commentaires du code... .?

'si la masse totale est supérieur au volume maximum ...

Crdlt

cest un problème pou solveur

l'eau est à son limite avec 71.429 kg dans la chaîne 3

image

Bien vu Bart pour le Solveur qui est vraiment l'outil idoine .

Merci a tous pour vos réponse, cela m'a bien servi.

Cordialement.

Rechercher des sujets similaires à "determination taille max possible"