1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| Public Function SplitDiffDate(Date_Début As Variant, Date_Fin As Variant) As String
If IsNull(Date_Début) Or IsNull(Date_Fin) Or Date_Fin < Date_Début Then
SplitDiffDate = "#erreur"
Exit Function
End If
Dim Ma_Date As Date, dernJour As Date, premJour As Date
Dim nbAnnees As Integer, nbMois As Integer, nbJours As Byte
'On récupère le premier jour du mois de la date de fin
premJour = CDate("1/" & Format(Date_Fin, "mm/yyyy"))
'On récupère le dernier jour du mois de la date de début
dernJour = DateAdd("d", -1, CDate("1/" & Format(DateAdd("m", 1, Date_Début), "mm/yyyy")))
' On compte le nbre de jours entre la date de début et le dernier jour du mois de la date de début
nbJours = DateDiff("d", Date_Début, dernJour, vbMonday, vbFirstFourDays)
' On ajoute le nbre de jours entre le premier jour de la date de fin et la date de fin
nbJours = nbJours + DateDiff("d", CDate("1/" & Format(Date_Fin, "mm/yyyy")), Date_Fin, vbMonday, vbFirstFourDays) + 1
'On compte le nbre de mois entre le premier jour du mois suivant la date de début et le premier jour du mois de la date de fin
nbMois = DateDiff("m", dernJour + 1, premJour, vbMonday, vbFirstFourDays)
nbAnnees = Int(nbMois / 12)
nbMois = nbMois - (nbAnnees * 12)
Do While nbJours > 30
nbJours = nbJours - 31
nbMois = nbMois + 1
Loop
Do While nbMois > 11
nbMois = nbMois - 12
nbAnnees = nbAnnees + 1
Loop
SplitDiffDate = nbAnnees & " ans " & nbMois & " mois " & nbJours & " jours "
End Function |
Partager