Analyser une date à partir d'une chaîne de caractères

Visual Basic for Applications:
Analyser une date à partir d'une chaîne de caractères

Comment faire :

VBA offre une méthode directe pour analyser une chaîne en une date à l’aide de la fonction CDate ou de la fonction DateValue. Cependant, il est crucial que la chaîne soit dans un format de date reconnaissable.

Voici un exemple simple utilisant CDate :

Sub ParseDateUsingCDate()
    Dim dateString As String
    Dim parsedDate As Date
    
    dateString = "2023-04-01"
    parsedDate = CDate(dateString)
    
    Debug.Print "Date analysée : "; parsedDate
End Sub

Si vous exécutez ce code, le résultat dans la fenêtre Immédiate (accessible via Ctrl+G dans l’éditeur VBA) serait :

Date analysée : 4/1/2023

Vous pouvez également utiliser la fonction DateValue, qui est plus spécifique aux dates (ignorant la partie heure) :

Sub ParseDateUsingDateValue()
    Dim dateString As String
    Dim parsedDate As Date
    
    dateString = "April 1, 2023"
    parsedDate = DateValue(dateString)
    
    Debug.Print "Date analysée avec DateValue : "; parsedDate
End Sub

L’exemple de sortie pour cela afficherait de manière similaire dans la fenêtre Immédiate :

Date analysée avec DateValue : 4/1/2023

Gardez à l’esprit que la réussite de l’analyse dépend de la conformité du format de la date de la chaîne avec les paramètres système ou de l’application.

Exploration approfondie

À l’interne, lorsque VBA analyse une chaîne en une date, il utilise les paramètres régionaux du système d’exploitation Windows pour interpréter le format de la date. Cela est crucial à comprendre car une chaîne de date qui s’analyse parfaitement sur un système peut causer une erreur sur un autre s’ils utilisent des paramètres de date/heure différents.

Historiquement, la gestion des dates a été une source courante de bogues dans les applications, en particulier celles qui sont utilisées à l’international. Cette dépendance aux paramètres régionaux dans VBA est la raison pour laquelle certains pourraient envisager des alternatives comme le format ISO 8601 (par exemple, “AAAA-MM-JJ”) pour une représentation et une analyse de date non ambiguës à travers différents systèmes. Malheureusement, VBA ne prend pas en charge nativement l’ISO 8601, et une analyse manuelle serait nécessaire pour une conformité stricte.

Pour une analyse de date complexe au-delà de ce que CDate ou DateValue peut gérer, ou pour garantir une analyse cohérente indépendamment des paramètres de localité du système, les programmeurs peuvent recourir à des fonctions d’analyse personnalisées. Celles-ci pourraient impliquer de diviser la chaîne de date en composants (année, mois, jour) et de construire une date en utilisant la fonction DateSerial. D’autres pourraient choisir des langages ou des bibliothèques plus puissants conçus avec l’internationalisation à l’esprit pour de telles tâches.