Formule 80% sur doublons

Bonjour à tous,

J'ai un problème que je n'arrive pas à résoudre sur mon fichier.

Je dois effectuer des calculs pour l'analyse de la nouvelle zone de stockage.

La règle de calcul est la suivante :

pour le lot maxi 80% il faut prendre la valeur de la colonne B qui est la plus proche des 80% (ou inférieur)

Pour le picking 80% il faut faire le cumul de la colonne B jusqu'à atteindre 80% ou la valeur la plus proche, peu importe si elle est inférieure ou supérieure

Pour le nombre de lignes picking 80% c'est la même chose, faire le cumul jusqu'à 80% ou au dessus si valeur plus proche.

Ci-joint le fichier : https://www.cjoint.com/c/IAlpF180EUB

Dans ce fichier 3 onglets :

Le 1er "Exemple et illustrations" je vous ai fait un exemple des calculs que j'ai réalisé pour arriver à trouver les chiffres que je veux obtenir.

Le 2ème "Fichier à traiter" c'est le fichier de base qui est à traiter. pour info les 3 références ou je vous montre ma technique de calcul sont intégrés à ce deuxième onglet donc vous n'avez pas besoin de les retravailler. vous devez uniquement vous servir de l'onglet 2 car toutes les références à travailler sont dessus.

le 3ème "feuille finale "à compléter" vous pouvez copier les résultats dans les colonnes qui correspondent, il y a déjà une partie rempli car ce sont des références sans doublon donc aucun calcul à effectuer.

Merci à celui qui prendra le temps de regarder à mon problème.

bonjour,

dans ton exemple pour la quantité picking du produit 0102709 tu t'arrêtes à 60% et pour 0103461à 100 %, dans les 2 cas l'écart par rapport à 80 % est le même, mais tu sembles ne pas appliquer la même règle de choix.

Bonjour,

Désolé pour le délai de réponse.

En effet il est parfois compliqué de comprendre le fonctionnement.

Vous avez raison sur le sujet.

Le problème est que ce fichier provient d'une extraction d'un WMS, il est parfois compliqué de comprendre le résonnement dans l'analyse des données.

Dans ce cas je vous propose de fonctionner de la façon suivante.

Prendre en standard la valeur la plus proche de 80%. et si l'écart est identique comme pour 60% et 100%, basé vous sur le 100% svp.

Cela vous facilitera probablement la tâche.

Est-ce que cela vous a aidé ?

Merci.

Bonjour,

si j'ai bien compris. lancer la macro via alt-F8

8grk2.xlsm (457.17 Ko)

Bonjour,

Merci,

Est-ce que la macro fonctionne chez vous ? car elle m'indique une erreur et ne fonctionne pas chez moi :/

Bonjour,

j'avais laissé un stop intempestif.

voici le fichier avec la macro et le résultat de son exécution.

Sub aargh()
    Set ws = Sheets("feuille finale") 'feuille résultat. ! doit exister avant d'exécuter la macro
    ws.Cells.Clear
    Set wsi = Sheets("fichier à traiter")
    With wsi
        .Rows(1).Copy ws.Rows(1)
        lignerapport = 1
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        curstocle = ""
        For i = 2 To dl
            If curstocle <> .Cells(i, 1) Then
                dlstocle = cherdl(wsi, .Cells(i, 1), i)
                sumlot = Application.SumIf(Range(.Cells(i, 1), .Cells(dlstocle, 1)), .Cells(i, 1), Range(.Cells(i, 2), .Cells(dlstocle, 2))) * 0.8
                ctrligne = (dlstocle - i + 1) * 0.8
                curstocle = .Cells(i, 1)
                cursom = 0
                curligne = 0
                vp = 9000000000#
                vpl = 9000000000#
                lignerapport = lignerapport + 1
                ws.Cells(lignerapport, 1).Resize(1, 6).Value = .Cells(i, 1).Resize(1, 6).Value
            End If
            If Abs(cursom + .Cells(i, 2) - sumlot) <= vp Then
                cursom = cursom + .Cells(i, 2)
                vp = Abs(cursom - sumlot)
                ws.Cells(lignerapport, 3) = cursom
                ws.Cells(lignerapport, 2) = .Cells(i, 2)
            End If
            If Abs(curligne + 1 - ctrligne) <= vpl Then
                curligne = curligne + 1
                vpl = Abs(curligne - ctrligne)
                ws.Cells(lignerapport, 5) = curligne
            End If
        Next i
        ws.Columns.AutoFit
    End With
End Sub
Function cherdl(ws, cle, n)
    i = n
    While ws.Cells(i, 1) = cle
        i = i + 1
    Wend
    cherdl = i - 1
End Function
6grk2.xlsm (475.38 Ko)

Bonjour toutes et tous

merci H2s04 et coucou

@Thibaut59530

alt-F8

la macro fonctionne est effectue son travail mais, petite erreur sur le mot stop du code

If i = 25 Then Stop

@H2s04 comment as tu fais pour stopper ce stop ? merci (je suis largué avec ton code )

Bonjour toutes et tous

merci H2s04 et coucou

@Thibaut59530

alt-F8

la macro fonctionne est effectue son travail mais, petite erreur sur le mot stop du code

If i = 25 Then Stop

@H2s04 comment as tu fais pour stopper ce stop ? merci

j'ai enlevé la ligne

Bonjour,

Je vous confirme que cela a fonctionné.

Je n'ai eu besoin que de changer quelques lignes.

Donc c'est parfait !! Merci pour votre aide et bonne journée

Rechercher des sujets similaires à "formule doublons"