En VBA, manipuler une date paraît simple… jusqu’au moment où l’on veut l’afficher correctement. Entre jj/mm/aaaa, mm-dd-yyyy, l’heure qui s’invite sans prévenir et les différences de formats selon la machine, on peut vite perdre patience. Bonne nouvelle : en VBA, il existe plusieurs façons de convertir et formater une date proprement, sans y passer la journée.
Si vous automatisez Excel avec des macros, vous allez forcément croiser ce sujet. Afficher une date dans une boîte de message, écrire une date dans une cellule, générer un nom de fichier avec la date du jour, comparer des dates ou transformer une valeur texte en vraie date… tout cela passe par une bonne maîtrise du format de date en VBA.
Comprendre comment VBA gère les dates
Avant de parler format, il faut comprendre un point essentiel : en VBA, une date n’est pas juste du texte joliment présenté. C’est une valeur numérique stockée sous forme de type Date. Cela signifie que VBA peut additionner, soustraire, comparer et convertir les dates sans difficulté, tant que la valeur est bien reconnue comme une date.
Par exemple, si vous écrivez :
Dim maDate As Date
maDate = #12/25/2025#
VBA comprend qu’il s’agit d’une date. En revanche, si vous manipulez une chaîne de caractères comme "25/12/2025", ce n’est pas encore une vraie date pour VBA. C’est juste du texte. Et là, tout dépendra de la conversion.
Le piège classique ? Croire qu’une date affichée d’une certaine manière est forcément stockée de la même façon. En réalité, le format concerne l’affichage, pas la valeur elle-même.
La fonction Format en VBA pour afficher une date
La fonction la plus utile pour formater une date en VBA, c’est Format. Elle permet de transformer l’affichage d’une date selon le modèle que vous voulez.
Exemple simple :
Dim maDate As Date
maDate = Date
MsgBox Format(maDate, "dd/mm/yyyy")
Si la date du jour est le 7 juin 2026, la boîte de message affichera :
07/06/2026
Le second argument de Format est la chaîne de format. C’est elle qui dicte l’apparence finale de la date.
Quelques formats très utilisés :
"dd/mm/yyyy": date classique en français"dd/mm/yy": date sur 2 chiffres pour l’année"dddd dd mmmm yyyy": jour de la semaine + date complète"mm/dd/yyyy": format souvent utilisé dans les fichiers internationaux"yyyy-mm-dd": format ISO, très pratique pour trier et nommer des fichiers
Exemple avec le jour en toutes lettres :
MsgBox Format(Date, "dddd dd mmmm yyyy")
Ce code peut afficher quelque chose comme :
lundi 07 juin 2026
Plutôt sympa, non ? Et surtout très lisible pour un utilisateur.
Afficher une date dans une cellule Excel avec VBA
Quand on écrit une date dans une cellule, il y a deux niveaux à distinguer :
- la valeur de la cellule
- le format d’affichage de la cellule
Vous pouvez écrire une vraie date dans une cellule, puis imposer un affichage spécifique.
Exemple :
Range("A1").Value = Date
Range("A1").NumberFormat = "dd/mm/yyyy"
Ici, la cellule A1 contient bien une date, et son affichage est forcé au format français.
Attention à ne pas confondre avec :
Range("A1").Value = Format(Date, "dd/mm/yyyy")
Dans ce cas, vous écrivez du texte dans la cellule, pas une vraie date. Cela peut sembler pratique, mais ce n’est pas idéal si vous voulez ensuite trier, filtrer ou faire des calculs. Excel préfère largement une vraie date bien stockée qu’un texte déguisé en date.
En pratique, retenez cette règle simple : pour les calculs, gardez une vraie date. Le format ne sert qu’à l’affichage.
Convertir une chaîne en date avec CDate
Souvent, on récupère une date sous forme de texte. Par exemple depuis une cellule, un formulaire ou un fichier texte. Pour que VBA la comprenne comme une date, vous pouvez utiliser CDate.
Exemple :
Dim texteDate As String
Dim vraieDate As Date
texteDate = "25/12/2025"
vraieDate = CDate(texteDate)
MsgBox Format(vraieDate, "dddd dd mmmm yyyy")
Si la chaîne est bien reconnue, VBA convertira le texte en date exploitable.
Mais attention : CDate dépend des paramètres régionaux de votre système. Autrement dit, "01/02/2025" peut être interprété comme le 1er février ou le 2 janvier selon le contexte. C’est le genre de détail qui transforme une macro simple en petite énigme administrative.
Quand vous avez un doute, privilégiez des formats non ambigus, par exemple :
yyyy-mm-dddd-mmm-yyyy- ou une construction explicite avec
DateSerial
Créer une date de façon fiable avec DateSerial
Si vous voulez construire une date sans ambiguïté, DateSerial est une excellente option. Vous lui donnez l’année, le mois et le jour, et VBA construit la date correspondante.
Exemple :
Dim maDate As Date
maDate = DateSerial(2025, 12, 25)
MsgBox Format(maDate, "dd/mm/yyyy")
Résultat : 25/12/2025
Pourquoi c’est pratique ? Parce que vous évitez les problèmes de lecture liés aux formats texte. Vous dites à VBA exactement quoi construire, point final.
Autre avantage : DateSerial gère aussi les dépassements. Par exemple, DateSerial(2025, 13, 1) devient automatiquement une date du mois suivant. C’est utile dans certains calculs, même si cela mérite d’être utilisé avec prudence.
Les formats de date VBA les plus utiles au quotidien
VBA accepte une large variété de formats. Voici quelques modèles très pratiques selon les besoins :
"dd/mm/yyyy": parfait pour l’usage français classique"dd/mm/yy": plus compact, mais moins explicite"yyyy-mm-dd": idéal pour le tri alphabétique et les noms de fichiers"dd mmmm yyyy": lisible et élégant, avec le mois en toutes lettres"dddd dd mmmm yyyy": très complet, pour des rapports ou des mails automatisés"hh:mm": pour afficher l’heure"dd/mm/yyyy hh:mm": pour une date avec heure
Exemple avec date et heure :
MsgBox Format(Now, "dd/mm/yyyy hh:mm")
Si vous générez des rapports ou des exports, cette forme est souvent la plus pratique. Elle évite le flou du type “ce fichier date de quand, déjà ?”.
Afficher uniquement le jour, le mois ou l’année
Il arrive qu’on ne veuille pas une date complète, mais seulement une partie. Bonne nouvelle : VBA permet d’extraire facilement le jour, le mois et l’année.
Exemple :
Dim maDate As Date
maDate = Date
MsgBox Day(maDate)
MsgBox Month(maDate)
MsgBox Year(maDate)
Ces fonctions renvoient respectivement :
- le numéro du jour
- le numéro du mois
- l’année
Très utile si vous devez créer une logique conditionnelle, par exemple tester si une date tombe en fin de mois, ou afficher un message différent selon la période.
Vous pouvez aussi reconstruire une date à partir de ces morceaux avec DateSerial. Par exemple, pour afficher uniquement le mois et l’année :
MsgBox Format(DateSerial(Year(Date), Month(Date), 1), "mmmm yyyy")
Résultat possible : juin 2026
Gérer les dates dans les noms de fichiers
Quand on automatise Excel, il y a un cas très courant : générer un nom de fichier avec la date du jour. C’est simple, propre, et ça évite d’écraser un document précédent par accident.
Exemple :
Dim nomFichier As String
nomFichier = "Rapport_" & Format(Date, "yyyy-mm-dd") & ".xlsx"
Le résultat sera quelque chose comme :
Rapport_2026-06-07.xlsx
Pourquoi utiliser yyyy-mm-dd ? Parce que ce format se trie naturellement par ordre chronologique. En revanche, un format comme 07-06-2026 peut vite devenir moins pratique si vous devez classer une longue série de fichiers.
C’est l’un de ces petits détails qui font gagner du temps sur le long terme. Et en automatisation, le temps gagné n’est jamais un détail.
Les erreurs fréquentes avec les dates en VBA
La date est un sujet simple en apparence, mais quelques erreurs reviennent souvent. Les connaître vous évitera pas mal de frustration.
- Utiliser Format pour stocker une date : cela transforme la date en texte
- Oublier les paramètres régionaux : une date texte peut être mal interprétée selon la machine
- Afficher une date sans format explicite : vous dépendez alors du paramétrage d’Excel ou de Windows
- Comparer du texte à des dates : comparez toujours des valeurs de type Date si possible
- Utiliser des dates ambiguës : par exemple
01/02/2025sans préciser le contexte
Un bon réflexe consiste à toujours séparer :
- la valeur de la date
- son affichage
Cette discipline évite énormément de bugs silencieux. Et les bugs silencieux sont les pires : ils ne crient pas, ils se contentent de produire un résultat faux avec beaucoup de confiance.
Exemple complet : convertir, formater et afficher une date
Voici un petit exemple VBA qui illustre plusieurs usages à la fois :
Sub AfficherDate() Dim texteDate As String Dim maDate As Date
texteDate = "25/12/2025" maDate = CDate(texteDate)
Range("A1").Value = maDate Range("A1").NumberFormat = "dddd dd mmmm yyyy"
MsgBox "Date enregistrée : " & Format(maDate, "dd/mm/yyyy")End Sub
Ce script fait trois choses :
- il convertit un texte en vraie date
- il écrit cette date dans une cellule
- il l’affiche dans une boîte de message avec un format clair
On voit bien la logique : CDate pour convertir, NumberFormat pour l’affichage dans Excel, et Format pour l’affichage dans le code ou dans une MsgBox.
Quelques bonnes pratiques à garder sous le coude
Pour travailler sereinement avec les dates en VBA, voici les habitudes les plus utiles :
- utilisez
DateSerialquand vous créez une date de zéro - utilisez
CDateseulement si la chaîne source est fiable - formatez les dates avec
Formatpour les afficher, pas pour les stocker - gardez les dates au format Date dans les cellules si vous devez les exploiter ensuite
- privilégiez un format sans ambiguïté comme
yyyy-mm-ddpour les fichiers et exports
Avec ces réflexes, vous éviterez la plupart des pièges classiques et vos macros seront beaucoup plus robustes. Et entre nous, une macro qui gère bien les dates, c’est déjà une macro qui inspire confiance.
Si vous débutez en VBA, retenez cette idée simple : la vraie puissance ne vient pas seulement de la conversion d’une date, mais du bon choix entre valeur, conversion et affichage. C’est ce trio qui fait la différence entre un script fragile et une automatisation propre.
