Additionner des heures
Comment additionner des heures dans Access, tout en dépassant les 24 heures ? Ce qui revient à : comment transformer des heures Access en centièmes ?
Principe
Vous aurez sans doute besoin un jour de transformer des heures Access (format #hh:mm:ss#
) en centièmes, pour faire des calculs ensuite : par exemple, calculer des salaires horaires. La fonction qui suit va simplifier le principe de calcul, et pourra être utilisée ensuite partout dans votre base Access.
La fonction
Recopiez la fonction suivante dans un module standard d’Access :
1 2 3 4 5 6 7 |
' --- ' CONVERSION D'UNE HEURE EN DUREE DECIMALE ' --- ' Function HeureDecimale(ByVal dt As Date) As Double HeureDecimale = CDbl(dt - Int(dt)) * 24 End Function |
Tester !
Pour tester cette fonction :
- Ouvrez la fenêtre Exécution (
CTRL
+G
). - Tapez :
? HeureDecimale(#15:30#)
puis[Entrée]
.
Vous devez obtenir la valeur 15.5
.
- En utilisant la valeur
#15:29#
, vous allez par contre obtenir15.483333
. - Vous pouvez aussi utiliser l’heure du moment :
HeureDecimale(Now)
. - Et bien sûr, dans une requête, vous pourrez remplacer l’heure par un champ de table (ça fera l’objet d’un autre article sur le blog).
Comment ça marche ?
Les dates et les heures sont stockées sous forme de valeur décimale. Une date comme le 25/12/2011
à 12:00
vaut par exemple 40902.5
. Pour le vérifier, tapez ceci dans la fenêtre Exécution :
1 |
? CDbl(#25/12/2011 12:00#) |
La fonction CDbl()
convertit une valeur en Numérique/Double.
#
dans Access.Lorsqu’une date est vue sous sa valeur numérique brute :
- La partie entière (
40902
) donne le nombre de jours écoulés depuis le depuis du calendrier Access. - La partie décimale (
0.5
) donne les heures écoulées dans la journée. Il est donc logique que l’heure de midi corresponde à 1/2 journée, donc0.5
. De la même manière,0.75
correspond à 3/4 de journée, soit18:00
.
Pour exploiter tout ça, notre fonction HeureDecimale()
…
- Extrait la partie décimale uniquement d’une date
dt
. Cette partie décimale étant la différence entredt
et sa partie entière (donnée par la fonctionInt()
). - Convertit cette partie décimale en valeur double.
- Multiplie le résultat par 24.
De cette manière, 0.5 devient 12 (12 heures), 0.75 devient 18. Ça marche bien sûr pour des valeurs moins simples !