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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 😱
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.
 
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
 
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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour