Format

Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
- - Dernière réponse : PCPT
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Derniè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")

merci d'avance pour votre aide
Afficher la suite 

17 réponses

Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
44
0
Merci
Salut,
Et quel est l'intérêt de se retrouver avec une heure 26:00:00 ???

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
0
Merci
ben je fais un calcul sur les heures et je veux savoir combien de temps une personne a travaillé sur 2 jours

donc voila
Commenter la réponse de cs_hustler
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
44
0
Merci
Re,

Lorsque tu utilise format de quel type est la variable "mon heure"

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
0
Merci
c'est une variable que je n'ai pas definie
Commenter la réponse de cs_hustler
Messages postés
920
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
6
0
Merci
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
Commenter la réponse de Kristof_Koder
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
0
Merci
j'ai essayé de mettre du long mais je perd mon format hh:mm:ss
Commenter la réponse de cs_hustler
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
28
0
Merci
essaye avec le format "hhh:mm:ss" peut-etre

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Commenter la réponse de cs_casy
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
0
Merci
j'ai essayé mais il aime pas trop
Commenter la réponse de cs_hustler
Messages postés
920
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
6
0
Merci
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
Commenter la réponse de Kristof_Koder
Messages postés
920
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
6
0
Merci
Petite correction ...
H = Fix(mm10 / 60)

au lieu de simplement
H = mm10 \ 60
car sinon, l'arrondi nous bernera parfois
Commenter la réponse de Kristof_Koder
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
0
Merci
je voudrais pas abuser mais comment je dois faire pour calculerun ecart entre deux horaires

par exemple un gars termine son travail à 20h00 et reprend le lendemain à 8h

il faudrait que je trouve 12hr

lorsque je fais un calcul du genre ((24:00:00-20:00:00) + 08:00:00)
j'ai un probleme dans le format
Commenter la réponse de cs_hustler
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
salut,

fais-toi des TYPE, genre

private type MyTime
tH as integer
tM
as integer
tS
as integer
end type



et ensuite tu fais tes fonctions selon tes besoins avec ces variables typées en argument
++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Commenter la réponse de PCPT
Messages postés
85
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
20 mars 2012
0
Merci
merci pourta reponse mais tu aurais pas un exemple stp
Commenter la réponse de cs_hustler
Messages postés
920
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
6
0
Merci
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
Commenter la réponse de Kristof_Koder
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
à 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
Commenter la réponse de PCPT
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
'   WOUPSSSSSSSSSS


'-----------------------------------------------


'à modifier :


'-----------------------------------------------




Private Sub 
VerifMyTime(
ByRef 
tValue 
As 
MyTime)

    Dim iTmp As Integer
    
    If tValue.tS > 59 Then
        iTmp = tValue.tS \ 60
        tValue.tS = tValue.tS Mod 60
    Else
        iTmp = 0
    End If
    
    tValue.tM = tValue.tM + iTmp

    If tValue.tM > 59 Then
        iTmp = tValue.tM \ 60
        tValue.tM = tValue.tM Mod 60
    Else
        iTmp = 0
    End If
    
    tValue.tH = tValue.tH + iTmp
End Sub

'-----------------------------------------------

'   EXEMPLE
Option Explicit

Private Sub Form_Load()
    Dim t24 As MyTime, t4 As MyTime, tRes As MyTime
    
    SetMyTimeSTR t24, "24:00:00"

'   24-20 = 4
    SubValue t24, t4, 20, [1 - Arg Hours]
 
'   4+8
    AddValue t4, tRes, 8, [1 - Arg Hours]

'   résultat formaté
    MsgBox GetFormatedMyTime(tRes) 'doit renvoyer 12:00:00

'   ajoute 92 secondes + résultat
    AddValue tRes, tRes, 92, [3 - Arg Secondes]
    MsgBox GetFormatedMyTime(tRes) 'doit renvoyer 12:01:32
End Sub
Commenter la réponse de PCPT
Messages postés
13299
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23
0
Merci
cherchez l'erreur...

(sisi, il y en a une autre, et 3 améliorations possibles)
Commenter la réponse de PCPT