Fonctions de base dédiées aux dates
Il existe un grand nombre de fonctions dédiées à la manipulation des dates en VBA. Tant mieux, car sans elles, vous devriez écrire beaucoup plus de lignes de code lorsque vous manipulez des dates et heures…
Fonction | Valeur retournée par la fonction |
Date | Variant (Date) qui contient la date système |
Time | Variant (Date) qui contient l’heure système |
Now | Variant (Date) qui contient la date et l’heure système |
Day | Variant (Integer) qui représente le jour du mois de la date passée en argument |
Month | Variant (Integer) qui représente le mois de la date passée en argument |
MonthName | Variant (String) qui représente le nom du mois passé en argument |
Year | Variant (Integer) qui représente l’année de la date passée en argument |
Weekday | Variant (Integer) qui représente le jour de la semaine |
WeekdayName | Variant (String) qui représente le nom du jour de la semaine passé en argument |
Hour | Variant (Integer) qui représente les heures de la valeur passée en argument |
Minute | Variant (Integer) qui représente les minutes de la valeur passée en argument |
Second | Variant (Integer) qui représente les secondes de la valeur passée en argument |
Timer | Single qui représente le nombre de secondes écoulées depuis minuit |
Voici quelques exemples d’utilisation de ces fonctions :
Debug.Print Date Debug.Print Time Debug.Print Now Debug.Print Day(Date) Debug.Print Month(Date) Debug.Print MonthName(Month(Date)) Debug.Print Year(Date) Debug.Print Weekday(Date) Debug.Print WeekdayName(Weekday(Date) - 1) Debug.Print Hour(Now) Debug.Print Minute(Now) Debug.Print Second(Now) Debug.Print Timer
Et voici les résultats affichés dans la fenêtre Exécution :
30/10/2017 17:19:41 30/10/2017 17:19:41 30 10 octobre 2017 2 lundi 17 19 41 62381,12
Les fonctions IsDate() et CDate()
La fonction IsDate(d) retourne la valeur :
- Vrai si l’argument est une date ;
- Faux si l’argument n’est pas une date.
La fonction CDate() transforme l’argument chaîne qui lui est passé en un date
Exemples :
Debug.Print "IsDate(""12/8/1960"") : " & IsDate("12/08/1960") Debug.Print "IsDate(""122/08/1960"") : " & IsDate("122/08/1960") Dim d As Variant Debug.Print "d est défini en tant que variant" Debug.Print "IsDate(d) : " & IsDate(d) d = CDate("22/12/2018") Debug.Print "Après cette instruction :" Debug.Print " d = CDate(""22/12/2018"")" Debug.Print "IsDate(d) vaut " & IsDate(d)
Voici le résultat de ce code :
IsDate("12/8/1960") : Vrai IsDate("122/08/1960") : Faux d est défini en tant que variant IsDate(d) : Faux
Après cette instruction :
d = CDate("22/12/2018")
IsDate(d) vaut Vrai
Les fonctions de date qui travaillent sur des intervalles
Plusieurs fonctions vous permettent de travailler simplement sur des intervalles. Par exemple pour ajouter 25 jours à une date ou encore pour soustraire 3 mois à une date. Les intervalles sont codés sous la forme de String. Les différentes valeurs possibles sont résumées dans ce tableau :
Intervalle | Effet |
yyyy | Année (entre 100 et 9999) |
y | Jour de l’année (entre 1 et 365) |
m | Mois (entre 1 et 12) |
q | Trimestre (entre 1 et 4) |
ww | Semaine (entre 1 et 53) |
w | Jour (entre 1 et 7) |
d | Jour (entre 1 et 31) |
h | Heure (entre 0 et 23) |
n | Minute (entre 0 et 59) |
s | Seconde (entre 0 et 59) |
La fonction DateAdd()
La fonction DateAdd() retourne un Variant (Date) qui contenant une date à laquelle un intervalle de temps spécifié a été ajouté.
DateAdd(intervalle, nombre, date)
Où :
- intervalle est un des codes du tableau précédent ;
- nombre est le nombre d’intervalles à ajouter à la date de référence, spécifiée dans le troisième argument.
Exemples :
Debug.Print "Date système : " & Date Debug.Print "Dans 3 mois : " & DateAdd("m", 3, Date) Debug.Print "Il y a 3 mois : " & DateAdd("m", -3, Date) Debug.Print "Dans 5 jours : " & DateAdd("y", 5, Date) Debug.Print "Il y a 1 trimestre : " & DateAdd("q", -1, Date) Debug.Print "Heure système : " & Time Debug.Print "Il y a 2h20 : " & DateAdd("n", -140, Time) Debug.Print "Dans 2 ans : " & DateAdd("yyyy", 2, Now)
Voici le résultat :
Date système : 30/10/2017 Dans 3 mois : 30/01/2018 Il y a 3 mois : 30/07/2017 Dans 5 jours : 04/11/2017 Il y a 1 trimestre : 30/07/2017 Heure système : 17:51:39 Il y a 2h20 : 15:31:39 Dans 2 ans : 30/10/2019 17:51:39
La fonction DateDiff()
La fonction DateDiff() retourne un Variant (Long) qui indique le nombre d’intervalles de temps entre deux dates données. Voici sa syntaxe :
DateDiff(intervalle, date1, date2)
Où intervalle est l’intervalle de temps (voir le tableau au début de la section « Les fonctions de date qui travaillent sur des intervalles ») qui sépare les dates date1 et date2.
Exemples :
Dim d1, d2 As Variant d1 = "20/12/2016" d2 = "15/06/2020" Debug.Print "Les deux dates à comparer : " & d1 & " et " & d2 Debug.Print "Nb de mois entre ces deux dates : " & DateDiff("m", d1, d2) Debug.Print "Nb de semaines entre ces deux dates : " & DateDiff("ww", d1, d2) Debug.Print "Nb de jours entre ces deux dates : " & DateDiff("w", d1, d2) Dim h1, h2 As Variant h1 = "5:10:12" h2 = "17:30:45" Debug.Print "Les deux heures à comparer h1 et h2 : " & h1 & " et " & h2 Debug.Print "Nb d'heures entre h1 et h2 : " & DateDiff("h", h1, h2) Debug.Print "Nb de minutes entre h1 et h2 : " & DateDiff("n", h1, h2) Debug.Print "Nb de secondes entre h1 et h2 : " & DateDiff("s", h1, h2) Voici le résultat de ce code : Les deux dates à comparer : 20/12/2016 et 15/06/2020 Nb de mois entre ces deux dates : 42 Nb de semaines entre ces deux dates : 182 Nb de jours entre ces deux dates : 181 Les deux heures à comparer h1 et h2 : 5:10:12 et 17:30:45 Nb d'heures entre h1 et h2 : 12 Nb de minutes entre h1 et h2 : 740 Nb de secondes entre h1 et h2 : 44433
La fonction DatePart()
La fonction DatePart() retourne un Variant (Integer) qui représente l’année, le trimestre, le mois, la semaine ou le jour d’une date. Voici sa syntaxe :
DatePart(partie, date)
Où partie représente l’élément à extraire de la date spécifiée en deuxième argument.
Exemples :
Debug.Print "Date système : " & Date Debug.Print "Semaine de la date système : " & DatePart("ww", Date) Debug.Print "Trimestre de la date système : " & DatePart("q", Date) Debug.Print "Jour de la semaine de la date système : " & DatePart("w", Date) – 1
Voici le résultat de ce code :
Date système : 30/10/2017 Semaine de la date système : 44 Trimestre de la date système : 4 Jour de la semaine de la date système : 1
Les fonctions DateSerial() et TimeSerial()
La fonction DateSerial() retourne un Variant (Date) qui correspond à l’année, le mois et le jour passés en argument. Voici sa syntaxe :
DateSerial(annee, mois, jour)
Où annee, mois et jour sont (respectivement) l’année, le mois et le jour de la date à reconstituer.
La fonction DateSerial() retourne un Variant (Date) qui correspond à l’année, le mois et le jour passés en argument. Voici sa syntaxe :
DateSerial(annee, mois, jour)
Où annee, mois et jour sont (respectivement) l’année, le mois et le jour de la date à reconstituer.
La fonction TimeSerial() retourne un Variant (Date) qui correspond aux heures, minutes et secondes passées en argument. Voici sa syntaxe :
TimeSerial(heures, minutes, secondes)
Où heures, minutes et secondes sont (respectivement) les heures, les minutes et les secondes de l’heure à reconstituer.
Exemples :
Debug.Print DateSerial(2018, 10, 25) Debug.Print TimeSerial(22, 15, 12)
Voici le résultat de ce code :
25/10/2018 22:15:12
DateValue Renvoie une valeur de type Variant (Date).
TimeValue Renvoie une valeur de type Variant (Date) contenant une heure.
Mise en forme
La fonction Format() permet de mettre en forme des dates. Elle retourne une valeur de type String. Voici sa syntaxe :
Format(expression, format)
Où expression est l’expression à mettre en forme et format est le format de mise en forme à appliquer à l’expression.
Voici quelques exemples :
Dim d As Date d = Date MsgBox Format(d, "dddd dd/mm/yyyy") MsgBox Format(d, "dd mmmm yyyy")
Voici le résultat de l’exécution :
Pour aller plus loin avec la fonction Format(), je vous suggère de consulter la page dédiée à cette fonction sur MSDN.