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...
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+
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
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+
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+
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.
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+
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+
Bonjour Geo,
Merci beaucoup pour toutes test explications.
Bonne journée,
FRED.
"Geo" <Geo@sans.pub> a écrit dans le message de news:
mn.1c177d6ba12dda37.41568@sans.pub...
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
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