Gestion Stock par intervalles

Mathar

XLDnaute Nouveau
Salut le forum,

Je vous propose un petit problème de gestion de stock par méthode FIFO (First in, first out). Le principe est simple, j'ai une table de flux entrants et une autre de flux sortants, je cherche à calculer à chaque fois qu'il y a une sortie le nombre de jour que le produit est resté en stock. Il faut donc chercher à vider le stock de la première entrée, puis passer à la deuxième et ainsi de suite.

Jusque là pas de problème, par contre là où ça se corse c'est au moment où une sortie de stock chevauche plus d'une entrée, on doit alors réaliser une moyenne pondérée.

Par exemple

Flux entrants:
-01/01/14 = 10 unités
-10/01/14 = 15 unités

Flux sortants:
-05/01/14 = 5 unités -> pas de problème 05/01/14 - 01/01/14 = 4 jours en stock
-15/01/14 = 10 unités -> pour 5 unités on a 15/01/14 - 01/01/14 = 9 jours en stock
et pour les 5 autres on a 15/01/14 - 10/01/14 = 4 jours en stocks
moyenne pondérée = (9*5+4*5)/10 = 6,5 jours en stock

Pour l'instant je ne sais pas gérer de manière automatique le chevauchement de plusieurs entrés, ce serai facile si le chevauchement pouvait se faire uniquement sur 2 entrés mais elles peuvent être plus nombreuses (3 dans le fichier joint).

Si quelqu'un à une idée de la marche à suivre, je pensais à une macro qui ferait une boucle de test, je sais pas si vous voyez d'autres solutions.

Merci d'avance,

Mathar.

PS: En PJ un fichier pour mieux comprendre.
 

Pièces jointes

  • Gestion Stocks par intervalle.xlsx
    17.2 KB · Affichages: 50

Dranreb

XLDnaute Barbatruc
Re : Gestion Stock par intervalles

Bonjour.

J'ai regardé hier, et il ne m'était venu aucune idée. Maintenant je pense qu'en ayant dans un tableau les Entrants, Dates et Mvt il serait possible dans une macro de positionner à 1 un numéro de ligne courant dans ce tableau. Puis d'explorer les sortant, soustraire le Mvt de celui de la ligne courante dans les entrants jusqu'à ce qu'il tombe à 0, auquel cas on incrémente le N°ligne des entrants. Vous me suivez ?

P.S Je le tiens, écrit sous forme de fonction renvoyant les durées :
VB:
Function DuréesStockage(ByVal Entrées As Range, ByVal Sorties As Range) As Variant()
Dim Te(), Le&, Ts(), Ls&, TDurées(), DateE As Date, QtéRest As Double, _
   DateS As Date, QtéS As Double, QtéPrélv As Double, DuréeTot As Double
'On Error GoTo Erreur
Te = Entrées.Value
Ts = Sorties.Value
ReDim TDurées(1 To UBound(Ts), 1 To 1)
Le = 1: DateE = Te(Le, 1): QtéRest = Te(Le, 2)
For Ls = 1 To UBound(Ts)
   DateS = Ts(Ls, 1): QtéS = Ts(Ls, 2): QtéPrélv = QtéS: DuréeTot = 0
   Do While QtéPrélv > 0
      If QtéPrélv >= QtéRest Then
         DuréeTot = DuréeTot + QtéRest * (DateS - DateE)
         QtéPrélv = QtéPrélv - QtéRest
         QtéRest = 0
         Le = Le + 1: If Le <= UBound(Te) Then DateE = Te(Le, 1): QtéRest = Te(Le, 2)
      Else
         DuréeTot = DuréeTot + QtéPrélv * (DateS - DateE)
         QtéRest = QtéRest - QtéPrélv: QtéPrélv = 0: End If: Loop
   TDurées(Ls, 1) = DuréeTot / QtéS: Next Ls
DuréesStockage = TDurées
'Exit Function
'Erreur: MsgBox Err.Description: Stop: Resume
End Function
On n'est pas obligé de l'utiliser comme ça, parce que ce serait un peut embêtant de la refaire chaque fois qu'on ajoute des lignes de sortants, mais en attendant pour vérification, en E3:E107, validé en matriciel (Ctrl+Shift+Entrée) :
Code:
=DuréesStockage($I$3:$J$9;$A$3:$B$107)
obtient les mêmes durées que votre colonne D. Différence: 0,00%

L'autre façon d'utiliser la fonction pourrait ensuite être ça :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Entrées As Range, Sorties As Range
Set Entrées = Me.Range(Me.[I3], Me.[I65000].End(xlUp))
Set Sorties = Me.Range(Me.[A3], Me.[A65000].End(xlUp))
Application.EnableEvents = False
Sorties.Offset(, 4).Value = DuréesStockage(Entrées.Resize(, 2), Sorties.Resize(, 2))
Application.EnableEvents = True
End Sub
 

Pièces jointes

  • DurStockMathar.xls
    66 KB · Affichages: 62
Dernière édition:

Mathar

XLDnaute Nouveau
Re : Gestion Stock par intervalles

Salut Dranreb,

Merci pour ta réponse, je jette un oeil au code que tu as préparé. Pour information, on ne va pas ajouter de lignes, sortantes comme entrantes mais on cherche une vision à un moment donné.

Mathar
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 938
Membres
101 844
dernier inscrit
pktla