Sub testMAGICD()
Debug.Print ConvertSeconds(3 * 10 ^ 9, 0)
End Sub
Function ConvertSeconds(Nbsec#, Optional chx As Byte = 1) 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
'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
'************************************************************************************
Dim tj#, A%, M As Byte, J#, H As Byte, Mn As Byte, sec As Byte
Dim sufAns$, sufJours$, ta#, fa#, jfa#, tm#, fm#, jfm#, fj#, sfj#, hfj#, fh#, mfh#
tj = Nbsec / 86400 'nombre (décimal) total de jours (secondes converties en jours)
'----------------------------------
'----------------------------------
Debug.Print CDate(tj)
'----------------------------------
'----------------------------------
ta = tj / 365.25 'nombre (décimal) total d'années (365,25 = nombre moyen de jours dans une année)
A = Int(ta) 'nombre entier d'années
fa = ta - A 'fraction d'année
jfa = fa * 365.25 'nombre (décimal) de jours dans la fraction d'année
If chx = 1 Then 'jours | heures | minutes | secondes
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
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
sufJours = IIf(J = 0, "", IIf(J = 1, " jour ", " jours "))
ConvertSeconds = IIf(Int(tj) = 0, "", Int(tj) & sufJours) & IIf(H < 10, "0", "") & H & ":" & IIf(Mn < 10, "0", "") & Mn & ":" & IIf(sec < 10, "0", "") & sec
ElseIf chx = 2 Then 'années | jours | heures | minutes | secondes
J = Int(jfa) 'nombre entier de jours dans la fraction d'année
fj = jfa - 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
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
sufAns = IIf(A = 0, "", IIf(A = 1, " an ", " ans "))
sufJours = IIf(J = 0, "", IIf(J = 1, " jour ", " jours "))
ConvertSeconds = IIf(A = 0, "", A & sufAns) & IIf(J = 0, "", J & sufJours) & IIf(H < 10, "0", "") & H & ":" & IIf(Mn < 10, "0", "") & Mn & ":" & IIf(sec < 10, "0", "") & sec
Else 'années | mois | jours | heures | minutes | secondes
tm = jfa / 30.4375 'nombre (décimal) total de mois (30,4375 = nombre moyen de mois dans une année)
M = Int(tm) 'nombre entier de mois
fm = tm - M 'fraction de mois
jfm = fm * 30.4375 'nombre de jours dans la fraction de mois
J = Int(jfm) 'nombre entier de jours dans la fraction de mois
fj = jfm - 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
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
sufAns = IIf(A = 0, "", IIf(A = 1, " an ", " ans "))
sufJours = IIf(J = 0, "", IIf(J = 1, " jour ", " jours "))
ConvertSeconds = 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 If
End Function