Conversion d'une durée en secondes au format hh:mm:ss (sans format())

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 777 fois - Téléchargée 37 fois

Contenu du snippet

Il suffit de saisir une durée en seconde et hop!
Gestion de l'affichage d'un 0 si les secondes ou les minutes sont < 10

Source / Exemple :


Function CalcDuree(TpsSec As Long) As String

Dim DurHeur As Long
Dim DurMin As Long
Dim DurSec As Long

'Saisie du temps en secondes
tps = InputBox("entrer un nombre de secondes")

'Détermine les heures
DurHeur = Round(TpsSec / 3600)
If (TpsSec Mod 3600) >= 1800 Then
    DurHeur = DurHeur - 1
End If

'Détermine les minutes
DurMin = Round(TpsSec / 60) - DurHeur * 60
If (TpsSec Mod 60) >= 30 Then
    DurMin = DurMin - 1
End If

'Détermine les secondes
DurSec = TpsSec - DurMin * 60 - DurHeur * 3600

'Ajoute un 0 devant les secondes et les minutes inférieures à 10
If (DurMin < 10 And DurSec < 10) Then
    CalcDuree = DurHeur & ":0" & DurMin & ":0" & DurSec
ElseIf (DurMin >= 10 And DurSec < 10) Then
    CalcDuree = DurHeur & ":" & DurMin & ":0" & DurSec
ElseIf (DurMin < 10 And DurSec >= 10) Then
    CalcDuree = DurHeur & ":0" & DurMin & ":" & DurSec
Else
    CalcDuree = DurHeur & ":" & DurMin & ":" & DurSec
End If

'Affichage du résultat
MsgBox "Durée = " & CalcDuree

End Function

Conclusion :


Fonctionne pour tous les cas de figure dans la limite du raisonnable!!!

A voir également

Ajouter un commentaire

Commentaires

Messages postés
133
Date d'inscription
dimanche 23 juin 2002
Statut
Membre
Dernière intervention
3 janvier 2015
3
voila ce que j'ai deja utiliser si cela peux servir a d'autre

text1=resultat de la conversion


Seconde = ' a entre de la maniere que vous voulez
DefHeure = Seconde
Cal = DefHeure / 60
Minute = Fix(Cal)
Seconde = Fix((DefHeure - Minute * 60))
If Minute > 59 Then
Heure = Fix(Minute / 60)
Minute = Fix((Minute - Heure * 60))
End If
If DefHeure >= 86400 Then
Jour = Fix(DefHeure / 86400)
Text1 = Format(Jour, "00") & " J " & Format(Heure - (Jour * 24), "00") & " H " & Format(Minute, "00") & " Min " & Format(Seconde, "00") & " s"
Else
If DefHeure >= 3600 Then
Text1 = Format(Heure, "00") & " H " & Format(Minute, "00") & " Min " & Format(Seconde, "00") & " s"
Else
If DefHeure >= 60 Then
Text7 = Format(Minute, "00") & " Min " & Format(Seconde, "00") & " s"
Else
Text7 = Format(Seconde, "00") & " s"
End If
End If
End If
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
8
JoePatent> ça va de soit ;)
Messages postés
171
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
20 juillet 2008

Une autre methode est de prendre le tout a l'envers et d'eliminer tous les IF

Dim tpssec As Long
Dim secondes As Long
Dim minutes As Long
Dim heures As Long

tpssec = 90 ' On met un nombre x de secondes - fin de test
secondes = tpssec Mod 60 ' On determine le nombre de secondes

tpssec = tpssec - secondes ' on eneleve le nombre de secondes de la duree
tpssec = tpssec / 60 ' On convertit le tout en minute

minutes = tpssec Mod 60 ' on determine le nombre de minutes
tpssec = tpssec - minutes ' On enleve le nombre de minutes de la duree

tpssec = tpssec / 60 ' On convertit le tout en heure
heures = tpssec Mod 60 ' On determine le nombre d'heure

MsgBox heures & ":" & Format(minutes, "00") & ":" & Format(secondes, "00")
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
pour le coup, je respecte son cahier des charges ;-) le contenu, je laisse l'auteur en décider ....

Format serait tout de même bien utile ici...
Messages postés
1134
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
24 juillet 2011
1
Pourquoi vouloir se passer de Format ?

Personnellement, je préfère procéder à la mise en forme "00" de la manière suivante :

CalcDuree = DurHeur & ":" & Format(DurMin,"00)" & ":" & Format(DurSec,"00")

Ainsi, il n'y a pas besoin de s'amuser à vérifier s'il y a moins de 10 minutes ou 10 secondes.
Afficher les 7 commentaires

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.