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