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.
Merci,
Flarisse
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à 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)
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;
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