Comment traiter les heures ?

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Hans Le Roy
Le #15396791
Bonjour Jacques,


"Jacques" 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
Jean-marc
Le #15396771
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/
LE TROLL
Le #15396761
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" 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
|
|
Jacques
Le #15396731
Merci tout le monde :-)


Jacques


"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




Patrice Henrio
Le #15394551
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.
Publicité
Poster une réponse
Anonyme