0/5 (10 avis)
Snippet vu 113 590 fois - Téléchargée 33 fois
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
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 ?
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.