Function Age(ByVal dat1 As Date, ByVal dat2 As Date, Optional Quoi = 0)
' Calcule la différence en années, mois et jours entre les dates dat1 et dat2
' si Quoi est manquant ou vaut "0", 0 => on renvoie un texte: 5a 10m 7j
' si Quoi vaut "a", "y", "1", 1 => on renvoie un nombre: 5
' si Quoi vaut "m", "2", 2 => on renvoie un nombre: 10
' si Quoi vaut "j", "d", "3", 3 => on renvoie un nombre: 7
' si Quoi vaut "mat", "arr", "4", 4 => on renvoie un array égal à (5,10,7)
' sinon on renvoie la même valeur que si Quoi était manquant
Dim aux&, an1&, mois1&, jour1&, ans&, mois&, jours&, i&
dat1 = Int(dat1): dat2 = Int(dat2)
If dat1 > dat2 Then aux = dat1: dat1 = dat2: dat2 = aux
an1 = Year(dat1): mois1 = Month(dat1): jour1 = Day(dat1)
i = Year(dat2) - an1 - 1: Do While DateSerial(an1 + i, mois1, jour1) <= dat2: i = i + 1: Loop
ans = i - 1
i = 0: Do While DateSerial(an1 + ans, mois1 + i, jour1) <= dat2: i = i + 1: Loop
mois = i - 1
i = 0: Do While DateSerial(an1 + ans, mois1 + mois, jour1 + i) <= dat2: i = i + 1: Loop
jours = i - 1
Select Case LCase(Quoi)
Case "0", 0: Age = ans & "a " & Format(mois, IIf(mois < 10, " 0", "00")) & "m " & Format(jours, IIf(jours < 10, " 0", "00")) & "j"
Case "a", "y", "1", 1: Age = ans
Case "m", "2", 2: Age = mois
Case "j", "d", "3", 3: Age = jours
Case "mat", "arr", "4", 4: Age = Array(ans, mois, jours)
Case Else:: Age = ans & "a " & Format(mois, IIf(mois < 10, " 0", "00")) & "m " & Format(jours, IIf(jours < 10, " 0", "00")) & "j"
End Select
End Function