Function SecondsAfterDate(Nbsec#, Optional chx As Byte = 1, Optional Date_Depart As Date) As String
'**********************************************************************************
'Converti des secondes en jours | heures | minutes | secondes ou
'                         années | jours | heures | minutes | secondes ou
'                         années | mois | jours | heures | minutes | secondes
'Renvoi la date correspondant à une date + x jours
'Magic_Doctor
'**********************************************************************************
'- Nbsec : un nombre de secondes
'- chx   : si 1 ou omis --> jours | heures | minutes | secondes
'          si 2         --> années | jours | heures | minutes | secondes
'          si 3         --> années | mois | jours | heures | minutes | secondes
'          si 4         --> Date_Depart + le nombre de jours correspondant à Nbsec
'- Date_Depart : une date de référence (>= 01/01/1900) à partir de laquelle
'                s'effectuent tous les calculs
'**********************************************************************************
  
    Dim tj#, J#, A#, M As Byte, H As Byte, Mn As Byte, Sec As Byte
    Dim fj#, sfj#, hfj#, fh#, mfh#, sufAns$, sufJours$
    Dim MaDate As Date, Date_Fin As Date, fecha As Date
 
    MaDate = IIf(Date_Depart = 0, Date, Date_Depart)  'gracias Marcel32
  
    tj = Nbsec / 86400      'nombre (décimal) total de jours (secondes converties en jours)
    J = Int(tj)             'nombre entier de jours dans Nbsec
    fj = tj - J             'fraction de jour
    sfj = fj * 86400        'nombre de secondes dans la fraction de jour
    hfj = sfj / 3600        'nombre (décimal) d'heures dans la fraction de jour
    '************* Dans tous les cas, véritables heures, minutes & secondes ************
    H = Int(hfj)            'nombre entier d'heures dans la fraction de jour
    fh = hfj - H            'fraction d'heure
    mfh = fh * 60           'nombre (décimal) de minutes dans la fraction d'heure
    Mn = Int(mfh)           'nombre entier de minutes dans la fraction d'heure
    Sec = (mfh - Mn) * 60   'nombre de secondes dans la fraction de minute
   
    If Sec = 60 Then Sec = 0: Mn = Mn + 1  'correction des sec & mn au cas où Sec = 60
    '***********************************************************************************
    Date_Fin = DateAdd("d", J, MaDate) 'date de départ + nb jours
  
    If chx = 1 Then         'jours | heures | minutes | secondes
        A = 0               'on ne tient pas compte des années
        M = 0               'on ne tient pas compte des mois
    ElseIf chx < 4 Then
        A = DateDiff("yyyy", MaDate, Date_Fin)                   'nb d'années entre les 2 dates
        A = IIf(DateAdd("yyyy", A, MaDate) > Date_Fin, A - 1, A) 'nb réel d'années entre les 2 dates
        fecha = DateAdd("yyyy", A, MaDate)                       'date de départ + nb d'années
        If chx = 2 Then                                          'années | jours | heures | minutes | secondes
            M = 0                                                'on ne tient pas compte des mois
            J = Date_Fin - fecha                                 'nb de jours
        ElseIf chx = 3 Then                                                         'années | mois | jours | heures | minutes | secondes
            M = DateDiff("m", fecha, Date_Fin)                                      'nb de mois
            fecha = DateAdd("m", M, fecha)                                          'date de départ + nb d'années + nb de mois
            fecha = IIf(Day(fecha) > Day(Date_Fin), DateAdd("m", -1, fecha), fecha) 'date de départ + nb d'années + nb de mois CORRIGÉE
            J = Date_Fin - fecha                                                    'nb de jours
        End If
    Else  'date de départ + nb jours
        SecondsAfterDate = Date_Fin: Exit Function
    End If
    sufAns = IIf(A = 0, "", IIf(A = 1, " an ", " ans "))
    sufJours = IIf(J = 0, "", IIf(J = 1, " jour ", " jours "))
  
    SecondsAfterDate = IIf(A = 0, "", A & sufAns) & IIf(M = 0, "", M & " mois ") & IIf(J = 0, "", J & sufJours) & IIf(H < 10, "0", "") & H & ":" & IIf(Mn < 10, "0", "") & Mn & ":" & IIf(Sec < 10, "0", "") & Sec
End Function