Programme pour calculer tailles de lots
Bonjour à tous,
Je suis ravi de rejoindre ce forum ! J’utilise ce logiciel pour optimiser mes tâches professionnelles et personnelles. J’ai récemment commencé à travailler sur un projet qui nécessite l’utilisation de VBA pour effectuer des calculs précis. J’ai déjà cherché des solutions en ligne, mais je n’ai pas réussi à trouver une réponse satisfaisante à ma question. Etant débutant avec le VBA je ne sais pas par où commencer. Le but de mon programme est de déterminer si une taille de batch est réalisable ou non. Pour cela on calcul le volume de chaque introduction de matière première, si le volume est compris dans les volumes de dénoyage alors le batch n’est pas possible. Donc on enlève 1000kg à la masse initiale et on recommence le programme jusqu’a ce qu’on ne soit plus dans le volume de dénoyage.
Voici ce que j’ai pensé :
On sélectionne le dispersant dans la cellule A13, la chaîne dans la cellule C13, et la masse dans la cellule E13.
Par exemple, si on choisi le dispersant=ADX500 dans la cellule A13 et chaîne=chaîne 1 dans la cellule C13, et une masse initiale=90000kg dans la cellule E13.
On fixe les volumes de dénoyages de la chaîne 1 sont compris entre 11,9m^3 et 23,8m^3 pour la pale 1, entre 40,8m^3 et 52,7m^3 pour la pale 2, et entre 71m^3 et 82,9m^3 pour la pale 3, et son volume maximum est de 130,3m^3.
On calcul d’abord le volume d’huile qui correspond à 25% de la masse initiale et qui a une masse volumique de 800kg/m^3. Si le volume d’huile est compris entre les volumes de dénoyage ou est supérieur au volume maximum alors le batch n’est pas possible. Lorsque le batch n’est pas possible on enlève 1000kg à la masse initiale que l’on a sélectionné dans la cellule E13 et on recommence le programme avec la nouvelle masse initiale.
Sinon on ajoute l’eau, on calcul ensuite son volume qui correspond à 50% de la masse initiale et qui a une masse volumique de 1000kg/m^3. On additionne le volume d’huile et le volume d’eau, et si le volume d’huile plus le volume d’eau est compris entre les volumes de dénoyage ou est supérieur au volume maximum alors le batch n’est pas possible. Lorsque le batch n’est pas possible on enlève 1000kg à la masse initiale que l’on a sélectionné dans la cellule E13 et on recommence le programme avec la nouvelle masse initiale.
Sinon on ajoute le sel, on calcul son volume qui correspond à 25% de la masse initiale et qui a une masse volumique de 900kg/m^3. On additionne le volume d’huile, le volume d’eau, et le volume de sel, et si la somme des 3 volumes est compris entre les volumes de dénoyage ou est supérieur au volume maximum alors le batch n’est pas possible. Lorsque le batch n’est pas possible on enlève 1000kg à la masse initiale que l’on a sélectionné dans la cellule C2 et on recommence le programme avec la nouvelle masse initiale.
Si tout est bon alors afficher la masse initiale finale dans la cellule G13
Info : volume produit=MasseInitiale*pourcentage/MasseVolumique
Je suis reconnaissant pour toute aide que vous pouvez me fournir, je suis à l’écoute si vous avez des questions.
Cordialement.
Sub CalculBatchPossible()
'Défintion des variables
Dim Dispersants As String
Dim Chaîne As String
Dim MasseInitiale As Double
'Emplacement des valeurs
Dispersants = Worksheets("Accueil").Cells(13, 1).Value
Chaîne = Worksheets("Accueil").Cells(13, 3).Value
MasseInitiale = Worksheets("Accueil").Cells(13, 5).Value
If Dispersants = "ADX500" Then
If Choix_Chaine = "Chaîne 1" Then
'calculer volume d'huile avec masse volumique de 800kg/m^3 et un pourcentage massique de 25%
Do While VolumeHuile = MasseInitiale * 0.2258 / 800
'vérification si le volume d'huile se situe dans les volumes dénoyages ou et supérieur au volume max
If (VolumeHuile >= 11.9 And VolumeHuile <= 23.8 Or VolumeHuile >= 40.8 And VolumeHuile < 52.7 Or VolumeHuile >= 71 And VolumeHuile < 82.9 Or VolumeHuile >= 130.3) Then
'si le volume d'huile est supérieur au volume maximun ou est compris dans les volumes de dénoyage alors on enleve 1000kg à la masse initiale et on recommence le programme
MasseInitiale = MasseInitiale - 1000
Loop
Else
'calcul du volume d'eau
Do While VolumeEau = MasseInitiale * 0.5 / 1000
'vérification si le volume d'huile et le volume d'eau = volume d'huile se situe dans les volumes dénoyages ou et supérieur au volume max
VolumeEau_Huile = VolumeEau + VolumeHuile
If (VolumeEau_Huile >= 11.9 And VolumeEau_Huile <= 23.8 Or VolumeEau_Huile >= 40.8 And VolumeEau_Huile < 52.7 Or VolumeEau_Huile >= 71 And VolumeEau_Huile < 82.9 Or VolumeEau_Huile >= 130.3) Then
'si le volume d'huile + le volume d'eau est supérieur au volume maximun ou est compris dans les volumes de dénoyage alors on enleve 1000kg à la masse initiale et on recommence le programme
MasseInitiale = MasseInitiale - 1000
Loop
Else
'calcul du volume du sel
Do While VolumeSel = MasseInitiale * 0.25 / 900
'vérification si le volume d'huile + le volume d'eau + le volume de sel se situe dans les volumes dénoyages ou et supérieur au volume max
Volumefinal = VolumeEau_Huile + VolumeSel
If (Volumefinal >= 11.9 And Volumefinal <= 23.8 Or Volumefinal >= 40.8 And Volumefinal < 52.7 Or Volumefinal >= 71 And Volumefinal < 82.9 Or Volumefinal >= 130.3) Then
'si le volume d'huile + le volume d'eau + le volume de sel est supérieur au volume maximun ou est compris dans les volumes de dénoyage alors on enleve 1000kg à la masse initiale et on recommence le programme
MasseInitiale = MasseInitiale - 1000
Loop
Else
'Afficher la valeur de la masse finale dans la cellule G13
Range("G13").Value = MasseInitiale
End If
End If
End If
End If
End If
End Sub
Bonjour,
Ca ressemble à une tâche taillée pour le Solveur. Mais à mon avis votre ordre de résolution est mal posé, car les contrôles des volumes d'huile, eau et sel ne peuvent s'étudier successivement et séparément, vu qu'ils dépendent tous de la masse initiale.
Bonjour,
je ne suis pas sur de comprendre. Pouvez-vous m'expliquer comment vous feriez ?
je ne suis pas sur de comprendre. Pouvez-vous m'expliquer comment vous feriez ?
Vu que je ne comprends pas bien votre problème, c'est assez difficile. Je vois pour vous proposer une base à retravailler.
Le fichier avec le scénario du Solveur paramétré :
Sinon votre macro révisée, d'après ce que j'ai compris :
Sub CalculBatchPossible()
'Définition des variables
Dim MasseInitiale As Single, Volume(1 To 3) As Single
Dim Continuer As Boolean, i As Integer
'Emplacement des valeurs
With Sheets("Accueil")
MasseInitiale = .Cells(13, 5).Value
If .Cells(13, 1).Value = "ADX500" And .Cells(13, 3).Value = "Chaîne 1" Then
'calculer volume d'huile avec masse volumique de 800kg/m^3 et un pourcentage massique de 25%
Do While Not Continuer And MasseInitiale > 0
Volume(1) = MasseInitiale * 0.2258 / 800 'Huile
Volume(2) = Volume(1) + MasseInitiale * 0.5 / 1000 'Huile + Eau
Volume(3) = Volume(2) + MasseInitiale * 0.25 / 900 'Huile + Eau + Sel
'vérification si le volume se situe dans les volumes dénoyages ou et supérieur au volume max
For i = 1 To 3
Select Case Volume(i)
Case 11.9 To 23.8, 40.8 To 52.7, 71 To 82.9, Is >= 130.3
'si le volume d'huile est supérieur au volume maximum ou est compris dans les volumes de dénoyage alors on enlève 1000kg à la masse initiale
MasseInitiale = Application.Max(0, MasseInitiale - 1000)
Continuer = False
Exit For
Case Else
Continuer = True 'Conditions OK, on passe à la suite
End Select
Next i
Loop
.Range("G14").Value = MasseInitiale
End If
End With
End Sub
Merci beaucoup de votre aide.