Définir un délais selon capacité (utilisation solver ?)

Bonjour à tous,

Premier message pour moi, j'espère être au bon endroit :)

J'aimerais créer un tableau afin de définir des délais sur mes commandes (appelées Qtés 1;2;3.. dans le tableau) en respectant une charge maximum et l'ordre d'arrivée de mes commandes.

A cela, j'ai des contraintes qui s'ajoute (voir tableau ci-dessous).

Pour faire ce tableau, je suis un peu perdue. Est ce qu'il serait possible de passer par le solver pour le réaliser ? ou dois-je passer par une macro ?

En tant que débutant, je suis preneuse de votre aide et de vos idées :)

Si ce n'est pas assez clair, n'hésitez pas à me le dire.

image

Merci,

Flarisse

bonjour et bienvenu.

Pouvez-vous nous joindre votre fichier en PJ avec ceci dans le menu

image

Bonjour Bart,

Bien sûr, merci.

bonjour, comme moi, je comprend la question :

Bonjour Bart,

Merci beaucoup pour ton retour. Donc finalement pas besoin ni de solver, ni de macro :) Je ne connaissais pas la formule Agregat.

Il y a juste un petit truc. Pour la "Qtés4", le cumul est de 840. il dépasse donc le cumul de la capa la S21 + S22. De ce fait la "Qtés 4" doit être en S22.

Bonjour,

Sub Flarisse()

Dim ch As Integer '''pour parcours des cellules des charges ligne 3
Dim cd As Integer     '''pour parcours des cellules des commandes colonne 2

Dim chrg As Single
Dim i As Integer, j As Integer, k As Integer

Dim cap(5)   ''' tableau des capacités
Dim cumcap(5) ''' tableau des cumul capacités

cap(0) = Cells(2, 2)
cumcap(0) = Cells(2, 2)

     '''## remplir élements des tableaux des capacitées et des cumul capacité
    For j = 1 To 5
    cap(j) = Cells(2, j + 2)
    cumcap(j) = Cells(2, j + 2) + cumcap(j - 1)
    Next
    '''''____________________

'''#### initialisation avant l'incrémentation de la boucle ch de parcours et remplissage de la ligne 3 des charges:

k = 6 ''compte des commandes à partir de k qui va varier au cours du remplissage
cd = 6
Range("b3:g3").ClearContents

For ch = 2 To 7

Cells(3, ch) = 0
chrg = 0 ''' variable pour la charge de la semaine N°.....
cd = k '''parcours des commandes non déjà chargées qui commencent à partir de k

    Do While cd < 13
        chrg = chrg + Cells(cd, 2).Value

        If chrg < cumcap(ch - 1) Then

            cd = cd + 1
            Else

            drapeau = False
            Exit Do
        End If
    Loop
    k = cd                            ''' mettre k au rang de la commande juste après la dernière commande incluse
    chrg = chrg - Cells(cd, 2).Value          ''' saustraire la commande ajouté à chrg qui l'a rendu ne verifiant pas la regle
    Cells(3, ch) = chrg                          ''' mettre chrg dans la case correspondante des charge

Next

End Sub
'''Bonjour,

'''si tu veux avec macro

Sub Flarisse()

Dim ch As Integer '''pour parcours des cellules des charges ligne 3
Dim cd As Integer     '''pour parcours des cellules des commandes colonne 2

Dim chrg As Single
Dim i As Integer, j As Integer, k As Integer

Dim cap(5)   ''' tableau des capacités
Dim cumcap(5) ''' tableau des cumul capacités

cap(0) = Cells(2, 2)
cumcap(0) = Cells(2, 2)

     '''## remplir élements des tableaux des capacitées et des cumul capacité
    For j = 1 To 5
    cap(j) = Cells(2, j + 2)
    cumcap(j) = Cells(2, j + 2) + cumcap(j - 1)
    Next
    '''''____________________

'''#### initialisation avant l'incrémentation de la boucle ch de parcours et remplissage de la ligne 3 des charges:

k = 6 ''compte des commandes à partir de k qui va varier au cours du remplissage
cd = 6
Range("b3:g3").ClearContents

For ch = 2 To 7

Cells(3, ch) = 0
chrg = 0 ''' variable pour la charge de la semaine N°.....
cd = k '''parcours des commandes non déjà chargées qui commencent à partir de k

    Do While cd < 13
        chrg = chrg + Cells(cd, 2).Value

        If chrg < cumcap(ch - 1) Then

            cd = cd + 1
            Else

            Exit Do
        End If
    Loop
    k = cd                            ''' mettre k au rang de la commande juste après la dernière commande incluse
    chrg = chrg - Cells(cd, 2).Value          ''' saustraire la commande ajouté à chrg qui l'a rendu ne verifiant pas la regle
    Cells(3, ch) = chrg                          ''' mettre chrg dans la case correspondante des charge

Next

End Sub

re, vous préférez déplacer la ligne 4 une colonne vers la droite, comme ça ? Mieux ?

Au lieu de agregat, en ligne 7, une formule matricielle (donc MAJ+CTRL+Enter au lieu d'un Enter, dans les versions <365)

re

moi d'après ce que j compris : une fois une Cde ou Qté utilisé elle ne sera pas réutilisé dans la prochaine S

aussi dans ma macro la condition "Charge S21 et S22 cumulées, doit être supérieur à capa S21+S22, mais inférieur à capa S21+S22+S23"

est traduite comme : continuer à ajouté à S22 les Qtés NON utilisés dans S21 jusqu'à ce que charg S22< capa S21+S22+S23 ce qui est une erreur ! je vais corriger et revenir

Re

voilà corrigé pour le comparer le cumul des charges et non pas la charge de la semaine, mais je dois encore verifier ce calcul du cumul

Sub Flarisse()

Dim ch As Integer '''pour parcours des cellules des charges ligne 3
Dim cd As Integer     '''pour parcours des cellules des commandes colonne 2

Dim i As Integer, j As Integer, k As Integer, n As Integer

Dim cap(5)   ''' tableau des capacités
Dim cumcap(5) ''' tableau des cumul capacités
Dim charge(5) '''tableau des charges
Dim cumcharges(5) '''tableau des cumul charges dont les élements seront calculés au fur et à mesure

cap(0) = Cells(2, 2)  '''''initia.. valeures des tableaux capa
cumcap(0) = Cells(2, 2)

     '''## remplir élements des tableaux des capacitées et des cumul capacité
    For j = 1 To 5
    cap(j) = Cells(2, j + 2)
    cumcap(j) = Cells(2, j + 2) + cumcap(j - 1)
    Next
    '''''____________________

'''#### initialisation avant l'incrémentation de la boucle ch de parcours et remplissage de la ligne 3 des charges:

k = 6 ''compte des commandes à partir de k qui va varier et determiné pour chaque charge par code (voir ci-dessous)
cd = 6
Range("b3:g3").ClearContents
Range("b20:g20").ClearContents

For ch = 2 To 7

Cells(3, ch) = 0
charge(ch - 2) = 0 ''' variable pour la charge de la semaine N°.....
cd = k '''parcours des commandes non déjà chargées qui commencent à partir de k

    Do While cd < 13
        charge(ch - 2) = charge(ch - 2) + Cells(cd, 2).Value
''
'' calcul du cumul charge à la colonne ch "cumcharges(ch - 2)" pour pouvoir faire if
        n = 0
        Do While n <= ch - 2
        If n = 0 Then
        cumcharges(n) = charge(n)
        Else
        cumcharges(n) = charge(n) + cumcharges(n - 1)
        End If
        n = n + 1
        Loop
        Cells(20, ch) = cumcharges(ch - 2) ''' facultatif juste pour verifier les cumuls des charge
''

        If cumcharges(ch - 2) < cumcap(ch - 1) Then '''cumul des charge à la semaine actuel inf à cumul des cap jusq à la semaine d'après

            cd = cd + 1
            Else

            Exit Do
        End If
    Loop
    k = cd                            ''' mettre k au rang de la commande juste après la dernière commande incluse
    charge(ch - 2) = charge(ch - 2) - Cells(cd, 2).Value      ''' saustraire la commande ajouté à chrg qui l'a rendu ne verifiant pas la regle
    Cells(3, ch) = charge(ch - 2)                         ''' mettre charge dans la case correspondante des charge

Next

End Sub

crdl

re

voilà final

RE

voilà toute les variantes : Flarisse3 correspond à ce qu'a repondu Bart

mais je pense que Flarisse a dit "Charge S21 et S22 cumulées, doit être supérieur à capa S21+S22, mais inférieur à capa S21+S22+S23"

et non pas: "somme des Cdes à inclure dans S22 doit être supérieur à capa S21+S22, mais inférieur à capa S21+S22+S23"

@tt

RE

excusez moi je sais pas comment modifier le message déjà envoyé en mettant à jour le même fichier joint corrigé sans envoyer un nouveau message

@tt

Bonjour à tous les deux,

Déjà merci beaucoup à vous deux d'avoir pris le temps d'étudier le sujet de m'aider.

Kamel, les résultats que tu as indiqué dans les cellules B4/B5/B6 sont correctes. (avec Flarisse 1)

image

Bart pour les explications :

Pour ma commande 4, j'arrive à un cumul de charge de 840. Ma charge cumulée (mes commandes) est donc supérieur à ma capa cumulé de S22 (720), mais inférieur à ma capa cumulée S23 (1080). Ma commande 4 doit donc être réalisée en semaine S22.

Par contre, je ne cherche pas à avoir le résultat de mes commandes sous ma semaine (Cellules B4/B5/B6 dans le fichier de Kamel). Mais je cherche bien à avoir la semaine d'indiqué devant ma commande comme dans le fichier de bart (colonne C, cellules en bleues).

re,

alors les formules

=SIERREUR(INDEX($A:$A;AGREGAT(15;6;LIGNE($A$7:$A$13)/((B3<$C$7:$C$13)*($C$7:$C$13<=C3));1));"")
& " à "
&SIERREUR(INDEX($A:$A;AGREGAT(14;6;LIGNE($A$7:$A$13)/((B3<$C$7:$C$13)*($C$7:$C$13<=C3));1));"")

Bonjour;

Merci beaucoup Kamel, c'est tout à fait ca :D

Je n'ai plus qu'a bien lire ta macro pour comprendre tout ça :)

Bart, pour info le résultat attendu est le suivant :

image

Encore merci à tous les deux

Re

Avec VBA c bon; mais avec les formule dans la feuille, bien que pour les commandes mises en dessous des semaines sur une ligne l'a réalisé Bart, j'ai essayé dans la feuille sur le fichier de Bart de mettre par formules les semaines équivalentes sur une colonne en face des commandes comme tu l'a demandé, j pas trouvé la formule adéquate

j'ai essayé sur la colonne D7:D13 une formule du genre :

={SI(A7<=INDEX($A:$A;AGREGAT(16;6;LIGNE($A$7:$A$13)/((B3<$C$7:$C$13)*($C$7:$C$13<=C3));1));INDIRECT(ADRESSE(1;COLONNE(B$4:G$4))))}

mais elle donne toujours S21

ça m’intéresse et j'invite @Bart à nous aider sur ça.

re, avec "index", mais je pense que je dois ajouter un tout petit supplément au cumul, pour qu'il soit correct quand la somme est exact le cumul de la semaine suivante (voir Cde3, maintenant 470 au lieu de 350)

=INDEX($B$1:$G$1;EQUIV(C7;$B$3:$G$3;1))

re

@Bart

Flarisse a dit inferieur , mais si on discute et envisage le cas inferieur ou égal: je dirai qu'il y a un trou dans la conception de Equiv qui n l'a pas prévu,

moi j proposé de palier non pas en touchant les valeurs des cumuls, mais par la complication de la formule en comparant index avec equiv"exact" et index avec equiv "inferieur "et de prendre la semaine precedente si elles renvoient toute les deux la même valeur

SI(SIERREUR(INDEX($B$1:$G$1;EQUIV(C7;$B$3:$G$3;0));"err")=INDEX($B$1:$G$1;EQUIV(C7;$B$3:$G$3;1));G6;INDEX($B$1:$G$1;EQUIV(C7;$B$3:$G$3;1)))

@ Flarisse

voici pour le code où j'ai ajouté plus de commentaires pour explication:

cordialement

Rechercher des sujets similaires à "definir delais capacite utilisation solver"