XL 2021 Teste si variable est bien une date? Simple? Ben ...

p'tit vieux

XLDnaute Occasionnel
Bonjour à tous,
je vous soumets un petit casse tête.
je veux tester si une variable nom typée est bien une date. J'entends déjà … "Facile!!"
Moi aussi je le croyais. Ben non!
Précision la variable peut contenir "n'importe quoi", une String ou une nombre ou d'autres choses

Exemples:
Une variable myVar = 6540
CDate(6540) = vrai
ET IsNumeric(myVar) = vrai
ET TypeName(myVar)= Integer

Pire ... myVar = "1,45" est une chaine
CDate(myVar) = vrai :eek:
ET IsNumeric(myVar) = vrai
ET TypeName(myVar)= String

J'arrête là …

Peut-être n'est ce pas possible d'en être sûr?
Quelqu'un a t'il une idée tester et savoir si j'ai vraiment une date je suis preneur. au moins limiter les risques d'erreur afin de faire le bon traitement derrière.
Par avance merci.
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Si vous voulez seulement savoir si un Variant est déjà du sous-type Date c'est plus simple :
VB:
If VarType(MyVar) = vbDate Then
en dehors de cette réponse
pour Excel une date est la représentation d'une valeur numérique (N° de série)

Au niveau feuille de calcul :
  • "By Design" lors d'un saisie, Excel utilise une pseudo "IA" qui selon la présence de certains séparateurs et mots-clés reconnait un format de date et transforme immédiatement, sans aucune intervention de l'utilisateur et à son insu, en N° de série.(valeur interne, l'affichage reste inchangé)
  • Toute autre saisie non reconnue est considérée comme texte
    MOIS sans accent, >12
    Jour >31 , date inexistante (29/02/2023)
  • A Tout nombre Positif et inferieur à 2958465 il peut alors être appliqué un format de date conforme aux options choisies sous Excel et Windows
  • Date allant du 1/01/1900 au 31/12/9999
Via VBA :
  • Correction du bug 29/02/1900
  • A Tout nombre compris entre -657434 et 2958465 il peut alors être appliqué un format de date conforme aux options choisies sous Excel et Windows
  • Date allant du 1/01/0100 au 31/12/9999
1712358516063.png
 

p'tit vieux

XLDnaute Occasionnel
Bonsour®

en dehors de cette réponse
pour Excel une date est la représentation d'une valeur numérique (N° de série)

Au niveau feuille de calcul :
  • "By Design" lors d'un saisie, Excel utilise une pseudo "IA" qui selon la présence de certains séparateurs et mots-clés reconnait un format de date et transforme immédiatement, sans aucune intervention de l'utilisateur et à son insu, en N° de série.(valeur interne, l'affichage reste inchangé)
  • Toute autre saisie non reconnue est considérée comme texte
    MOIS sans accent, >12
    Jour >31 , date inexistante (29/02/2023)
  • A Tout nombre Positif et inferieur à 2958465 il peut alors être appliqué un format de date conforme aux options choisies sous Excel et Windows
  • Date allant du 1/01/1900 au 31/12/9999
Via VBA :
  • Correction du bug 29/02/1900
  • A Tout nombre compris entre -657434 et 2958465 il peut alors être appliqué un format de date conforme aux options choisies sous Excel et Windows
  • Date allant du 1/01/0100 au 31/12/9999
Regarde la pièce jointe 1194374
Bonjour Modeste
Désolé de vous répondre avec retard.
Merci pour les infos sur les limites des valeurs. Je suis moins bête.😊
Je vais voir si cela m'aide. à éviter les confusions.
Merci encore
 

p'tit vieux

XLDnaute Occasionnel
Bon j'en suis arrivé à cette conclusion temporaire
Dranreb à raison l'utilisation de VarType filtre déjà bien.
En complétant le VarType avec::
- un ou 2 Like du genre
VB:
 Like "*#[/, -]#*[/, -]##*"
Même si ce n'est pas du 100%, cela devrait déjà éliminer 99,xx% des risques de confusion.

Encore merci à tous pour vos réponses.
… Le gagnant est 🎺 … moi. Grâce à vous 😁

PS:
Pour répondre a DranReb qui a demandé si je lisais des Ranges …

Range("c1").Text, Range("c1").Value, Range("c1").Value2
12/01/2024 12/01/2024 45303

La solution est soit de ne lire que la propriété Text et/ou Value de la Range afin d'éviter la confusion car Value2 renvoie toujours un nombre.
Donc pas de souci dans ces cas là.
J'ai tendance à lire Value2 qui serait "un poil" plus rapide (à ce qu'il parait). Ce n'ai pas forcément une bonne idée.
 
Dernière édition:

Statistiques des forums

Discussions
315 094
Messages
2 116 144
Membres
112 669
dernier inscrit
Guigui2502