CONVERTIR DES SECONDES EN MINUTES, HEURES, JOURS

cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010 - 26 janv. 2006 à 08:10
cs_PaTaTe Messages postés 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 - 30 janv. 2006 à 19:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35748-convertir-des-secondes-en-minutes-heures-jours

cs_PaTaTe Messages postés 2126 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 2126 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 ?
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
27 janv. 2006 à 13:02
C déjà plus court!! ;)
cs_drissou Messages postés 160 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 14 janvier 2009
27 janv. 2006 à 12:50
voici une énième version de conversion, mais là je ne gère pas l'écriture des mots heure, minute et secondes

Sub Secondes_VersHMS(Secondes As Long, NHeures As Long, NMinutes As Long, NSecondes As Long)
Dim Départ As Long

Départ = Secondes
If Secondes = 0 Then
NHeures = 0
NMinutes = 0
NSecondes = 0
Else
' calcul des secondes
NSecondes = Départ Mod 60
' calcule des minutes
Départ = (Départ - NSecondes) / 60
NMinutes = Départ Mod 60
' calcul des heures
Départ = (Départ - NMinutes) / 60
NHeures = Départ / 60
End If
End Sub

Driss
cs_PaTaTe Messages postés 2126 Date d'inscription mercredi 21 août 2002 Statut Contributeur Dernière intervention 19 février 2021 2
26 janv. 2006 à 15:27
C'est vrai qu'en relisant je trouve aussi qu'il y a matière à optimisations/corrections.

Dès que j'ai un petit moment, je met à jour :)
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
26 janv. 2006 à 12:11
Pour quelle raison aurait-on Len(Resultat) = 0 ??
Tu l'écris juste au dessus, et il y a au moins 3 espaces dedans ...

ConvertirSecondes = "0 Seconde(s)"
S'il y en a zéro, tu peux tout de suite enlever le (s)

La fonction Format ne te sert à rien. Il s'agit ici de convertir des nombres en chaines de caractères. il faut utiliser CStr()
JoursRestants = CStr(Jours) & " Jour(s)"

Dans le cas où Jours, Heures, Minutes, Secondes valent 0, HeuresRestantes, MinutesRestantes, ... ne sont pas affectées, et dans la chaine de caractères finale, tu te retrouves avec deux espaces consécutifs : "3 Jour(s) 2 Minute(s) 4 Seconde(s)"

Le "Else Secondes=0" ne sert à rien.


A part tout çà, c'est propre. Et il y a une gestion d'erreur intégrée (ce qui est très bien).
Il n'y a pas de commentaire, mais avec des connaissances mathématiques de base, on comprend très bien ce qui se passe.
Idéal pour débutants.
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
26 janv. 2006 à 08:10
Sympa mais pas très instructif.
Rejoignez-nous