Gestion des dates et de temps en VBA [tutoriel]

VBA et Excel: gestion des dates et du temps

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.896 représente la date de 01/12/2022. Dans l’autre sens, si vous inscrivez la date 12/4/2023 dans Excel, elle sera stocké non comme une date mais comme le nombre 45.028.

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/2022#
Si vous omettez ce délimiteur, les “/” ou “-” seront considérés comme des signes mathématiques. Écrire x = 25/12/2022 signifie donc x = 0,001030333
Et si vous utilisez des guillemets (x = “25/12/2022 “), 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 les plus utiles

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

résultat:
x = 19/12/2022 12:14:47
DateRetourne la date actuelle (= aujourd'hui)x = Date

résultat:
x = 19/12/2022
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/2022 14:34:25#)

résultat:
x = 16/12/2022
TimeValue(Argument)Retourne la partie "heure" de l'(Argument)x = TimeValue(#16/12/2022 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(2023, 1, 23)

résultat:
x = 23/1/2023
DatePart(intervale, date, premier jour de semaine, première semaine de l'année)Retourne 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/2022#)

Résultats:
x = 2022 (=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 = 2022 (l'année d'aujourd'hui)
Month(Argument)Retourne le mois de l'Argumentx = Month(#15/8/2022#)

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

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/2023#))
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/2022#,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/2022#,vbMonday))

résultat:
x = "vendredi"
DateDiffRetourne le nombre d'intervals entre deux dates.
- les intervals 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/2019#,#28/4/2023#)

résultat:
17 (il y a 17 trimestres complets entre 15/2/2019 et 28/4/2023)
DateAddAjoute ou soustrait des intervals à une date
- les intervals 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/2022#)
y = DateAdd("d", 20, Date)

résultats:
x = 22/5/2024 (on a ajouté deux ans)
y = 8/1/2023 (la date dans 20 jours à partir d'aujourd'hui - 19/12/2022)

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…

  1.   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.
  2.   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…

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

11 commentaires sur “Gestion des dates et de temps en VBA [tutoriel]”