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.
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 dateet 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
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 dateet 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
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 …
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 Value2qui serait "un poil" plus rapide (à ce qu'il parait). Ce n'ai pas forcément une bonne idée.