OVH Cloud OVH Cloud

Comment traiter les heures ?

5 réponses
Avatar
Jacques
Bonjour,

Dans une application je cumule les heures (j'essaie plutôt!) faites chaque
jour.

Mais lorsque j'arrive à devoir additionner 20:00 avec 18:00 cela ne
fonctionne plus
Comment afficher mes 38:00 dans mon textbox.


Merci

Jacques

5 réponses

Avatar
Hans Le Roy
Bonjour Jacques,


"Jacques" wrote in message
news:
Bonjour,

Dans une application je cumule les heures (j'essaie plutôt!) faites chaque
jour.

Mais lorsque j'arrive à devoir additionner 20:00 avec 18:00 cela ne
fonctionne plus
Comment afficher mes 38:00 dans mon textbox.


Merci

Jacques





C'est que des heures en VB, ce sont des fragments de jours. J'en ferais des
integers ou plutôt une classe basée sur des integers, qui rendent les heures
comme tu le désires.

A+

Hans
Avatar
Jean-marc
Jacques wrote:
Bonjour,

Dans une application je cumule les heures (j'essaie plutôt!) faites
chaque jour.

Mais lorsque j'arrive à devoir additionner 20:00 avec 18:00 cela ne
fonctionne plus
Comment afficher mes 38:00 dans mon textbox.


Merci

Jacques



Hello,

si tu cumules des entités de type "heures/minute", tout ce
qu'il te faut c'est implémenter une petite fonction de calcul
en base soixante.
(Il ne faut pas passer par le type date. Le type Date est pour
des ==>> *temps* <<== alors que toi tu manipules des
==>> *durées* <<==.)

Alors voila tu fais un type comme ceci:

Private Type TDuree
heure As Integer
minute As Integer
End Type

Puis une fonction de calcul de somme, comme ça:

Private Function AddDur(d1 As TDuree, d2 As TDuree) As TDuree
Dim h As Integer, m As Integer
Dim rh As Integer
Dim res As TDuree

m = d1.minute + d2.minute
If m >= 60 Then
rh = Int(m / 60)
m = m - 60 * rh
End If
res.minute = m
res.heure = d1.heure + d2.heure + rh
AddDur = res
End Function

Puis une fonction de plus haut niveau qui peut additioner
un tableau, par exemple:

Private Function SommeDuree(d() As TDuree, n As Long) As TDuree
Dim res As TDuree
Dim i As Long

For i = 1 To n
res = AddDur(res, d(i))
Next i
SommeDuree = res
End Function

Et pour l'utiliser et bien c'est tout simple:

Private Sub Command1_Click()
Dim dur(31) As TDuree
Dim total As TDuree

' jour 1, travail 12 heures et 16 minutes
dur(1).heure = 12: dur(1).minute = 16

' jour 2, travail 10 heures et 49 minutes
dur(2).heure = 10: dur(2).minute = 49

' jour 3, travail 14 heures et 37 minutes
dur(3).heure = 14: dur(3).minute = 37

total = SommeDuree(dur, 3)
Debug.Print total.heure & ":" & total.minute
End Sub

Et voila :-)



--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
LE TROLL
Bonjour Jacques,

J'ai souvent utilisé les heures (feuille de
paye, etc), en complément de la répons de
Jean-Marc:
Tu peux utiliser plus simple, juste en
arithmétique en faisant des variables, genre:

dim temps as long
dim jj as long
dim hh as long
dim mn as long
dim ss as long
hh = val(mid(duree, 1,2))
mn = val(mid(duree, 4,2))
ss = val(mid(duree, 7, 2) )
temps = ss + (mn * 60) + (hh * 3600) ' tou en
secondes
jj = temps 86400
temps = temps - (jj * 86400)
hh = temps 3600
temps = temps - (hh * 3600)
mn = temps 60
ss = temps - (mn * 60)

Je n'ai pas testé, il peut y avoir quelque
corrections...
Et pour récupérer l'heure hh:mn:ss par exemple
x = val(mid(duree, 1, 2))

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jacques" a écrit dans le
message de news:

| Bonjour,
|
| Dans une application je cumule les heures
(j'essaie plutôt!) faites chaque
| jour.
|
| Mais lorsque j'arrive à devoir additionner 20:00
avec 18:00 cela ne
| fonctionne plus
| Comment afficher mes 38:00 dans mon textbox.
|
|
| Merci
|
| Jacques
|
|
Avatar
Jacques
Merci tout le monde :-)


Jacques


"Jacques" a écrit dans le message de news:

Bonjour,

Dans une application je cumule les heures (j'essaie plutôt!) faites chaque
jour.

Mais lorsque j'arrive à devoir additionner 20:00 avec 18:00 cela ne
fonctionne plus
Comment afficher mes 38:00 dans mon textbox.


Merci

Jacques




Avatar
Patrice Henrio
Pour la fonction avec un tableau, je propose plutôt

Private Function SommeDuree(d() As TDuree) As TDuree
Dim res As TDuree
Dim i As Long

For i = Lbound(D) To UBound(d)
res = AddDur(res, d(i))
Next i
SommeDuree = res
End Function

Je pense que les bornes d'une boucle ne sont calculées qu'une fois en VB, au
début de la boucle mais je me trompe peut-être.