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.

6classeur1.xlsx (9.98 Ko)
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é :

3classeur1.xlsx (12.45 Ko)

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.

Rechercher des sujets similaires à "programme calculer tailles lots"