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 !

18classeur-tt.xlsx (216.05 Ko)

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 !

10classeur-tt-new.xlsx (223.18 Ko)

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é , et il est vrai qu'il fallait se titiller pas mal les neurones pour interpréter ce qu'il y avait à faire... J'ai donc échafaudé une série d'hypothèses de ce qu'on pouvait faire, j'en ai retenu une consistant à affecter un traitement à chaque ref dans la limite des capacités... Ce qui me gênait un peu c'était les priorités, qui ne collaient avec mon idée préalable qu'il fallait optimiser avec interrogation sur l'objectif d'optimisation (traiter le max de ref ou la plus grande quantité)... Bref ! j'avais fini par conclure que je n'avais pas le temps de me lancer là-dessus !

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 ! Dans la mesure où cela devenait une application mécanique, bien qu'un peu fastidieux, cela devait prendre moins de temps d'élaborer une solution...

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 Sub

Je 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 c'est les référence qui avait comme classe (c7 c3) leurs somme de quantité qui était de 1065743.4 dépassent la capacité des traitement concerné qui était de 696000.

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 , comme dans le fichier que j’avais mis en dernier !!

Merci d’avance pour votre aide !!

Bonne journée !

Rechercher des sujets similaires à "aide formule macro"