OVH Cloud OVH Cloud

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

3 réponses

1 2
Avatar
Geo

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 ?


S'il y a un slash dans str_mot, Instr(str_mot, "/") renvoie le numéro
du caractère correspondant.
s'il n'y en a pas, il renvoie 0.
Donc le then ne se fait que s'il y a un slash dans le mot.
Si on veut vérifier qu'il y en a deux, il faut faire deux instr en
cascade:

i = InStr(str_mot, "/")
if i > 0 Then ' premier /
if (InStr(i+1,str_mot, "/") > 0) and IsDate(str_mot) then ' deuxième
/
str_mot = Format(CDate(str_mot), "mm/dd/yyyy")
End If
End If

--
A+

Avatar
Geo

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."


Faute de frappe ?
ou encore un coup des américains qui ont le génie de mettre les dates
dans n'importe quel ordre.
C'est d'autant plus cocasse que ça contredit l'aide de Vb 2005 qui, à
ma connaissance, tourne sous Windows.

--
A+



Avatar
Fred
Bonjour Geo,

Merci beaucoup pour toutes test explications.

Bonne journée,

FRED.

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


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 ?


S'il y a un slash dans str_mot, Instr(str_mot, "/") renvoie le numéro du
caractère correspondant.
s'il n'y en a pas, il renvoie 0.
Donc le then ne se fait que s'il y a un slash dans le mot.
Si on veut vérifier qu'il y en a deux, il faut faire deux instr en
cascade:

i = InStr(str_mot, "/")
if i > 0 Then ' premier /
if (InStr(i+1,str_mot, "/") > 0) and IsDate(str_mot) then ' deuxième /
str_mot = Format(CDate(str_mot), "mm/dd/yyyy")
End If
End If

--
A+





1 2