cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 30 janv. 2006 à 19:41
J'adore les commentaires, au moins plusieurs methodes sont mises en avant :)
katsankat
Messages postés571Date d'inscriptionvendredi 30 décembre 2005StatutMembreDernière intervention12 juillet 20123 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és3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 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
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
cs_drissou
Messages postés160Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention14 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és2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 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és561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 octobre 2010 27 janv. 2006 à 13:02
C déjà plus court!! ;)
cs_drissou
Messages postés160Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention14 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és2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 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és4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 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és561Date d'inscriptionsamedi 10 janvier 2004StatutMembreDernière intervention11 octobre 2010 26 janv. 2006 à 08:10
30 janv. 2006 à 19:41
30 janv. 2006 à 17:18
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
29 janv. 2006 à 19:17
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
28 janv. 2006 à 12:05
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
28 janv. 2006 à 05:18
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 ?
27 janv. 2006 à 13:02
27 janv. 2006 à 12:50
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
26 janv. 2006 à 15:27
Dès que j'ai un petit moment, je met à jour :)
26 janv. 2006 à 12:11
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.
26 janv. 2006 à 08:10