Gestion des dates et heures en VBA

La gestion des dates et des heures est un sujet très important (et intéressant!) que ce soit dans Excel ou dans VBA. Microsoft a mis à notre disposition de nombreuses fonctions. Ce qui manque parfois à l'utilisateur, c'est la compréhension du concept même des dates et des heures dans MS Office. Le tutoriel que je vous propose essaie de vous montrer comment les dates et heures sont gérés dans VBA. Vous trouverez à la fin de ce tuto la liste des fonctions VBA utiles pour travailler avec des dates et des heures (la liste contient également les exemples d'utilisation et des explications).

Dates et Heures dans MS Office (en particulier Excel et VBA)

Les dates et heures que nous pouvons voir dans les classeurs Excel ne sont pas stockés sous la même forme que celle qui s’affiche sur l’écran. En pratique, les dates et les heures sont stockés sous forme de nombres à virgule flottante – par exemple: 1254,02589.

La partie entière est une représentation numérique de la date. Il s’agit du nombre de jours qui se sont écoulés depuis le 31/12/1899. Le numéro 1 correspond donc au 1/1/1900 et le numéro 44.166 représente la date de 01/12/2020. Dans l’autre sens, si vous inscrivez la date 15/4/2021 dans Excel, elle sera stocké non comme une date mais comme le nombre 44.301.

La partie décimale représente la partie d’une journée – c’est-à-dire le temps. Si on augmente le nombre de 1, on l’augmente d’un jour, c’est-à-dire de 24 heures. 12 heures correspondent donc à 0,5. Une heure représente 1/24 de jour, c’est-à-dire 0,041666 d’un jour. Une minute représente 1/1440 du jour (0,000694 du jour) et une seconde est égale à 1/86400 du jour (=0,000011574 du jour).

Donc, une cellule qui contient l’heure 14:00 correspond en fait au nombre 0,58333.

Tout ceci peut sembler assez abstrait mais il existe en VBA (tout comme en Excel) de nombreuses fonctions pour nous faciliter la vie lors d’une manipulation des dates et des heures.

Et n’oubliez pas, en VBA, si vous voulez utiliser une date directement dans le code, elle doit être délimitée par les dièses ( # ) tout comme les chaînes de caractères doivent être délimitées pas des guillemets ( ” ).
Date correcte en VBA: #25/12/2020#
Si vous omettez ce délimiteur, les “/” ou “-” seront considérés comme des signes mathématiques. Écrire x = 25/12/2020 signifie donc x = 0,00103135313531353
Et si vous utilisez des guillemets (x = “25/12/2020 “), votre date sera considérée comme un texte et vous ne pourrez pas l’utiliser dans les fonctions…

Voici donc, comme promis, la liste des fonctions VBA pour gérer le temps et heures avec des exemples et des explications…

Dates et Heures en VBA – les fonctions utiles

Fonction VBADescriptionExemple
NowRetourne la date et l'heure actuellex = Now

résultat:
x = 16/10/2015 14:34:25
DateRetourne la date actuelle (= aujourd'hui)x = Date

résultat:
x = 16/10/2015
TimeRetourne l'heure actuellex = Time

résultat:
x = 14:41:23
TimerRetourne le nombre de secondes depuis minuitx = Timer

résultat:
x = 53165,42
DateValue(Argument)Retourne la partie "date" de l'Argumentx = TimeValue(#16/12/2014 14:34:25#)

résultat:
x = 16/12/2014
TimeValue(Argument)Retourne la partie "heure" de l'(Argument)x = TimeValue(#16/12/2014 14:34:25#)

résultat:
x = 14:34:25
DateSerial()Crée une date à partir de 3 arguments: année (Year); mois (Month); jour (Day)

! - attention aux formats des arguments. Il doit s'agir des nombres entiers (Integer)
x = DateSerial(2015, 1, 23)

résultat:
x = 23/1/2015
DatePart(intervale, date, premier jour de semaine, première semaine de l'année)Returne une partie de la date.
Pour les détails des arguments: DatePart
x = DatePart("yyyy", Date)
y = DatePart("q", Date)
z = DatePart("ww", #12/8/2015#)

Résultats:
x = 2015 (=l'année d'aujourd'hui)
y = 4 (le trimestre d'aujourd'hui)
z = 50 (semaine de l'année)
Year(Argument)Retourne l'année de l'Argumentx = Year(Date)

résultat:
x = 2015 (l'année d'aujourd'hui)
Month(Argument)Retourne le mois de l'Argumentx = Month(#15/8/2010#)

résultat:
x = 8
Day(Argument)Retourne le jour de l'Argumentx = Day(#15/8/2010#)

résultat:
x = 15
MonthName(Argument)Retourne le nom du mois de l'Argument
- attention, le résultat dépend de la langue d'Excel
x = MonthName(Month(#15/2/2015#))
ou
x = MonthName(2)

résultat:
x = "février"
Weekday(date, premier jour de semaine)Retourne le numéro du jour de la semaine.
! - par défaut, le 1 correspond au dimanche. Pour commencer la semaine lundi, le 2ème argument doit être vbMonday
x = Weekday(#11/11/2016#,vbMonday)

résultat:
5
WeekdayName(Argument)Retourne le nom du jour de semaine de l'Argument
- attention, le résultat dépend de la langue d'Excel
x = WeekdayName(Weekday(#11/11/2016#,vbMonday))

résultat:
x = "vendredi"
DateDiffRetourne le nombre d'intervales entre deux dates.
- les intervales peuvent être: seconde, minute, heure, semaine, jour de la semaine, jour, jour de l'année, mois, trimestre, année.
Plus sur le site de Microsoft
x = DateDiff("q", #15/2/2010#,#28/4/2015#)

résultat:
21 (il y a 21 trimestres complets entre 15/2/2010 et 28/4/2015)
DateAddAjoute ou soustrait des intervales à une date
- les intervales peuvent être: seconde, minute, heure, semaine, jour de la semaine, jour, jour de l'année, mois, trimestre, année.
Plus sur le site de Microsoft
x = DateAdd("yyyy", 2, #22/5/2012#)
y = DateAdd("d", 20, Date)

résultats:
x = 22/5/2014 (on a ajouté deux ans)
y = 5/11/2015 (la date dans 18 jours à partir d'aujourd'hui - 16/10/2015)

Conclusion – La gestion des dates en VBA est assez facile… Grâce aux fonctions VBA!

Avec ces fonctions ou leur combinaisons, il est possible d'effectuer la plupart des opérations liés à la manipulation des dates et des unités de temps. Dans les cas plus complexes (par exemple certains calculs financiers), la gestion de dates peut rester compliquée mais c'est un autre sujet…

Deux conseils à la fin…

Lors de l'utilisation des fonctions VBA cités plus haut, il est important de faire attention aux paramètres régionaux et linguistiques de votre ordinateur/Excel (noms des mois, des jours de la semaine,…). N'oubliez pas que VBA fonctionne en anglais, mais certains paramètres viennent de la langue de votre système d'exploitation ou de votre installation d'Office.

Un autre point d'attention est la bonne utilisation du "premier jour de la semaine". Aux États-Unis, contrairement à l'Europe, la semaine commence le dimanche! Et donc, par défaut, c'est le jour qu'Excel utilise. N'oubliez donc pas d'ajouter l'argument optionnel firstdayofweek (avec la valeur vbMonday) dans les fonctions qui utilisent, de manière optionnelle, cet argument. Si vous l'omettez, vous risquez de vous retrouver avec des résultats incorrects sans même vous en rendre compte.

Pour aller plus loin en VBA et en Excel

Voici quelques autres articles sur Excel et VBA qui pourraient vous être utiles…

88 0

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée.

11 commentaires sur “Gestion des dates et heures en VBA”