Function GetElapsedYears(ByVal d1 As Date, ByVal d2 As Date) As Integer
' d2 doit être supérieur à d1
If d2 < d1 Then
Err.Raise vbObjectError Or vbDate, "GetElapsedYears", "Utilisation incorrecte de la fonction, la date de début doit être inférieure ou égale à la date de fin."
Else
' on cale la date de début à l'année de fin
Dim d As Date
d = CDate(Format$(Year(d2) & "-" & Month(d1) & "-" & Day(d1), "YYYY-MM-DD"))
If d > d2 Then
' la date supérieure à la date de comparaison, l'année n'est donc pas complète
GetElapsedYears = Year(d2) - Year(d1) - 1
Else
' année écoulée
GetElapsedYears = Year(d2) - Year(d1)
End If
End If
End Function
'----------------
' CODE EXEMPLE
'----------------
Private Sub Test()
' age de référence (date de naissance)
Dim dBirth As Date
dBirth = CDate("1970-12-15")
' date de comparaison le 14 décembre 2009
Dim d14dec As Date
d14dec = CDate("2009-12-14")
' le 14dec, il a encore 38 ans. à partir du lendemain il aura 39, ces 2 dates bien dans la même année
Dim iRes1 As Integer
Dim iRes2 As Integer
iRes1 = GetElapsedYears(dBirth, d14dec)
iRes2 = GetElapsedYears(dBirth, DateAdd("d", 1, d14dec))
MsgBox "Aujourd'hui le 14/12/2009, l'utilisateur a " & CStr(iRes1) & " ans." & vbCrLf & _
"Demain le 15, il aura " & CStr(iRes2) & " ans."
End Sub