Problème heures minutes

Le
Dr Jekyll
Bonjour à tous.

Un champ heure abrégée avec saisie 3:20 (3 heures 20 minutes)

J'ai recherché (certainement mal) dans les archives, impossible de trouver
la formule magique de l'addition.

Toute aide sera la bienvenue.

Merci
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
TopJB
Le #20739481
Bonjour,

Si c'est un calcul d'ajout de différentes heures que tu veux faire
essaye ceci:

Sur la perte de focus ou après validation de tes champs de saisie, fais
ton calcul dans un champ caché de tes heures à ajouter

[Champ caché] = me.[heure1]+ me.[heure2]
cela va te donner un cumul de tes heures sous format décimal (Nb de jours)

utilise ensuite la fonction en passant la valeur de ton champ caché à la
fonction:

Public Function TxtTotalHeure(ByRef TotalHeure) As String
'calcule le nombre d'heures
HeureSup24 = DateDiff("h", 0, TotalHeure)
'on ajoute les minutes et les secondes
HeureSup24 = HeureSup24 & Format(TotalHeure, ":nn:ss")
TxtTotalHeure = HeureSup24
End Function

qui te revoit ton cumul décimal sous la forme HH:MM:SS

donc ton champ de cumul tu lui met comme source
=TxtTotalHeure([Champ caché]

Cordialement

TopJB

Dr Jekyll a écrit :
Bonjour à tous.

Un champ heure abrégée avec saisie 3:20 (3 heures 20 minutes)

J'ai recherché (certainement mal) dans les archives, impossible de
trouver la formule magique de l'addition.

Toute aide sera la bienvenue.

Merci


Dr Jekyll
Le #20739661
Merci de la réponse, mais je me suis mal exprimé.
Je n'ai qu'un champ qui ressemble 7:40 format heure abrégée h.m

Merci
"TopJB" news:
Bonjour,

Si c'est un calcul d'ajout de différentes heures que tu veux faire essaye
ceci:

Sur la perte de focus ou après validation de tes champs de saisie, fais
ton calcul dans un champ caché de tes heures à ajouter

[Champ caché] = me.[heure1]+ me.[heure2]
cela va te donner un cumul de tes heures sous format décimal (Nb de
jours)

utilise ensuite la fonction en passant la valeur de ton champ caché à la
fonction:

Public Function TxtTotalHeure(ByRef TotalHeure) As String
'calcule le nombre d'heures
HeureSup24 = DateDiff("h", 0, TotalHeure)
'on ajoute les minutes et les secondes
HeureSup24 = HeureSup24 & Format(TotalHeure, ":nn:ss")
TxtTotalHeure = HeureSup24
End Function

qui te revoit ton cumul décimal sous la forme HH:MM:SS

donc ton champ de cumul tu lui met comme source
=TxtTotalHeure([Champ caché]

Cordialement

TopJB

Dr Jekyll a écrit :
Bonjour à tous.

Un champ heure abrégée avec saisie 3:20 (3 heures 20 minutes)

J'ai recherché (certainement mal) dans les archives, impossible de
trouver la formule magique de l'addition.

Toute aide sera la bienvenue.

Merci




db
Le #20740171
Dr Jekyll a écrit :
Merci de la réponse, mais je me suis mal exprimé.
Je n'ai qu'un champ qui ressemble 7:40 format heure abrégée h.m




Bonsoir,

Le type "Heure" ne représente pas une durée, mais l'heure ponctuelle :
il est 2h30 ou il est 17h05, ce qui n'a rien avoir avec : ça a duré 2
heures 30 ou ça a duré 17 heures 05. C'est ce qui explique qu'on ne
puisse pas aller au delà de 23:59 dans ce type de champ.
Et donc, additionner deux heures ponctuelles n'a guère de sens : il est
2h30 + il est 17h05, ça nous fait quelle heure ? :-)

Pour stocker des durées, il faut utiliser d'autres méthodes (par exemple
type décimal ou réel, en mettant les minutes au 1/100ème - pas toujours
simple - ou deux champs entiers distincts, l'un pour les heures l'autre
pour les minutes). Mais pas de type Date/heure, en tout cas...

Bonne soirée,

db
Dr Jekyll
Le #20741691
Merci de la réponse. Je vais la changer en numérique.

Merci encore et bonne soirée.
"db" news:
Dr Jekyll a écrit :
Merci de la réponse, mais je me suis mal exprimé.
Je n'ai qu'un champ qui ressemble 7:40 format heure abrégée h.m




Bonsoir,

Le type "Heure" ne représente pas une durée, mais l'heure ponctuelle : il
est 2h30 ou il est 17h05, ce qui n'a rien avoir avec : ça a duré 2 heures
30 ou ça a duré 17 heures 05. C'est ce qui explique qu'on ne puisse pas
aller au delà de 23:59 dans ce type de champ.
Et donc, additionner deux heures ponctuelles n'a guère de sens : il est
2h30 + il est 17h05, ça nous fait quelle heure ? :-)

Pour stocker des durées, il faut utiliser d'autres méthodes (par exemple
type décimal ou réel, en mettant les minutes au 1/100ème - pas toujours
simple - ou deux champs entiers distincts, l'un pour les heures l'autre
pour les minutes). Mais pas de type Date/heure, en tout cas...

Bonne soirée,

db


Blaise Cacramp
Le #20747941
Selon : Bonjour ou bonsoir

Non, je ne crois pas :

Un jour est une unité entière (1), pouvant _aussi_ représenter une date
(selon le système d'exploitation et autres) : 1/1/1900
Une heure est un 1/24ème de jour, mais pas sous forme de Lapalissade:
0,041666666666666666666666666666667, ou 0/1/1900 1:00:00.
12 heures égalent un demi-jour, soit 0,5, etc.

Ces différents morceaux peuvent fort bien s'additionner, (...) et aussi
dépasser les 24 heures.
À noter qu'Excel possède d'ailleurs un format pour ces cas là : '[h]:mm'.
Le 'h' entre crochets pour pouvoir dépasser les 24 heures, possible aussi
d'ailleurs pour les minutes '[m]' et secondes '[s]'. Malheureusement Access
ne possède pas cette possibilité de formatage; voir une fonction
(améliorable dans le cas de 1000 heures et plus) ad hoc plus bas.

Ce système est fort pratique, car il ne faut pas gérer les différentes
opérations possibles.

Juste se souvenir qu'il faut multiplier par 24 pour un taux horaire par
exemple : [Cout_Horaire] * [Durée] * 24

En tous cas, c'est ce système là que j'utilise depuis de nombreuses années,
et sans problèmes.

Cdt, Blaise


Public Function FnFormatH(Heures As Date) As String
'formate (en chaine) les heures / minutes >= 24:00
Dim nHeures As Double
Dim nMinutes As Double
If Heures = 0 Then
FnFormatH = ""
Exit Function
End If
nMinutes = Heures * 1440
nHeures = Int(nMinutes / 60)
nMinutes = Round(nMinutes - nHeures * 60) ' arrondi
If nMinutes = 60 Then 'à cause de l'arrondi
nMinutes = 0
nHeures = nHeures + 1
End If
FnFormatH = Trim(Str(nHeures)) & ":" & Format(nMinutes, "00")
End Function

---- ---- ----


"db"
Dr Jekyll a écrit :
Merci de la réponse, mais je me suis mal exprimé.
Je n'ai qu'un champ qui ressemble 7:40 format heure abrégée h.m




Bonsoir,

Le type "Heure" ne représente pas une durée, mais l'heure ponctuelle : il
est 2h30 ou il est 17h05, ce qui n'a rien avoir avec : ça a duré 2 heures
30 ou ça a duré 17 heures 05. C'est ce qui explique qu'on ne puisse pas
aller au delà de 23:59 dans ce type de champ.
Et donc, additionner deux heures ponctuelles n'a guère de sens : il est
2h30 + il est 17h05, ça nous fait quelle heure ? :-)

Pour stocker des durées, il faut utiliser d'autres méthodes (par exemple
type décimal ou réel, en mettant les minutes au 1/100ème - pas toujours
simple - ou deux champs entiers distincts, l'un pour les heures l'autre
pour les minutes). Mais pas de type Date/heure, en tout cas...

Bonne soirée,

db


db
Le #20748161
Blaise Cacramp a écrit :
Selon : Bonjour ou bonsoir

Non, je ne crois pas :

Un jour est une unité entière (1), pouvant _aussi_ représenter une date
(selon le système d'exploitation et autres) : 1/1/1900
Une heure est un 1/24ème de jour, mais pas sous forme de Lapalissade:
0,041666666666666666666666666666667, ou 0/1/1900 1:00:00.
12 heures égalent un demi-jour, soit 0,5, etc.

Ces différents morceaux peuvent fort bien s'additionner, (...) et aussi
dépasser les 24 heures.



>..
Public Function FnFormatH(Heures As Date) As String
'formate (en chaine) les heures / minutes >= 24:00
...
End Function




Bah, s'il faut faire tout ça pour faire rentrer au forceps des durées >
24:00, c'est bien la preuve que ça n'était pas prévu pour. Si un type
durée avait existé, on écrirait champDuréeTotale=Durée1+Durée2, et on
n'en parlerait plus...
De mon humble point de vue, il y a autant de points communs entre une
durée et un champ Date/Heure qu'entre une durée et un champ Texte. Le
plus proche me semble le type décimal.

Mais bon, chacun voit midi à sa porte à 14 heures :-)

Bonne soirée,

db
Blaise Cacramp
Le #20748601
> Bah, s'il faut faire tout ça pour faire rentrer au forceps des durées >
24:00, c'est bien la preuve que ça n'était pas prévu pour. Si un type
durée avait existé, on écrirait champDuréeTotale=Durée1+Durée2, et on n'en
parlerait plus...



Et bien oui : des champs 'durées' aux format date (et on n'en parle plus)

De mon humble point de vue, il y a autant de points communs entre une
durée et un champ Date/Heure qu'entre une durée et un champ Texte. Le plus
proche me semble le type décimal.



Oui : Tout à fait d'accord : pas de champ texte (qui ne peut être soumis aux
opérations arithémitiques) mais décimal double ou tout simplement 'date'


Mais bon, chacun voit midi à sa porte à 14 heures :-)



Non non : midi = 12:00 (0.5) et 14 heures 14/24 èmes
(0,58333333333333333333333333333333) ;-O

Bonne soirée,



Cdt

db


Blaise
db
Le #20748901
Blaise Cacramp a écrit :

Et bien oui : des champs 'durées' aux format date (et on n'en parle plus)




On peut mettre 35:00 dans un champ date/heure ??
Dr Jekyll
Le #20751041
Merci à tous.

J'ai tout mis en numérique et expliqué que 2H30 = 2,50.
Je ne veux pas me prendre la tête.

Merci encore une fois à tous et je vous souhaite un bon week end.

JC
"db" news:%
Blaise Cacramp a écrit :

Et bien oui : des champs 'durées' aux format date (et on n'en parle plus)




On peut mettre 35:00 dans un champ date/heure ??


Publicité
Poster une réponse
Anonyme