Vidéo: Débuter avec Excel VBA | Tutoriel Excel - DE RIEN 2025
La fonction IsDate de VBA vous indique si une chaîne de texte peut être interprétée comme une date. Par exemple, toutes les expressions suivantes ont la valeur True:
IsDate ("5/25/2015") IsDate ("January 16") IsDate ("12-1") IsDate ("12/1/15") IsDate ("2/30") IsDate ("30/2")
Dans les deux derniers exemples, notez que IsDate n'est pas pointilleux sur l'ordre du jour et du mois. Ces deux chaînes peuvent être interprétées comme une date, donc IsDate renvoie True (quels que soient les paramètres de format de date de votre système).
Voici quelques informations provenant d'un article de support Microsoft:
Les fonctions de date VBA IsDate, Format, CDate et CVDate utilisent une fonction trouvée dans OLE Automation (OleAut32.dll). Cette fonction recherche tous les formats de date possibles en segmentant chacune des valeurs séparées dans la chaîne représentant la date et renvoie une valeur booléenne indiquant si l'entrée peut être représentée en tant que date.
Il est important de se souvenir de l'utilisation de la fonction pour interpréter une date qui contient une année à deux chiffres. Différents paramètres régionaux utilisent différents formats de date (jj / mm / aa, aa / mm / jj, " JJ MMM AA " , " AA MMM JJ " , et ainsi de suite) et donc la fonction essaie les chiffres dans toutes les positions jusqu'à ce que la fonction ait trouvé une date valide ou épuisé toutes les possibilités.
Tout simplement parce que IsDate reconnaît une chaîne comme une date ne signifie pas que la chaîne peut être convertie de manière fiable en une date. Dans certains cas, le résultat est ambigu. Par exemple, qu'en est-il de cette expression?
IsDate ("29-Feb-01")
29 février 2001 n'est pas une date valide. Cependant, cette expression renvoie True car le 1er février 1929 (et le 2 janvier 1929) sont des dates valides. De même que ces mêmes dates en 2029.
Une recherche de la documentation IsDate est apparue vide. Selon les tests, IsDate accepte l'un des caractères séparateurs suivants: une barre oblique (/), un trait d'union (-), une virgule (,), un point (.) Et un espace.
Par conséquent, les expressions suivantes toutes retournent True:
IsDate ("5,1") IsDate ("30 6") IsDate ("30, 6") IsDate ("1/2")
puis il y a cette anomalie: Les expressions suivantes retournent True:
IsDate ("5, 1. 5") IsDate ("5, 1. 05")
Cependant, inexplicitement, cette expression renvoie False:
IsDate ("5. 1. 2005")
Supposons que vous avez créé un UserForm avec un InputBox dans lequel l'utilisateur entre une date. Il devrait être clair qu'utiliser IsDate pour valider l'entrée n'est pas très fiable.
Les choses deviennent encore plus confuses lorsque vous vous rendez compte que IsDate couvre également les valeurs de temps. (Il n'existe aucune fonction IsTime correspondante.) Ainsi, les expressions suivantes toutes retournent True:
IsDate ("4: 45") IsDate ("4.45") IsDate ("4 45") IsDate ("4/45 ") IsDate (" 23: 59 ")
Ces expressions retournent False:
IsDate (" 4: 60 ") IsDate (" 24.45 ")
Il est important de préciser que IsDate ne fonctionne pas afficher toutes ces bizarreries lorsque vous transmettez un argument Range. Par exemple:
IsDate (Range ("A1"))
Il semble que IsDate soit parfaitement fiable pour identifier les cellules qui contiennent une date ou une heure. Il n'identifie pas, par exemple, une cellule contenant 5. 1 comme date. Si votre code doit déterminer si une chaîne peut être interprétée comme une date, la meilleure solution consiste à placer cette chaîne dans une cellule, puis à écrire du code pour vérifier le contenu de la cellule.
