'=============================================================================================
' Fonction = AMJ(date1, Date2, periode)
' Date1 est une date au sens Excel et Date2 est aussi une date au sens Excel
' Periode indique le type de retour :
' - si periode est le caractère a ou A ou y ou Y alors on retourne le nombre d'année complète entre
' les deux dates
' - si periode est le caractère m ou M alors on retourne le nombre de mois complets entre
' les deux dates (sans les mois des années complètes)
' - si periode est le caractère j ou J ou d ou D alors on retourne le nombre de jours entre les
' deux dates (sans les jours des années et mois complets)
' - dans les autres cas, on retourne en un seul bloc les nombre d'année, de mois et de jour
' - si periode est omis alors on applique le dernier cas (retour d'un seul bloc a m j)
'=============================================================================================
Function AMJ(ByVal d1 As Date, ByVal d2 As Date, Optional ByVal xPeriode = "")
Dim di As Date, df As Date, d As Date, a&, m&, j&, i&, x$
di = d1: df = d2 ' recup des deux dates
If di >= df Then di = d2: df = d1 ' di plus petite date, df plus grande date
For i = 12 * (Year(df) - Year(di) + 1) To 0 Step -1 ' boucle sur un nombre de mois
d = DateSerial(Year(di), Month(di) + i, Day(di)) ' d est la date di à laquelle on ajoute le nombre de mois i
If d <= df Then m = i: Exit For ' si d est inférieur à la date df alors le nombre de mois complet est i
Next i
a = m \ 12 ' calcul du nombre d'année entière
m = m - a * 12 ' calcul du nombre de mois (sans les mois des années complètes)
j = df - DateSerial(Year(di) + a, Month(di) + m, Day(di)) ' calcul du nombre de jours (sans les années et les mois)
If d1 > d2 Then a = -a: m = -m: j = -j ' si d1 est postérieure à d2 alors a, m et j sont négatifs
Select Case LCase(xPeriode) ' en fonction du retour souhaité
Case "a", "y": AMJ = a ' retour des années complètes
Case "m": AMJ = m ' retour des mois compléts
Case "j", "d": AMJ = j ' retour des jours
Case Else: AMJ = Join(Array(a, m, j), ",") ' retour des années, mois et jours
End Select
End Function