Convertir des secondes en minutes, heures, jours

0/5 (10 avis)

Snippet vu 113 590 fois - Téléchargée 33 fois

Contenu du snippet

Comme le titre l'indique, cette fonction permet de convertir des secondes en minutes, heures et jours !

Rien de bien compliqué donc.

Source / Exemple :


Public Function ConvertirSecondes(Valeur As Double) As String
On Error GoTo Erreur

Dim Jours, Heures, Minutes, Secondes As Double
Dim JoursRestants, HeuresRestantes, MinutesRestantes, SecondesRestantes As String
Dim Resultat As String

If Valeur >= 86400 Then
    Jours = Int(Valeur / 86400)
    JoursRestants = Format(Jours) & " Jour(s)"
    Else
    Jours = 0
End If

Valeur = Valeur - (Jours * 86400)

If Valeur >= 3600 Then
    Heures = Int(Valeur / 3600)
    HeuresRestantes = Format(Heures) & " Heure(s)"
    Else
    Heures = 0
End If

Valeur = Valeur - (Heures * 3600)

If Valeur >= 60 Then
    Minutes = Int(Valeur / 60)
    MinutesRestantes = Format(Minutes) & " Minute(s)"
    Else
    Minutes = 0
End If

Valeur = Valeur - (Minutes * 60)

If Valeur > 0 Then
    Secondes = Valeur
    SecondesRestantes = Format(Secondes) & " Seconde(s)"
    Else
    Secondes = 0
End If

Resultat = JoursRestants & " " & HeuresRestantes & " " & MinutesRestantes & " " & SecondesRestantes

If Len(Resultat) = 0 Then ConvertirSecondes = "0 Seconde(s)" Else ConvertirSecondes = Resultat

Exit Function

Erreur:
MsgBox "Erreur N° " & Err.Number & vbNewLine & "Description : " & Err.Description, vbCritical, App.Title
Err.Clear
End Function

Conclusion :


La fonction n'est pas commentée mais sa comprehenssion est, je pense, simple même pour un débutant.

A vos commentaires (et vos votes lol)

A voir également

Ajouter un commentaire Commentaires
cs_PaTaTe Messages postés 2107 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
30 janv. 2006 à 19:41
J'adore les commentaires, au moins plusieurs methodes sont mises en avant :)
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
30 janv. 2006 à 17:18
2 autres versions:
La première est dans la shlwapi.dll, la fonction s' appelle StrFromTimeInterval.

Et la mienne:
Option Explicit


Public Function Durée(Tps As Long) As String

Dim Heure As Long, Mn As Long, Sec As Long

Dim sHeure As String, sMn As String, sSec As String



Heure = Format(Int(Tps / 3600), "00")

Mn = Format(Int((Tps - 3600 * Heure) / 60), "00")

Sec = Format(Tps - 3600 * Heure - 60 * Mn, "00")



If Heure 0 Then sHeure "" Else sHeure = IIf(Heure > 1, Heure & " heures ", "1 heure ")

If Mn 0 Then sMn "" Else sMn = IIf(Mn > 1, Mn & " minutes ", "1 minute ")

If Sec 0 Then sSec "" Else sSec = IIf(Sec > 1, Sec & " secondes ", "1 seconde ")



Durée = sHeure & sMn & sSec


End Function


Private Sub Form_Load()

MsgBox Durée(2354), , "2354s"

MsgBox Durée(1), , "1s"

MsgBox Durée(60), , "60s"

MsgBox Durée(3600), , "3600s"

MsgBox Durée(3601), , "3601s"

MsgBox Durée(148795), , "148795s"

End Sub
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
29 janv. 2006 à 19:17
une autre version.
calcul limité à une seule division.
n'affiche pas si le nombre est égal à zéro.
met le "s" si nécessaire.


Private Function ConvertirSecondes(Valeur As Double) As String
Dim dt As Date
Dim Fmt As String
Dim Fj As String
Dim Fh As String
Dim Fm As String
Dim Fs As String
Dim x As Long
Dim Resultat As Long
Dim Jours As Long
Dim Heures As Long
Dim Minutes As Long
Dim Secondes As Long

dt = Valeur / 86400
Jours = Int(dt)
Heures = Hour(dt)
Minutes = Minute(dt)
Secondes = Second(dt)

x = 1

Select Case Secondes
Case Is > 9: Secondes Secondes * x: Fs "00 secondes ": x = x * 100
Case Is > 1: Secondes Secondes * x: Fs "0 secondes ": x = x * 10
Case Is 1: Secondes Secondes * x: Fs = "0 seconde ": x = x * 10
Case Is 0: Fs ""
End Select

Select Case Minutes
Case Is > 9: Minutes Minutes * x: Fm "00 minutes ": x = x * 100
Case Is > 1: Minutes Minutes * x: Fm "0 minutes ": x = x * 10
Case Is 1: Minutes Minutes * x: Fm = "0 minute ": x = x * 10
Case Is 0: Fm ""
End Select

Select Case Heures
Case Is > 9: Heures Heures * x: Fh "00 heures ": x = x * 100
Case Is > 1: Heures Heures * x: Fh "0 heures ": x = x * 10
Case Is 1: Heures Heures * x: Fh = "0 heure ": x = x * 10
Case Is 0: Fh ""
End Select

Select Case Jours
Case Is > 9: Jours Jours * x: Fj "00 jours "
Case Is > 1: Jours Jours * x: Fj "0 jours "
Case Is 1: Jours Jours * x: Fj = "0 jour "
Case Is 0: Fj ""
End Select

Resultat = Jours + Heures + Minutes + Secondes
Fmt = Fj & Fh & Fm & Fs
ConvertirSecondes = Format$(Resultat, Fmt)

End Function
cs_drissou Messages postés 160 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 14 janvier 2009
28 janv. 2006 à 12:05
On peut effectivement mettre des conditions pour éviter de calculer les minutes et les heures.
bon je vois pas ou est le capitaine là dedans, la seule différence est que je n'ai pas mis le calcul du nombre de jours.

Et si tu regardes bien la sub tu verras , je pense sans problème que la première variable 'Secondes' est celle qui importe le nombre initial de secondes à convertir et que la deuxième variable 'Nseconde' qui veut dire 'Nouvelle Seconde' corresppond aux secondes restantes.
d'autre part je ne sais pas si le fait de mettre beaucoup de conditions accélère ou non le traitement. je demande aux puristes aito didacyte que je suis ..
Quant à la fontionnalité, elle me convient car cette sub peut être utilisée même si on ne veut pas tout de suite afficher les valeurs , mais refaire encore un traitement.
L'idéal serait de la transformer en fonction, mais il faudrait créé un type définit
Quant au capitaine, son age ne m'intéresse pas vraiment dans le type de prog que je fais.
je préfaire que les valeurs et pas forcément l'intitulé

enfin, chacun voit midi à sa porte..
si ta version te convient
Drissou
cs_PaTaTe Messages postés 2107 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
28 janv. 2006 à 05:18
et moins fonctionnel !

Si on convertit depuis des secondes pas besoin des parametres minites, heures et age du capitaine.

De plus pourquoi 2 fois secondes en paramètre ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.