Excel Mania

Date vba format : convertir et afficher une date en VBA

Date vba format : convertir et afficher une date en VBA

Date vba format : convertir et afficher une date en VBA

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 :

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 :

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 :

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 :

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 :

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.

Un bon réflexe consiste à toujours séparer :

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 :

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 :

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.

Quitter la version mobile