Aide pour une formule ou macro
Bonjour tout le monde !
S'il vous plaît j'ai besoin de votre aide pour aboutir un résultat souhaité !
Le résultat que je souhaite obtenir est le suivant !
Dans le fichier ci-joint j'ai des références chacune a sa quantité et sa classe ( ces classes sont traité en fonction de priorité comme dans le tableau à droite). Dans le tableau au milieu j'ai des traitements chacun a sa capacité et sa classe, je souhaite bien affecter les traitements nécessaire (colonne D) en fonction des capacité jusqu’à ce qu'une classe soit rempli en fonction des priorité
(si une classe est plein c"est à dire tout les traitement concerné par cette classe sont rempli on passe à la possibilité aprés selon la priorité )
J’espère avoir bien expliquer
Merci d'avance pour votre aide !!
Bonne journée !
Bonjour Zaudix le forum
J’espère avoir bien expliquer
Bah franchement non, je viens d'ouvrir d'essayer de comprendre ce que tu veux, mais comme tu ne dois pas savoir écrire, bah tu n'as rien expliqué, alors j'ai refermé le fichier et je passe à autre chose!!!
Tu as classe en Col C et en colonne H mais bien sur pas identique,!!!!
Manifestement tu souhaites remplir la colonne D mais avec quoi ? là mystère pour moi, et comme je n'ai pas envie de me tordre la tête.
Des explications claires dans le fichier de ce qu'il faut chercher et par rapport à quoi et ensuite que doit on retourner?? et on va faire
a+
Papou
Bonjour tout le monde
Merci pour votre réponse Mr paritec !
J'ai mis quelque explication dans le fichier ci-joint !
j'ai mis des commentaires aussi dans les ligne (94 ;96 ;312)
j'aimerai bien afficher les résultat comme dans la feuil2 (pour T1 et T2)
j’espère cette fois ci avoir expliquer un peu ce que je voudrais aboutir comme résultat
Merci d'avance pour votre précieux aide !!
Bonne journée !
Bonjour tout le monde !!
S'il vous plaît un aide, ou une piste pour mon sujet !!
Je ne sais pas vraiment comment faire, aucune idée !!
Si vous pourriez m'aider, S'il vous plaît !!! J'en serai ravis
Merci d'avance pour votre aide !!
Bonne journée !
Bonjour Zaudix le forum
tu n'as pas eu de réponse? Pourquoi ?? c'est très simple en ce qui me concerne j'ai ouvert le deuxième fichier et là j'ai lu et je n'ai pas compris ce que tu veux, tu parles de capacité, de classe différente entre C et H , de priorité T2 et T1
MAIS sans expliquer à quoi correspond qui!!!!!
5 personnes ont lu tes demandes et personnes n'a répondu, poses toi la question de savoir pourquoi??
ce n'est pas que l'on ne veut pas répondre, mais pour répondre il fait comprendre et quand on ne comprend pas on ferme le fichier et on va aider quelqu'un d'autre.
Ligne 94 et 95 on ne met pas T2 car autrement on dépasse la capacité????????????????????????????????
Donc j'en déduis qu'il faut faire une addition de tous les éléments qui ont C0 C1, mais tu écris on a mis T2, car c'est prioritaire et T1 car c'est la deuxième possibilités !!!!
C'est bien évident que T1 c'est la deuxième possibilité et c'est tellement logique!!!
T2 c'est la première et T1 la deuxième!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bref si tu expliques mal, ou très mal, ou très très mal, ou très très très mal on n'y peut rien
Alors si tu expliques intelligiblement, on va t'aider
a+
papou
Bonjour, Salut Paritec !
J'avais regardé ce sujet le jour où il a été posé
Puis j'ai fini par voir que tu avais apporté des explications complémentaires, lesquelles paraissaient confirmer mon hypothèse en éliminant la question d'optimisation au profit d'un processus consistant à suivre les priorités prédéfinies !
Note qu'il a fallu quand même prendre le temps d'éliminer quelques espaces parasites dans tes tableaux : les deux petits où cela me provoquait des erreurs, sur le principal je n'ai pas cherché, s'il y en a, cela fausse simplement la réponse, ce sera à toi de corriger ça !
Voilà donc ma proposition :
Sub DéfinirTraitements()
Dim d As Object, TRef, Prio, Capa, k, q, TCap(), i&, c%, t%, p%, u%
Set d = CreateObject("Scripting.Dictionary")
With ActiveSheet
Capa = .Range("G1").CurrentRegion
Prio = .Range("L2").CurrentRegion
TRef = .Range("A1").CurrentRegion
End With
For c = 2 To UBound(Capa)
d(Capa(c, 2)) = d(Capa(c, 2)) & ";" & Capa(c, 1) & "|" & Capa(c, 3)
d(Capa(c, 2) & "NbT") = CInt(d(Capa(c, 2) & "NbT")) + 1
Next c
For c = 0 To 9
k = "C" & c & "NbT"
If CInt(d(k)) > t Then t = CInt(d(k))
d.Remove (k)
Next c
ReDim TCap(9, t, 1)
For Each k In d.keys
c = CInt(Right(k, 1))
q = Split(d(k), ";")
For t = 1 To UBound(q)
Capa = Split(q(t), "|")
TCap(c, t, 0) = CInt(Capa(0)): TCap(c, t, 1) = CLng(Capa(1))
TCap(c, 0, 0) = TCap(c, 0, 0) + TCap(c, t, 1)
Next t
Next k
For t = 2 To UBound(Prio)
k = Prio(t, 1)
For p = 2 To UBound(Prio, 2)
If IsEmpty(Prio(t, p)) Then Exit For
c = CInt(Right(Prio(t, p), 1))
For i = 2 To UBound(TRef)
If TRef(i, 3) = k Then
If TCap(c, 0, 0) > 0 Then
For u = 1 To UBound(TCap, 2)
If IsEmpty(TCap(c, u, 1)) Then Exit For
If TCap(c, u, 1) > TRef(i, 2) Then
TCap(c, u, 1) = TCap(c, u, 1) - TRef(i, 2)
TCap(c, 0, 0) = TCap(c, 0, 0) - TRef(i, 2)
TRef(i, 4) = TCap(c, u, 0)
Exit For
End If
Next u
Else
Exit For
End If
End If
Next i
Next p
Next t
ActiveSheet.Range("A1").CurrentRegion.Value = TRef
End SubJe ne saurais dire si elle fournit la bonne réponse : il faut déjà que mon interprétation coincide avec ce que tu attends, et que je n'ai pas fait d'erreur, mais il n'y en a pas de bloquante puisque tout se déroule...
Tu vérifieras ! Si l'interprétation est la bonne et que tu trouves des résultats non conformes, pense à vérifier que l'erreur ne provient pas de la saisie des données de départ (espaces parasites notamment !)
En tout cas je ne m'y replongerai pas avant d'avoir réglé un certain nombre de choses en retard : ma déclaration d'impôt, mes réservations de vols, sans parler de mon stock de lessives en attente, du jardin à désherber et quelques autres "joyeuses" tâches domestiques... pas aujourd'hui autrement dit (et plus tard on verra).
Cordialement.
Un coup d'oeil rapide avant de fermer montre que ça a loupé le traitement 2 en bloc ! Je ne vois pas pourquoi et pas le temps de chercher maintenant.
Je ferai une vérification quand j'aurai un moment.
J'ai rattrapé le traitement 2, et sans doute quelques autres anomalies (on pouvait écrire plusieurs fois au même endroit...)
J'ai donc complété une condition, sur une seule ligne de code... C'est un peu brut, pas le summum de la finesse, mais c'était le plus simple sans trop réfléchir.
Nouveau fichier modifié.
Bonjour tout le monde
Mr Paritec ,je suis totalement désolée si mon explication était si mal !
Merci pour votre réponse Mr Mferrand c'était exactement ce que je voulais , mais quand j'ai calculer les sommes des traitement j'ai trouvée qu'il y a des dépassement de capacité mais juste dans les traitements qui contiennent comme classe c3 ou c7 ,
alors après une petite recherche j'ai trouvé une grave faute de ma part
J'ai supprimé des ref (je vais leurs mettre leurs propre traitement) et ayant regroupé le tout en tant que (C7 C3 C4) , et en total de quantité de 917763 et pour les traitement concerné aurons comme capacité un total de 918500.
Mais quand la macro s'applique ça n’affecte pas les traitement (20,21,22,24,25) , ce qui donne peut-être un dépassement encore pour les traitement (31,32,33,34).
Mais à part ça c'était exactement ce que je voulais comme approche , merci infiniment Mr Mferrand encore
Merci d'avance pour votre aide !
Bonne journée !
Ben oui !
En définissant des priorités, c'est sur toi que repose l'efficacité de l'opération et plus sur le programme qui ne fait qu'agir selon tes directives...
Pas le temps normalement de revoir ça aujourd'hui... Si je trouve un moment je vérifierai si je n'ai pas d'erreur dans ma procédure, car cela ne se voit pas directement, mais dès lors qu'elle fonctionne de façon conforme, tu peux la réappliquer en faisant des choix de priorité différent (effacer le résultat précédent avant).
Bonne journée.
Bonjour le forum, Mferrand !!
Merci pour votre réponse, j’avais ressayé de changer et tâtonner avec autres choix des priorités en fonction des quantités que je possède, mais ça n’affe Pas encore une classe dans un choix de priorité, juste une encore tout autre calcul est bon
Merci d’avance pour votre aide !!
Bonne journée !