Bonsoir,
En fouillant mes cartons, une fonction de calcul d'âge :
Function AGE(dn, Optional aff As String = "a", Optional df)
Dim d, hui, a%, m%, j%, agr$
Application.Volatile
On Error Resume Next
If IsMissing(df) Then
hui = Date
Else
hui = CDate(df)
If CLng(hui) > 0 And CLng(hui) < 60 Then hui = hui + 1
'hui = CDate(df)
End If
d = CDate(dn)
If CLng(d) > 0 And CLng(d) < 60 Then d = d + 1
'd = CDate(dn)
If hui < d Then GoTo errdate
On Error GoTo errdate
a = DateDiff("yyyy", d, hui)
If DateAdd("yyyy", a, d) > hui Then a = a - 1
agr = a & IIf(a > 1, " ans", " an")
If UCase(aff) = "M" Or UCase(aff) = "J" Then
d = DateAdd("yyyy", a, d)
m = DateDiff("m", d, hui)
If DateAdd("m", m, d) > hui Then m = m - 1
agr = agr & " " & m & " m."
If UCase(aff) = "J" Then
d = DateAdd("m", m, d)
j = DateDiff("y", d, hui)
agr = agr & " " & j & " j."
End If
End If
AGE = agr
Exit Function
errdate:
AGE = CVErr(xlErrNA)
End Function
Elle renvoie l'âge sous une forme littérale.
Un premier argument (obligatoire) : une date ! (la date de naissance en principe, mais ce qui lui importe c'est qu'il s'agisse d'une date. )
Un deuxième argument (optionnel) : "a" ou omis = elle renvoie l'âge en années seulement (ex.: 56 ans)
"m" = elle renvoie années et mois (ex.: 62 ans 4 m.)
"j" = elle renvoie année, mois, jours (ex.: 4 ans 6 m. 23 j.)
Un troisième argument (optionnel) permet de fournir la date à laquelle on veut calculer l'âge. Si cet argument n'est pas utilisé, le calcul fait est celui de l'âge à la date du jour. (Ce dispositif permet de l'utiliser pour calculer de façon générale la différence entre deux dates.)
En prime : elle corrige le bogue d'Excel sur les dates du 1er janvier au 28 février 1900 (écart d'un jour).
Et elle opère aussi sur les dates antérieures à 1900 (non prises en compte comme dates par Excel, mais que VBA reconnait comme dates, que la fonction peut également considérer comme telles). Les dates doivent être fournies sous la forme : jj/mm/aaaa.
Cordialement.