Function DATDIF(Date1 As Range, Date2 As Range, arg As String) As String
' https://www.excel-downloads.com/members/modeste-geedee.179815/ Janvier 2020
' ------- année sidérale : 365,25636567 ..........................révolution véritable de la Terre autour du Soleil
'-------- année julienne : 365.25.......................................cycle 4 ans 365 + 365 + 365 + 366
' ------- année grégorienne : 365.2425....................................cycle de 400 ans 365 jours + 1/4 -1/100 +1/400
' ------- année tropique conventionnelle : 365,2421875............... scientifiquement la plus exacte en astronomie
Application.Volatile
Dim Y As Double, MM As Double
Dim JJJ As Double, A%, M%, J%
'arg = LCase(arg)
Y = 365.2425
MM = Y / 12
JJJ = Abs(Date1 - Date2) '- 1
A = Int(JJJ / Y)
M = (Int(JJJ / MM)) Mod 12
J = JJJ - (MM * (Int(JJJ / MM)))
Select Case Lcase(arg)
Case "y", "a": DATDIF = A
Case "m": DATDIF = Int(JJJ / MM)
Case "ym", "am": DATDIF = M
Case "d", "j": DATDIF = Int(JJJ)
Case "md", "mj": DATDIF = J
Case "amj", "ymd": DATDIF = A & "a " & M & "m " & J & "j"
Case "xamj", "xymd": DATDIF = IIf(A > 0, A & IIf(A > 1, " Ans ", " An "), "") & IIf(M > 0, M & " Mois ", "") & IIf(J > 0, J & IIf(J > 1, " Jours", " Jour"), "")
Case Else
DATDIF = "=DATDIF(date1 ; date2 ; arg)"
MsgBox "DATDIF(Date1;Date2,argument)" _
& Chr(10) & "arguments : y, m, ym, m, md, amj, xamj, ? " _
& Chr(10) & "y ou a : " & Chr(9) & "nb périodes AN" _
& Chr(10) & "m : " & Chr(9) & "nb périodes MOIS" _
& Chr(10) & "ym ou am : " & Chr(9) & "nb mois hors période AN" _
& Chr(10) & "d ou j : " & Chr(9) & "nb de jours total" _
& Chr(10) & "md ou mj : " & Chr(9) & "nb de jours hors période MOIS" _
& Chr(10) & " ymd ou amj :" & Chr(9) & " abrégé AMJ" _
& Chr(10) & "xymd ou xamj : " & Chr(9) & "étendu compact AMJ" _
& Chr(10) & " ? : ce message d'aide", vbInformation + vbOKOnly
End Select
End Function