Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction If IsDate

13 réponses
Avatar
Fred
Bonjour,

J'ai une macro qui boucle dans un document pour convertir toutes les dates
en dates US:
If IsDate(str_mot) Then str_mot = Format(CDate(str_mot), "mm/dd/yyyy").
Si la macro voit des chiffres, elle ne fait donc rien en principe.
Mais si dans le document, j'ai un chiffre compris entre 0 et 23 inclus, elle
le transforme en date: 12/30/1899...

Quelqu'un a-t-il une idée?

Merci.

FRED

10 réponses

1 2
Avatar
Geo

Bonjour,

J'ai une macro qui boucle dans un document pour convertir toutes les dates en dates US:
If IsDate(str_mot) Then str_mot = Format(CDate(str_mot), "mm/dd/yyyy").
Si la macro voit des chiffres, elle ne fait donc rien en principe.
Mais si dans le document, j'ai un chiffre compris entre 0 et 23 inclus, elle le
transforme en date: 12/30/1899...

Quelqu'un a-t-il une idée?
Oui.


La notion de date en vba est très large, elle inclut également la
notion d'heure.
IsDate(8:15) retourne : vrai.
D'ailleurs Time est une date.

Pourquoi format renvoie cette date ?
Dans Excel on sait que les dates sont définies à partir du 1er janvier
1900.
le 30/12/1899 n'en est pas loin, il y a sans doute un rapport.
Dans votre cas vous pourriez vérifier la longueur du mot ou la présence
de /.
D'ailleurs si vous avez une date (ou pire un nombre qui n'a rien à voir
avec une date) du genre 12/2006, le résultat ne correspond sans doute
pas à votre attente.
Puisque vous passez en présentation américaine, essayez avec les
dimensions comme 1/4 (de pouce).

--
A+

Avatar
Fred
Ce qui m'étonne, c'est que je ne vois pas de différence entre 23 et 24...

FRED.


"Geo" a écrit dans le message de news:


Bonjour,

J'ai une macro qui boucle dans un document pour convertir toutes les
dates en dates US:
If IsDate(str_mot) Then str_mot = Format(CDate(str_mot), "mm/dd/yyyy").
Si la macro voit des chiffres, elle ne fait donc rien en principe.
Mais si dans le document, j'ai un chiffre compris entre 0 et 23 inclus,
elle le transforme en date: 12/30/1899...

Quelqu'un a-t-il une idée?
Oui.


La notion de date en vba est très large, elle inclut également la notion
d'heure.
IsDate(8:15) retourne : vrai.
D'ailleurs Time est une date.

Pourquoi format renvoie cette date ?
Dans Excel on sait que les dates sont définies à partir du 1er janvier
1900.
le 30/12/1899 n'en est pas loin, il y a sans doute un rapport.
Dans votre cas vous pourriez vérifier la longueur du mot ou la présence de
/.
D'ailleurs si vous avez une date (ou pire un nombre qui n'a rien à voir
avec une date) du genre 12/2006, le résultat ne correspond sans doute pas
à votre attente.
Puisque vous passez en présentation américaine, essayez avec les
dimensions comme 1/4 (de pouce).

--
A+





Avatar
Circé
Bonjour Geo et Fred,

Geo avait écrit le 02/11/2006 :

Dans Excel on sait que les dates sont définies à partir du 1er janvier 1900.
le 30/12/1899 n'en est pas loin, il y a sans doute un rapport.


Il me semble que Word est beaucoup plus large, puis les dates sont
reconnues à partir du 1er janvier de l'an 100 !!!!!

Il faut dire que Word peut servir à faire des traités d'histoire...
Excel est beaucoup plus limité avec ses petites cases !!! :D)))

Circé

Avatar
Serge
"Circé" a écrit dans le message de news:

Bonjour Geo et Fred,

Geo avait écrit le 02/11/2006 :

Dans Excel on sait que les dates sont définies à partir du 1er
janvier 1900.
le 30/12/1899 n'en est pas loin, il y a sans doute un rapport.


Il me semble que Word est beaucoup plus large, puis les dates sont
reconnues à partir du 1er janvier de l'an 100 !!!!!

Il faut dire que Word peut servir à faire des traités d'histoire...
Excel est beaucoup plus limité avec ses petites cases !!! :D)))

Circé




Bonjour,

Surpris par cette affirmation, aucun problème pour afficher
31 décembre 1899 dans Excel 2000 !

Euh une question d'historien amateur, pourquoi à partir de l'an 100 !

Je ne vois pas pourquoi je ne pourrais pas écrire "en l'an 25" sous Word
?

Le seul que je n'ai pas le droit d'écrire (mais je le pourrais) c'est
l'an zéro car inexistant !

Serge


Avatar
Geo

Ce qui m'étonne, c'est que je ne vois pas de différence entre 23 et 24...


Comme dirait Circé on pourrait mettre ça dans les bogues.
Vous parliez de 0 à 23 au départ, ce qui orientait vers des heures,
mais avec un résultat qui ne vous convient pas à juste titre.

L'ennui pour vous, c'est que vous risquez de trouver d'autres cas de
traduction de dates à tort. Il serait peut-être astucieux de faire une
trace sur un fichier pour faire un contrôle.

--
A+

Avatar
Geo

Surpris par cette affirmation, aucun problème pour afficher
31 décembre 1899 dans Excel 2000 !


C'est l'aide qui le dit.
êtes-vous certains d'être en format date.
Essayez de changer le format pour lui faire afficher 31/12/1899
D'ailleurs si vous agrandissez votre colonne votre texte reste à
gauche.
J'ai demandé à Excel de calculer la veille du 1/1/1900 et il m'a donné
le 0/1/1900 :-)

Euh une question d'historien amateur, pourquoi à partir de l'an 100 !


Je n'ai pas trouvé cette information, mais c'est une conceté de
concepteur tout comme pour 1900.

Je ne vois pas pourquoi je ne pourrais pas écrire "en l'an 25" sous Word ?


Si, bien sûr, mais pas possible de faire des calculs sur les dates.

Le seul que je n'ai pas le droit d'écrire (mais je le pourrais) c'est l'an zéro car
inexistant !


Tout à fait, voici d'ailleurs la définition pour visual basic (extrait
de MSDN):
--------
Type de données date (Visual Basic)
Contient des valeurs sous la forme IEEE 64 bits (8 octets) qui
représentent des dates comprises entre le 1er janvier de l'année 1 et
le 31 décembre 9999 et des heures comprises entre 0:00:00 (minuit) et
23:59:59.9999999. Chaque incrément représente 100 nanosecondes du temps
écoulé depuis le 1er janvier de l'an 1 du calendrier grégorien. La
valeur maximale représente 100 nanosecondes avant le début du 1er
janvier de l'année 10 000.
-------

--
A+

Avatar
Fred
Bonjour,

Merci pour vos réponses.
Auriez-vous une petite ligne qui me permettrait, au dessus de celle posant
problème, de faire un test du genre "si inférieur à 24, ne fais rien"?

Merci.

FRED.


"Geo" a écrit dans le message de news:


Surpris par cette affirmation, aucun problème pour afficher
31 décembre 1899 dans Excel 2000 !


C'est l'aide qui le dit.
êtes-vous certains d'être en format date.
Essayez de changer le format pour lui faire afficher 31/12/1899
D'ailleurs si vous agrandissez votre colonne votre texte reste à gauche.
J'ai demandé à Excel de calculer la veille du 1/1/1900 et il m'a donné le
0/1/1900 :-)

Euh une question d'historien amateur, pourquoi à partir de l'an 100 !


Je n'ai pas trouvé cette information, mais c'est une conceté de concepteur
tout comme pour 1900.

Je ne vois pas pourquoi je ne pourrais pas écrire "en l'an 25" sous Word
?


Si, bien sûr, mais pas possible de faire des calculs sur les dates.

Le seul que je n'ai pas le droit d'écrire (mais je le pourrais) c'est
l'an zéro car inexistant !


Tout à fait, voici d'ailleurs la définition pour visual basic (extrait de
MSDN):
--------
Type de données date (Visual Basic)
Contient des valeurs sous la forme IEEE 64 bits (8 octets) qui
représentent des dates comprises entre le 1er janvier de l'année 1 et le
31 décembre 9999 et des heures comprises entre 0:00:00 (minuit) et
23:59:59.9999999. Chaque incrément représente 100 nanosecondes du temps
écoulé depuis le 1er janvier de l'an 1 du calendrier grégorien. La valeur
maximale représente 100 nanosecondes avant le début du 1er janvier de
l'année 10 000.
-------

--
A+





Avatar
Geo

Bonjour,

Merci pour vos réponses.
Auriez-vous une petite ligne qui me permettrait, au dessus de celle posant problème, de
faire un test du genre "si inférieur à 24, ne fais rien"?


Ce n'est pas mon programme, mais je conseillerais plutôt de tester la
longueur du mot pour éviter de convertir trop de données non
concernées.
Du genre :
if len(str_mot)> 6 then ' à ajuster
If IsDate(str_mot) Then
str_mot = Format(CDate(str_mot), "mm/dd/yyyy").
endif
endif

ou :
if instr(str_mot,"/") > 0 then ' vérifie qu'il y a un "/" dans le mot
If IsDate(str_mot) Then
str_mot = Format(CDate(str_mot), "mm/dd/yyyy").
endif
endif

En fait tout dépend de vos habitudes ou de vos règles.
Comme vous le faisiez remarquer, on peut écrire une date sous la forme
31 décembre 1899, là ça fait 3 mots éventuellement convertis.

Je viens d'essayer avec Word 2003, voici quelques résultats :
? isdate(21)
Faux
? isdate(31/12/2006)
Faux
? isdate("31/12/2006")
Vrai
? isdate("21")
Faux
? isdate("31 décembre 2006")
Vrai
? isdate("décembre 2006")
Vrai
? isdate(décembre)
Faux
? isdate("décembre")
Faux
? isdate("9:35")
Vrai
? isdate("9")
Faux
? isdate("3/8")
Vrai

Ce serait intéressant de voir si 2000, fait la même chose, mais 21 tout
seul n'est pas considéré comme date.

--
A+

Avatar
Fred
Génial, la fonction:
If InStr(str_mot, "/") > 0 Then ' vérifie qu'il y a un "/" dans le mot
If IsDate(str_mot) Then
str_mot = Format(CDate(str_mot), "mm/dd/yyyy")
End If
End If

A l'air de fonctionner parfaitement!
Peux-tu m'expliquer pourquoi > 0 ?

FRED



"Geo" a écrit dans le message de news:


Bonjour,

Merci pour vos réponses.
Auriez-vous une petite ligne qui me permettrait, au dessus de celle
posant problème, de faire un test du genre "si inférieur à 24, ne fais
rien"?


Ce n'est pas mon programme, mais je conseillerais plutôt de tester la
longueur du mot pour éviter de convertir trop de données non concernées.
Du genre :
if len(str_mot)> 6 then ' à ajuster
If IsDate(str_mot) Then
str_mot = Format(CDate(str_mot), "mm/dd/yyyy").
endif
endif

ou :
if instr(str_mot,"/") > 0 then ' vérifie qu'il y a un "/" dans le mot
If IsDate(str_mot) Then
str_mot = Format(CDate(str_mot), "mm/dd/yyyy").
endif
endif

En fait tout dépend de vos habitudes ou de vos règles.
Comme vous le faisiez remarquer, on peut écrire une date sous la forme 31
décembre 1899, là ça fait 3 mots éventuellement convertis.

Je viens d'essayer avec Word 2003, voici quelques résultats :
? isdate(21)
Faux
? isdate(31/12/2006)
Faux
? isdate("31/12/2006")
Vrai
? isdate("21")
Faux
? isdate("31 décembre 2006")
Vrai
? isdate("décembre 2006")
Vrai
? isdate(décembre)
Faux
? isdate("décembre")
Faux
? isdate("9:35")
Vrai
? isdate("9")
Faux
? isdate("3/8")
Vrai

Ce serait intéressant de voir si 2000, fait la même chose, mais 21 tout
seul n'est pas considéré comme date.

--
A+





Avatar
Circé
Bonjour à tous,

Euh une question d'historien amateur, pourquoi à partir de l'an 100 !


Je n'ai pas trouvé cette information, mais c'est une conceté de concepteur
tout comme pour 1900.

Je me souvenais avoir vu cette info quelque part, et je n'arrivais pas

à la retrouver... En fait, c'est tout simplement dans l'aide de Word,
sur la fonction IsDate, ça parle de Windows:

"Dans Microsoft Windows, la plage des dates valides s'étend du 1er
janvier 100 au 31 décembre 9999. Les plages varient en fonction des
systèmes d'exploitation."

Circé


1 2