Function roDATEDIF(ByVal Date1 As Date, ByVal Date2 As Date, Incrément$) As Long 'ROGER2327
Dim Fct&, Tmp&, dH#, dM&
Dim x&, y&
' Application.Volatile 'Facultatif, en fonction des besoins.
dH = Round(Date2 - Int(Date2) - Date1 + Int(Date1), 6)
Select Case LCase(Incrément)
Case "s": Fct = 86400 * (dH - (dH < 0)) Mod 60
Case "n": Fct = 86400 * (dH - (dH < 0)) \ 60 Mod 60
Case "h": Fct = 86400 * (dH - (dH < 0)) \ 3600
Case Else
Date2 = Int(Date2) - (dH >= 0)
Tmp = 12 * (Year(Date2) - Year(Date1)) + Month(Date2) - Month(Date1)
GoSub DECM
Tmp = Tmp + (dM >= CLng(Date2))
Select Case LCase(Incrément)
Case "md": GoSub DECM: Fct = CLng(Date2) - dM - 1
Case "ym": Fct = Tmp Mod 12
Case "y": Fct = Tmp \ 12
End Select
End Select
roDATEDIF = Fct
Exit Function
DECM:
x = DateSerial(Year(Date1), Month(Date1) + Tmp, 1)
y = Day(DateSerial(Year(x), Month(x) + 1, 0))
If y < Day(Date1) Then dM = x + y - 1 Else dM = x + Day(Date1) - 1
Return
End Function