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.
 

p'tit vieux

XLDnaute Occasionnel
Bonjour,

Pour Excel, 6540 et 1,45 sont bien des dates (26/1/1917 et 01/01/1900 10:48:00).
Il faudrait donc définir ce qui, pour toi, est une date ou non. ;)
C'est bien le problème. C'est que je ne le sais pas. Je reçois un tableau de valeurs nom typées que je dois traiter. Dans l'ensemble ça passe maïs parfois il y a ... Litige.
Et là ça peut être le bazar.
 

Dranreb

XLDnaute Barbatruc
Si c'est un tableau récupéré d'une Range.Value il doit être Variant().
Pour tester si une variable As String peut être convertie en Date, essayez ma proposition poste #4.
Le plus simple serait de joindre un classeur représentatif du problème que vous avez à résoudre, avec tous les cas possibles.
 

p'tit vieux

XLDnaute Occasionnel
Si c'est un tableau récupéré d'une Range.Value il doit être Variant().
Pour tester si une variable As String peut être convertie en Date, essayez ma proposition poste #4.
Le plus simple serait de joindre un classeur représentatif du problème que vous avez à résoudre, avec tous les cas possibles.
Merci Dan
Le tableau n'est pas forcément d'un Range.
Trop facile 😁
Le problème posé est:
Comment puis je, le mieux possible, faire la distinction en testant la valeur ou chaîne d'une variable alors que les tests "classique" (voir #1) prêtent à confusion.
Pour une chaine, Je ne parle pas de tests simple avec un Like ou RegEx mais une confusion comme dans l'exemple de post #1.

A mon avis, je crains qu'il ne soit pas possible d'éliminer totalement la "possible confusion". Pour l'instant je ne vois que l'obligation de faire un traitement, par exemple le cas Date, et de vérifier la cohérence du résultat. Si ce n'est pas cohérent je refais le traitement pour un autre cas de type de variable. En commençant par le plus spécifique vers le plus générique.

Demain (après midi) Je te peux faire un fichier mais comme ma question n'est pas spéciale à mon application car je crois que c'est un sujet que nous pouvons toujours rencontrer. Non?

Merci encore
A demain à tous.
 

Dranreb

XLDnaute Barbatruc
Enfin vous devriez réussir à vous en sortir en utilisant les fonctions permettant de vérifier la convertibilité d'une donnée d'un certain type en une d'un autre ainsi qu'avec l'opérateur Like pour tester la forme d'un String.
 

TooFatBoy

XLDnaute Barbatruc
Mais je voyais aussi et surtout ma question plus de façon générale que uniquement pour mon application.
Soit, mais comme expliqué plus haut 1,45 est une date pour Excel donc comment veux-tu, juste comme ça sans contexte, décider que pour toi ce n'en est pas une ? 🤔

Dans un certain contexte tu peux décider que toute valeur numérique non comprise dans une fourchette n'est pas une date.
Mais ça ne garantit pas qu'une valeur numérique comprise dans cette fourchette soit obligatoirement une date...
 

Statistiques des forums

Discussions
315 090
Messages
2 116 104
Membres
112 661
dernier inscrit
ceucri