cs_hustler
Messages postés85Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention20 mars 2012
-
7 nov. 2007 à 10:07
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
7 nov. 2007 à 17:43
Bonjour,
désolé de poser une question aussi nule mais je trouve pas la réponse
comment dois-je faire pour avoir un format d'heure qui autorise le depassement de 23:59:59
pour le moment je fais une somme d'heures et au lieu de m'afficher
26:00:00 il m'affiche 02:00:00
actuellement j'utilise format (mon heure, "hh:mm:ss")
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 7 nov. 2007 à 11:04
Ce que tu gères, ce ne sont pas des heures, mais des durées ! Tu ne dois pas utiliser le format Date mais un format numérique, comme un Long ou un Double si tu veux gérer les décimales d'heure
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 7 nov. 2007 à 12:20
le format hh:mm:ss ne te sert que lors de l'affichage de ta donnée. il n'est pas tres compliqué de convertir un double en hh:mm:ss.
Travaille avec un double en interne et fait toi une petite function de conversion de double vers string au format hh:mm:ss.
Si ton double représente des minutes, ca fera un truc du genre :
Private Function mm10Tohhmmss(ByVal mm10 As Double) As String
Dim H As Long, M As Long, S As Long
H = mm10 \ 60
If mm10 >60 Then M mm10 Mod 60 Else M = Fix(mm10)
S = Fix((mm10 - Fix(mm10)) * 60)
mm10Tohhmmss = Format(H, "00") & ":" & Format(M, "00") & ":" & Format(S, "00")
End Function
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 7 nov. 2007 à 16:16
ou sans faire un type spécifique et en gardant la notion de double qui stocke des minutes.
Il te faut une petite fonction (inverse de ma 1ere) qui passe une string au format hh:mm:ss en double :
' Parametre de la forme "hh:mm:ss"
Function hhmmssTomm10(byval hhmmss As String) As Double
hhmmssTomm10 = (cdbl(left$(hhmmss,2)) * 60) + cdbl(mid$(hhmmss,4,2)) + (cdbl(right$(hhmmss,2)) / 60)
End Function
et ensuite, tu stockes tes heure debut et fin dans des doubles et juste une soustraction à faire après :
Dim HD As Double, HF As Double, Duree As Double
HD 1200 ' 1200 minutes 20h00
HF 480 + 1440 ' 480 minutes 08h00 et 1440 minutes = 1 journée (le lendemain)
Duree = HF - HD
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 7 nov. 2007 à 16:43
à mettre dans un module, j'ai pas testé...
Option Explicit
Public Enum eTimeArg
[1 - Arg Hours] = 1
[2 - Arg Minutes]
[3 - Arg Secondes]
End Enum
Public Type MyTime
tH As Integer
tM As Integer
tS As Integer
End Type
Public Function GetHours(ByRef tValue As MyTime) As Integer
GetHours = tValue.tH
End Function
Public Function GetMinutes(ByRef tValue As MyTime) As Integer
GetMinutes = tValue.tM
End Function
Public Function GetSecondes(ByRef tValue As MyTime) As Integer
GetSecondes = tValue.tS
End Function
Public Sub SetHours(ByRef tValue As MyTime, ByVal iValue As Integer)
tValue.tH = iValue
End Sub
Public Sub SetMinutes(ByRef tValue As MyTime, ByVal iValue As Integer)
tValue.tM = iValue
End Sub
Public Sub SetSecondes(ByRef tValue As MyTime, ByVal iValue As Integer)
tValue.tS = iValue
End Sub
Public Sub SetMyTimeTYP(ByRef tValue As MyTime, ByVal iHours As Integer, ByVal iMinutes As Integer, ByVal iSecondes As Integer)
tValue.tH = iHours
tValue.tM = iMinutes
tValue.tS = iSecondes
VerifMyTime tValue
End Sub
Public Sub AddValue(ByRef tSrc As MyTime, ByRef tDest As MyTime, iValue As Integer, eUnit As eTimeArg)
SetMyTimeTYP tDest, tSrc.tH, tSrc.tM,
tSrc.tS
If eUnit = [1 - Arg Hours] Then
tDest.tH = tDest.tH + iValue
ElseIf eUnit = [2 - Arg Minutes] Then
tDest.tM = tDest.tM + iValue
ElseIf eUnit = [3 - Arg Secondes] Then
tDest.tS = tDest.tS + iValue
End If
VerifMyTime tDest
End Sub
Public Sub SubValue(ByRef tSrc As MyTime, ByRef tDest As MyTime, iValue As Integer, eUnit As eTimeArg)
SetMyTimeTYP tDest, tSrc.tH, tSrc.tM,
tSrc.tS
If eUnit = [1 - Arg Hours] Then
tDest.tH = tDest.tH - iValue
ElseIf eUnit = [2 - Arg Minutes] Then
tDest.tM = tDest.tM - iValue
ElseIf eUnit = [3 - Arg Secondes] Then
tDest.tS = tDest.tS - iValue
End If
VerifMyTime tDest
End Sub
Public Function GetFormatedMyTime(ByRef tValue As MyTime) As String
VerifMyTime tValue
GetFormatedMyTime = Format$(tValue.tH, "00") & ":" & Format$(tValue.tM, "00") & ":" & Format$(tValue.tS, "00")
End Function
Public Sub SetMyTimeSTR(ByRef tValue As MyTime, ByVal sTime As String)
Dim aTime() As String
aTime = Split(sTime, ":")
SetMyTimeTYP tValue, Val(aTime(0)), Val(aTime(1)),
Val(aTime(2))
End Sub
Private Sub VerifMyTime(ByRef tValue As MyTime)
Dim iTmp As Integer
If tValue.tS > 59 Then
iTmp = tValue.tS Mod 60
tValue.tS = tValue.tS \ 60
Else
iTmp = 0
End If
tValue.tM = tValue.tM + iTmp
If tValue.tM > 59 Then
iTmp = tValue.tM Mod 60
tValue.tM = tValue.tM \ 60
Else
iTmp = 0
End If
tValue.tH = tValue.tH + iTmp
End Sub
++
PCPT [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp