Médiaforma

VBA Excel – Traitement des dates

Partagez cet article sur vos réseaux

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)

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)

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)

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)

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)

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)

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.

 
Commentaires

Aucun commentaire pour l'instant.

Laissez un commentaire