Question concernant un problème avec VBA

]Bonjour tout le monde , j'espère que vous allez bien , j'ai un petit soucis avec VBA ,

si quelqu'un peu m'aider ,

Au fait j'ai un bateau rempli d'huile brutes qui va arriver à la destination AH qui se

comporte de cuves de capacités(3000,3000,3000,1000,1000,900,900,700) et qui sont déja pleines par les charges(150 ... )

par exemple la première cuve de 3000 tonnes est remplie de 150T ,

Ce que je cherche moi c'est qu'avant l'arrivée du bateau( par exemple il contient 4000T d'huile brutes )

mon code puisse transporter par exemple les 150 T (qui sont dans la

cuve de 3000 T ) vers la cuve de capacité 1000 T et qui est vide , comme ca

j'aurai la cuve de 3000 T vide et je pourrais bien

l'exploiter avec l'arrivée du bateau parceque la condition ici est que si une

cuve est déja remplise on ne peut pas lui ajouter

une quantité sur sa charge , je serai très reconnaissant si quelqu'un peut m'aider je suis nouveau sur ce forum .

capacite cuves

Bonsoir

Un fichier à soumettre ?

Cdt,

Bonjour, merci infiniment ti_chou_3 , au dessous un fichier excel démontrant la charge et la capacité de chaque destination

Bonjour,

Il serait peut-être bon que tu expliques comment tu entends travailler sur ton fichier.

A quoi sert le tableau du haut par rapport au tableau du bas ?

Comment tu saisis les données initiales ?

On peut supposer que tu as un état de cuves initial dont tu veux optimiser le remplissage.

On ramasse les chiffres, on les triture, et on va te dire : transférer contenu cuve 1 dans cuve 4, et cuve 2 dans cuve 5.

On te le dis comment ?

On le matérialise où ?

Comment entends-tu opérer la mise à jour de la situation ?

Cordialement.

Bonjour,

Merci MFerrand pour ta réponse , au fait il y 'a quatre zones de stockage , AH , RN1 , RN2 , et la Costoma ,

AH est celle qui le plus proche du port donc c'est celle avec le cout de transport du port le plus bas

suivis de RN1 et RN2

suivi de Costoma

Donc ce que je cherche c'est qu'à l'arrivée d'une quantité d'huile brutes du port (par exemple 4000 T) je puisse stocker le maximum à AH et au pire des cas stocker à RN pour payer le moin les couts de transport .

la contrainte : si une cuve est déja pleine , on ne peut pas lui ajouter de l'huile ( l'acidité de chaque type d'huile achetée ...)

Pour faire cela , je dois une journée avant l'arrivée du bateau prendre les huiles des cuves les plus grandes et les déposer dans les cuves les plus petites et qui sont vides si ceux-ci existent .

par exemple dans AH : j'ai une cuve de 3000T remplie de 523 T , il est pour moi plus bénéfique de transporter les 523 T dans la cuve de 1000T qui est vide . comme ca j'aurai les 3000 T vide et lavée juste avant l'arrivée du bateau et je vais payer moin de prix de trabsport.

Par contre si je laisse cet état de cuve tel qu'il est , je ne vais envoyer que 1000 T vers AH et la quantité restante vers les autres destinations , donc le prix sera plus élevé ,

je vous remercie infiniment si vous n'avez pas compris un truc prière de me contacter


les états initials sont les capacités et les charges de chaque destination

La situation a réorganiser est donc dans le tableau du bas, qui regroupe tous les points de stockage...

Le tableau du haut alors, dont les chiffres sont différents, que signifie-t-il ? Notamment c'est AH mais différence de capacité de la cuve 2 ?

Voila le tableau du haut n'a pas d'importance j'ai juste oublié de le supprimer :p , c'est celui du bas ou tout dois se passer et qui représente l'état de stock actuel , je vous remercie infiniment d'avoir accepté de m'aider , j'espère que vous avez compris la problèmatique .

Mais pas d'erreur sur AH ?

3000 1000 3000 ... Alors qu'elles partout ailleurs classées en ordre décroissant de capacité ?

L’état de stock est le suivant j'ai juste déplacer la cuve pour vous montrer la problématique

etat de stock 2 0

Il y a d'autre part un autre problème: la charge de la cuve 3 est de 3695 pour une capacité de 3000 ?

Et Peut-on numéroter les cuves dans l'ordre de ton tableau, où faut-il prendre une autre identification ?

en effet c'est 2695 T je me suis trompé hihi , oui si c'est possible de prendre le meme ordre de la plus grande cuve jusquà la plus petite ,

les trois derniers 0 dans les capacités de AH sont juste pour compléter la matrice , normalement AH se compose de 8 cuves et RN1 se compose de 11 cuves ...


une autre contrainte si par exemple la première cuve de 3000T se compose de 523 T et qu'il existe deux cuves : une de 1000 T et une autre de 700 T qui sont toutes les deux vides : mon code puisse transporter les 523 T vers celle de capacité 700 T , j'espère que vous m'avez compris j'ai une présentation dans pas longtemps et je suis vraiment stressé

OK, je fais les correction et vois la méthode...

A+

Merci infiniment cher ami A+

Ça avance bien pour l'instant, mais j'ai stoppé pour repas, et je ne reprendrai pas ce soir. (sauf insomnie)

Tu patienteras jusqu'à demain....?

Hahah prends ton temps cher ami , et merci encore une fois c'est très gentil de votre part

Bonjour,

J'ai commencé par une fausse manoeuvre en effaçant mon message...

Je te restitue le "bébé" à tester... (en espérant ne pas m'être emmêlé dans les adressages successifs )

Ce qu'il faut en savoir avant :

Mise en place :

  • 2 plages nommées : B2:L2 (Cuves) et E15:P22 (Stock)
  • une liste déroulante en A2 (qui permet de sélectionner AH ou RN1 ou RN2 ou Costoma
  • formules en B2:L2 et A5:L5 pour afficher les capacités des cuves et les charges selon sélection en A2
  • un bouton Optimiser, pour lancer la procédure de recherche d'optimisation après sélection d'une zone de stockage
  • un bouton Effacer, pour effacer la recherche antérieure
  • 5 boutons non visibles en forme de flèche destiné à valider séparément chaque proposition définie par la procédure d'optimisation,
ces boutons ne deviennent visibles que si une proposition est définie, la zone dévolue à l'inscription des propositions est A7:L12,

les boutons apparaîtront sur les lignes 8 à 12 en M lorsqu'une proposition sera formulée sur la ligne.

[NB- La limitation à 5 paraît offrir une marge suffisante dans le contexte vu le nombre de cuves et la répartition des capacités,

3 propositions pourrait être un maximum en pratique, toutefois si 5 s'avérait insuffisant il faudra étendre la zone (noter qu'il n'y a pas de

verrouillage du nombre de propositions que la procédure peut établir...)]

Fonctionnement :

1) Sélectionner une zone de stockage en A2, les capacités et charges apparaîtront.

2) Lancer la procédure (clic sur Optimiser). Cette dernière :

- signale si aucune zone de stockage n'a été préalablement sélectionnée,

- si elle ne peut faire de proposition en l'absence de cuve vide, elle répond en A7 : Pas de cuve vide,

- s'il y a adéquation des charges aux capacités, elle répond en A7 : Pas de mesure à prendre,

- si des charges pourraient être déplacées vers des cuves de capacité inférieure, mais qu'aucune cuve de l'espèce n'est disponible,

elle répond en A7 : Aucune mesure ne peut être prise,

- enfin, si des proposition(s) sont faites ligne 8 et suivantes, elle note en A7 : Proposition(s) de transfert :

3) Si des propositions sont formulées, un bouton en forme de flèche (Valider) est apparu en regard de chacune.

L'utilisateur peut valider ou non, chacune des propositions indépendamment, la validation met à jour le tableau des stocks.

Cependant, si une proposition est dépendante d'une précédente (cuve à vider pour pouvoir être remplie à nouveau), la validation

n'est pas exécutée et un message le signale.

4) Effacer permet d'effacer la recherche précédente.

Il est conseillé de le faire avant toute nouvelle recherche (l'effacement n'est pas testé actuellement).

Ces notes figurent également dans le fichier en feuille 2.

Cordialement.

Je ne sais pas comment te remercier cher ami , franchement je suis très reconnaissant c'est vraiment sympat de votre part , j'ai une petite question si tu me le permets , concernant "ce cas " , il y 'avais possibilité de transférer les la charge 133 T de la cuve 3000 T dans celle de capacité 700T , alors qu'il a choisi seulement 16 et 32 ,

ce cas

Bon eh bien tu me sors une anomalie sur laquelle je vais devoir me pencher !

D'abord il aurait dû y avoir une 3e proposition libérant une cuve de 3000 (et les propositions notées sont toutes deux numérotées 1 au lieu de 1 et 2.

Je me note d'abord, cette anomalie à réduire.

Mais par ailleurs, il est vrai que dans une configuration pareille, le choix de partir du bas du tableau est peu intéressant...

Dans un tel cas, partir du haut serait un peu plus intéressant, mais pas fondamentalement.

Si je considère que l'objectif est de libérer en priorité les cuves de 3000 avec le moins de mouvements possibles, il faudrait que je classe le tableau autrement. Je vais m'y pencher à la suite, si tu me confirmes ce point de vue.

A poursuivre donc !

Bon weekend.

Bonjour ,

Très bon week-end à toi également , ce que je cherche c'est vider les cuves avec les plus grandes capacités ( avec les charges les plus basses ) dans les cuves vides , par exemple dans cette capture je cherche à vider les cuve de capacité 1000 T et charges (156 , 123 ) dans les cuves vides de 500T , on doit privilégier les grandes cuves avec les charges petites , pour minimiser aussi le temps de pompage de transfert .

had sba7

Bonjour,

Première étape : correction des anomalies : 2 corrections à opérer dans la portion de code ci-dessous, les corrections à faire sont surlignées.

    Do
        For i = UBound(tbst, 2) To 1 Step -1
            If IsNumeric(tbst(3, i)) Then
                n = i: Exit For
            End If
        Next i
        For i = UBound(tbst, 2) To n + 1 Step -1
            If tbst(3, i) = "V" Then
                If tbst(1, i) >= tbst(3, n) And tbst(1, i) < tbst(1, n) Then
                    ReDim opt(1 To [Cuves].Columns.Count)
                    opt(tbst(0, n)) = -tbst(2, n)
                    opt(tbst(0, i)) = tbst(2, n)
                    For j = 0 To 1
                        tbst(j, 0) = tbst(j, n)
                        tbst(j, n) = tbst(j, i)
                        tbst(j, i) = tbst(j, 0)
                    Next j
                    tbst(3, n) = "OK": nok = nok - 1
                    With [Cuves].Offset(6 + k)
                        .Value = opt
                        .Borders.LineStyle = xlContinuous
                        .Offset(, -1).Resize(1, 1).Value = "Prop. " & k + 1
                        ActiveSheet.Shapes("ValidProp" & k + 1).Visible = True
                    End With
                    k = k + 1
                End If
            Else
                tbst(3, n) = "OK": nok = nok - 1
            End If
        Next i
    Loop While nok > 0

Je vais maintenant m'attaquer au fond, pour redifinir le tri et la boucle d'analyse pour correspondre mieux à tes spécifications.

Bonne journée.

Rechercher des sujets similaires à "question concernant probleme vba"