Le type de données VBA Date
Les variables de type Date sont stockées sous la forme de nombres à virgule flottante de 64 bits (8 octets) IEEE représentant des dates comprises entre le 1er janvier 100 et le 31 décembre 9999, et des heures allant de 0:00:00 à 23:59:59. Toute valeur de littéral date peut être attribuée à une variable de type Date. Les littéraux date doivent être délimités par le signe #, par exemple #January 1, 1993#
ou #1 Jan 93#
.
Les variables de type Date affichent les dates au format de date abrégé reconnu par votre ordinateur. Les heures s’affichent au format horaire (plage de 12 ou 24 heures) défini dans votre ordinateur.
Lorsque d’autres types de données numériques sont convertis en données de type Date, les valeurs situées à gauche du séparateur décimal représentent la date, tandis que celles situées à droite correspondent à l’heure. Minuit est représenté par 0 et midi par 0,5. Les nombres entiers négatifs représentent des dates antérieures au 30 décembre 1899.
- Le codage interne de la date Excel est un nombre réel double dont l’unité est le jour et les fractions des heures, minutes, secondes, etc…
- La valeur référence
2
correspond au 1er janvier 1900 (voir liens référencés 2 et 3 ci-dessous). Il est souvent mentionné que1
est la valeur de référence mais cela n’est que partiellement exact et ne satisfait qu’Excel et d’anciens logiciels. Cela ne satisfait en aucun cas les interactions avec d’autres logiciels ou références de temps comme EPOCH et d’autres. Ce défaut d’Excel n’a jamais été corrigé et ne le sera probablement jamais (voir lien référencé 2). - Dans la pratique, le calendrier Excel sans erreur comprend les valeurs de date
>=61
(1er mars 1901 00:00:00) et<2958466
(31 décembre 9999 24:00:00).
La fonction VBA Format(expr, format, …)
Renvoie une valeur de type Variant (String) contenant une expression formatée en fonction des instructions contenues dans l’expression de mise en forme.
Syntaxe
Format(expression[, format[, firstdayofweek[, firstweekofyear]]])
La syntaxe de la fonction Format comprend les éléments suivants :
Élément | Description |
---|---|
expression | Toute expression valide. |
format | Facultatif. Expression de mise en forme valide, nommée ou définie par l’utilisateur. |
firstdayofweek | Facultatif. Constante indiquant le premier jour de la semaine. |
firstweekofyear | Facultatif. Constante indiquant la première semaine de l’année. |
- La fonction est sans erreur, y compris depuis la valeur de référence
2
(Excel 2010 et probablement toutes les versions). - Le formatage de dates Excel le plus complet est
aaaa-mm-jj hh:mm:ss.000
. - Excel ne prend pas en compte les TimeZone, ni les heures d’été et d’hiver.
- Il est toutefois intéressant de noter que la référence
2
pour la date du1er janvier 1900
autorise le calcul relatif de TimeZone aux limites de+/- 24 heures (1 jour)
. - Les valeurs de dates
>=0
et<1
peuvent être assimilées à des heures>=#00:00:00#
et<#24:00:00#
. - Le formatage pour afficher l’heure est
hh:mm:ss
ouhh:mm:ss.000
ou encore d’autres variantes.
La fonction VBA CDate(expr)
La fonction ci-dessous convertit une expression en un type de données spécifique.
Syntaxe
CDate(expression)
L’argument expression peut être n’importe quelle expression de chaîne ou expression numérique.
Types renvoyés
Le nom de la fonction détermine le type renvoyé, comme le montre le tableau suivant :
Fonction | Type renvoyé | Plage de valeurs de l’argument expression |
---|---|---|
CDate | Date | Toute expression de date valide. |
Utilisez la fonction IsDate pour déterminer si la valeur de l’argument date peut être convertie en date ou en heure. La fonction CDate reconnaît les littéraux date et heure ainsi que certains nombres appartenant à la plage de dates autorisées. Lors de la conversion d’un nombre en date, la partie entière du nombre est convertie en date. Si le nombre comprend une partie décimale, celle-ci est convertie en heures, exprimées en partant de minuit.
La fonction CDate reconnaît les formats de date définis dans les paramètres régionaux de votre système. L’ordre des jours, mois et années risque de ne pouvoir être défini si les données sont fournies dans un format différent des paramètres de date reconnus. En outre, les formats de date complets précisant le jour de la semaine ne sont pas reconnus.
Pour des raisons de compatibilité avec les versions antérieures de Visual Basic, il existe une fonction CVDate, dont la syntaxe est identique à celle de la fonction Cdate. Cependant, la fonction CVDate renvoie une donnée de type Variant et de sous-type Date et non une véritable donnée de type Date. Dans la mesure où il existe désormais un type Date intrinsèque, la fonction CVDate n’est plus nécessaire. On obtient le même résultat en convertissant une expression en donnée de type Date, puis en l’affectant à une donnée de type Variant. Cette technique est cohérente avec la conversion des autres types intrinsèques dans le sous-type Variant équivalent.
- La valeur expression peut satisfaire à de nombreux critères d’analyse (parsing).
- La fonction CDate n’est exacte que pour les dates
>=#1.3.1900#
(1er mars 1900).
Liens externes
- Feuille Excel d’étude DateTime: DateTime_2017-08-02.xlsm
- Confusion Excel pour l’année 1900: Microsoft – Excel suppose à tort que l’année 1900 est une année bissextile
- Différences entre Excel pour Windows ou Macintosh: EPFL – Problème de dates dans Excel danger!
- Calcul des années bissextiles: Vikidia – Année bissextile
- Calcul des années bissextiles: Wikipédia – Année bissextile
- Calcul des années bissextiles: Wikipédia – Année séculaire bissextile
Addendum
2017-12-29: Les fonctions VBA CDate et Format convertissent correctement les dates <#1.3.1900#
. En fait, c’est le formatage des dates affichées dans les cellules du tableur Excel qui est incorrect. La valeur 2 correspond correctement à la date #1.1.1900#
.