Option Explicit
Public Function EditDurée(ByVal T As Double) As String
Dim S() As String, M As Double, E As Long
Select Case T
Case Is < 10: S = Split(Format(T, "000.E+00"), "E"): E = S(1) \ 3: M = S(0) * 10 ^ S(1) * 1000 ^ -E
EditDurée = Choose(1 - E, "Dénoué", "Réglé", "Aperçu") & " en " _
& M & " " & Choose(1 - E, "", "milli", "micro") & "seconde" & IIf(M > 1, "s", "") & "."
Case Is < 60: EditDurée = "Dépêtré en " & Int(T * 10 + 0.5) / 10 & " secondes" & "."
Case Else: EditDurée = "Achevé en " & DuréeEnClairSec(T) & "."
End Select
End Function
Private Function DuréeEnClairSec(ByVal DuRest As Double) As String
Dim U As Long, DuUnit As Double, NbUnit As Long, Niv As Long, Trad As String
For U = 1 To 7
DuUnit = Choose(U, 31556952, 2629746, 604800, 86400, 3600, 60, 1)
NbUnit = Int(DuRest / DuUnit)
If NbUnit > 0 Or Niv > 0 Then Niv = Niv + 1: If Niv > 2 Then Exit Function
If NbUnit > 0 Then
Trad = NbUnit & " " & Choose(U, "an", "mois", "semaine", "jour", "heure", "minute", "seconde")
If NbUnit * Choose(U, 1, 0, 1, 1, 1, 1, 1) > 1 Then Trad = Trad & "s"
If Niv = 2 Then DuréeEnClairSec = DuréeEnClairSec & " et "
DuréeEnClairSec = DuréeEnClairSec & Trad: End If
DuRest = DuRest - DuUnit * NbUnit: Next U
End Function