Excel · VBA · A3iformations

Les dates et les heures en VBA : Date, Now, DateSerial, DateAdd, Year, Hour, IsDate et CDate

Planning de formation, échéances, durées, horodatage : les dates sont partout dans les macros. VBA les range dans le type Date, qui est en réalité un nombre. La partie entière compte les jours depuis le 30/12/1899, la partie décimale représente l’heure en fraction de journée. Comprendre ce principe suffit à tout calculer : ajouter des jours, mesurer une durée, extraire l’année ou l’heure. Chaque simulateur applique les règles de VBA avec les paramètres régionaux français. Voir aussi les chaînes de caractères et les opérateurs.

Dim d As DateDéclarer
Date, Now, DateSerialObtenir, construire
+, −, DateAdd, DateDiffCalculer
Year, Hour, IsDate, CDateExtraire, convertir
1

Déclarer une variable Date

On déclare une date avec Dim d As Date. La variable peut recevoir une date, une heure ou les deux. Une valeur écrite directement dans le code se place entre dièses : #10/5/2026#. Attention, entre dièses VBA lit toujours le format américain mois/jour/année, quels que soient les paramètres de Windows. Une variable Date non initialisée vaut 0, c’est-à-dire le 30/12/1899 à 00:00:00.

Simulateur : ce que contient vraiment une variable Date
Fenêtre d’exécution

#5/10/2026#Ce n’est pas le 5 octobre mais le 10 mai. L’éditeur VBA réécrit d’ailleurs les dates littérales au format américain.
Lire une celluled = Range("B2").Value : une cellule qui contient une vraie date Excel se range directement dans une variable Date, sans conversion.
2

Les fonctions Date() et Now()

Date renvoie la date du jour, à minuit (partie décimale nulle). Now renvoie la date et l’heure, Time l’heure seule. Ces fonctions n’ont pas d’argument : l’éditeur VBA retire d’ailleurs les parenthèses. Elles lisent l’horloge du PC à chaque appel. Timer, qui compte les secondes depuis minuit, sert à mesurer la durée d’une macro.

Simulateur : l’horloge de votre ordinateur, vue par VBA
HorodaterRange("C2").Value = Now enregistre l’instant d’une saisie ; Date suffit pour une date de facture.
Mesurer une duréet = Timer au début, puis Debug.Print Timer - t à la fin : le temps d’exécution en secondes.
Date contre NowIf d = Date Then fonctionne, mais If d = Now Then est presque toujours faux : Now contient l’heure à la seconde près.
3

Les fonctions DateSerial() et TimeSerial()

DateSerial(année, mois, jour) construit une date à partir de trois nombres, sans aucune ambiguïté de format : c’est la méthode recommandée dans le code. Les valeurs hors limites sont reportées : le mois 13 donne janvier de l’année suivante, le jour 0 le dernier jour du mois précédent. TimeSerial(heure, minute, seconde) fait de même pour une heure.

Simulateur 1 : DateSerial
Fenêtre d’exécution

Simulateur 2 : TimeSerial
Fenêtre d’exécution

Fin de moisDateSerial(Year(d), Month(d) + 1, 0) renvoie le dernier jour du mois de d, qu’il compte 28, 29, 30 ou 31 jours.
Premier du moisDateSerial(Year(d), Month(d), 1) : pratique pour un filtre ou un tableau mensuel.
4

Addition et soustraction de dates

Puisqu’une date est un nombre de jours, on calcule avec les opérateurs habituels. d + 30 donne la date 30 jours plus tard, d - 7 une semaine plus tôt. La différence de deux dates d2 - d1 est un nombre de jours, décimal si les heures diffèrent. Pour des heures, ajoutez une fraction de jour : 1 heure = 1/24, ou mieux TimeSerial(1, 0, 0).

Simulateur : calculer avec deux dates
Nombre de jours entiersInt(d2) - Int(d1) ignore les heures ; sinon 23 h d’écart à cheval sur deux jours donnent 0,96 jour.
Ajouter des mois ?Les mois et les années n’ont pas une longueur fixe : utilisez DateAdd (séquence 5) plutôt que + 30 ou + 365.
5

DateAdd() et DateDiff()

DateAdd(intervalle, nombre, date) ajoute (ou retire, avec un nombre négatif) des années, trimestres, mois, semaines, jours, heures, minutes ou secondes. L’intervalle est un texte : "yyyy", "q", "m", "ww", "d", "h", "n" (minutes), "s". Quand le jour n’existe pas dans le mois d’arrivée, DateAdd s’arrête au dernier jour du mois. DateDiff(intervalle, date1, date2) fait l’inverse : elle compte les intervalles entre deux dates.

Simulateur 1 : DateAdd
Fenêtre d’exécution

Simulateur 2 : DateDiff et les limites franchies
« m » ou « n » ?"m" désigne les mois, "n" les minutes. C’est l’erreur la plus fréquente avec DateAdd et DateDiff.
DateDiff et les âgesDateDiff(« yyyy ») compte les changements d’année, pas les années complètes : du 31/12 au 01/01, le résultat vaut 1.
6

Extraire une partie d’une date : Year(), Month(), Day(), Weekday()

Year(d), Month(d) et Day(d) renvoient l’année, le mois (1 à 12) et le jour (1 à 31). Weekday(d) renvoie le jour de la semaine sous forme de nombre de 1 à 7. Par défaut, la semaine commence le dimanche : dimanche = 1, lundi = 2. Ajoutez vbMonday en second argument pour que lundi = 1. MonthName et WeekdayName donnent les noms en toutes lettres.

Simulateur : décomposer une date (cliquez sur un jour)

    

Week-endIf Weekday(d, vbMonday) > 5 Then : vrai le samedi et le dimanche.
FormatFormat(d, "dddd d mmmm yyyy") affiche « lundi 5 octobre 2026 » ; le résultat est un texte, pas une date.
7

Extraire une partie d’une heure : Hour(), Minute() et Second()

Hour(t) renvoie l’heure (0 à 23), Minute(t) les minutes et Second(t) les secondes (0 à 59). Elles acceptent une heure seule ou une date complète : Hour(Now) donne l’heure actuelle. Pour convertir une heure en minutes depuis minuit, on combine : Hour(t) * 60 + Minute(t).

Simulateur : décomposer une heure

    

8

IsDate(), DateValue(), TimeValue() et CDate()

Une date saisie dans une InputBox ou importée d’un fichier texte est d’abord un texte. IsDate(texte) indique si VBA sait le convertir. CDate(texte) le convertit en date complète, DateValue n’en garde que la date et TimeValue que l’heure. La conversion suit les paramètres régionaux : en France, « 05/10/2026 » est le 5 octobre. Un texte non reconnu provoque l’erreur 13 : testez IsDate avant de convertir.

Simulateur : convertir un texte en date

Saisie contrôléeDo / s = InputBox("Date de début ?") / Loop Until IsDate(s), puis d = CDate(s).
Date au format texteUne colonne importée en texte se trie et se compare mal. Cells(i, 1).Value = CDate(Cells(i, 1).Value) la transforme en vraie date.
Exercice : planifier des sessions de formation

Classeur d’exercice (Énoncé et Corrigé)

  1. Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » dans un module standard.
  2. Feuille Sessions : exécutez Convertir (IsDate, CDate) puis Planifier (DateAdd, Weekday, DateSerial).
  3. Exécutez Durees (soustraction, Hour, Minute) et Horodater (Now).
  4. Répondez aux questions de la feuille Contrôle.
A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français