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.

Bonjour @Bertrand76 ,
Un fichier d’exemple nous aidera mieux à comprendre la situation.
Will-Fread

Classeur1.xlsx (10,0 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

Re,

C’est quoi les volumes de dénoyage par rapport au tableau ?

Classeur1 (7).xlsx (20,3 Ko)
Essayez de corriger les formules si j’ai oublié quelque chose.
(Avant d’ecrire les codes)

Will-Fread

1 « J'aime »

D’accord je vais faire comme ça. Merci de votre réponse.

1 « J'aime »

Une fois que c’est fait, vous n’avez juste qu’à faire une boucle sur la masse initiale C2 en se basant sur la condition Possible ou pas.
Si possible on l’garde si non -1000

1 « J'aime »

oubien avec une fonction personalisée
Classeur1 (7) UDF.xlsm (32,2 Ko)

2 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.