J'invite les utilisateurs d'une application =E0 saisir des=20
dates dans plusieurs textbox. Afin de v=E9rifier qu'il=20
s'agit bien d'une date, j'utilise la s=E9quence de code=20
suivante :
Private Sub CommandButton1_Click()
mydate =3D TextBox1.Value
mycheck =3D IsDate(mydate)
Select Case mycheck
Case False
MsgBox "date non valide"
Case True
ActiveCell.Value =3D CDate(TextBox1.Value)
End Select
End Sub
Cette fa=E7on de proc=E9der semble convenir. Je me suis=20
toutefois aper=E7u avec stupeur que des saisies telles=20
que "01/13/2000" n'=E9taient pas invalid=E9es ; pire, la=20
valeur plac=E9e dans la cellule inverse le jour et le "faux=20
mois" pour donner en r=E9sultat "13/01/2000", ce qui est=20
extr=EAmement f=E2cheux en terme de fiabilit=E9 des donn=E9es.
Question : =E0 quoi est-ce d=FB ? Mon code est-il mauvais ? En=20
ce cas quelle alternative possible ?
Oserais-je solliciter une r=E9ponse dans la journ=E9e sans=20
=EAtre insolent ? S=E9rieusement, m=EAme si c'est une question=20
r=E9currente, j'ai vraiment besoin d'une r=E9ponse urgente.=20
Merci beaucoup.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
ashto
bonjour,
il se trouve que les dates se comportent de cette façon dans vba parce que la date est interprétée au format anglo-saxon : mois/jour/année quand çà l'arrange... que tu saisisses 13/01/2003 ou 01/13/2003, vba va s'arranger pour convertir la date au mieux ; dans les 2 cas, il va considérer que c'est le 13 janvier 2003.
pour que ton test soit correct, il te faut vérifier "à la main" que les chiffres saisis entre les 2 shlash sont compris entre 1 et 12.
ce que tu récupère dans la TextBox est du texte (type de données String), donc tu peux faire :
If IsDate(mydate) Then ' je trouve les positions des slash qui entourent le mois PosSlash1 = InStr(mydate, "/") PosSlash2 = InStr(PosSlash1 + 1, mydate, "/") ' je compare le mois que me renvoit la fonction Month avec ce que j'ai entre les 2 slash If Month(mydate) <> CInt(Mid(mydate, PosSlash1 + 1, PosSlash2 - PosSlash1 - 1)) Then MsgBox "date non valide" Else ActiveCell.Value = Format$(mydate, "dd/mm/yyyy") End If End If
il y a peut-être plus simple mais pour l'instant je vois pas...
à bientôt
ashto
-----Message d'origine----- Salut,
J'invite les utilisateurs d'une application à saisir des dates dans plusieurs textbox. Afin de vérifier qu'il s'agit bien d'une date, j'utilise la séquence de code suivante :
Private Sub CommandButton1_Click()
mydate = TextBox1.Value mycheck = IsDate(mydate) Select Case mycheck Case False MsgBox "date non valide" Case True ActiveCell.Value = CDate(TextBox1.Value) End Select
End Sub
Cette façon de procéder semble convenir. Je me suis toutefois aperçu avec stupeur que des saisies telles que "01/13/2000" n'étaient pas invalidées ; pire, la valeur placée dans la cellule inverse le jour et le "faux
mois" pour donner en résultat "13/01/2000", ce qui est extrêmement fâcheux en terme de fiabilité des données.
Question : à quoi est-ce dû ? Mon code est-il mauvais ? En
ce cas quelle alternative possible ?
Oserais-je solliciter une réponse dans la journée sans être insolent ? Sérieusement, même si c'est une question récurrente, j'ai vraiment besoin d'une réponse urgente. Merci beaucoup. .
bonjour,
il se trouve que les dates se comportent de cette façon
dans vba parce que la date est interprétée au format
anglo-saxon : mois/jour/année quand çà l'arrange... que
tu saisisses 13/01/2003 ou 01/13/2003, vba va s'arranger
pour convertir la date au mieux ; dans les 2 cas, il va
considérer que c'est le 13 janvier 2003.
pour que ton test soit correct, il te faut vérifier "à la
main" que les chiffres saisis entre les 2 shlash sont
compris entre 1 et 12.
ce que tu récupère dans la TextBox est du texte (type de
données String), donc tu peux faire :
If IsDate(mydate) Then
' je trouve les positions des slash qui entourent le
mois
PosSlash1 = InStr(mydate, "/")
PosSlash2 = InStr(PosSlash1 + 1, mydate, "/")
' je compare le mois que me renvoit la fonction Month
avec ce que j'ai entre les 2 slash
If Month(mydate) <> CInt(Mid(mydate, PosSlash1 + 1,
PosSlash2 - PosSlash1 - 1)) Then
MsgBox "date non valide"
Else
ActiveCell.Value = Format$(mydate, "dd/mm/yyyy")
End If
End If
il y a peut-être plus simple mais pour l'instant je vois
pas...
à bientôt
ashto
-----Message d'origine-----
Salut,
J'invite les utilisateurs d'une application à saisir des
dates dans plusieurs textbox. Afin de vérifier qu'il
s'agit bien d'une date, j'utilise la séquence de code
suivante :
Private Sub CommandButton1_Click()
mydate = TextBox1.Value
mycheck = IsDate(mydate)
Select Case mycheck
Case False
MsgBox "date non valide"
Case True
ActiveCell.Value = CDate(TextBox1.Value)
End Select
End Sub
Cette façon de procéder semble convenir. Je me suis
toutefois aperçu avec stupeur que des saisies telles
que "01/13/2000" n'étaient pas invalidées ; pire, la
valeur placée dans la cellule inverse le jour et
le "faux
mois" pour donner en résultat "13/01/2000", ce qui est
extrêmement fâcheux en terme de fiabilité des données.
Question : à quoi est-ce dû ? Mon code est-il mauvais ?
En
ce cas quelle alternative possible ?
Oserais-je solliciter une réponse dans la journée sans
être insolent ? Sérieusement, même si c'est une question
récurrente, j'ai vraiment besoin d'une réponse urgente.
Merci beaucoup.
.
il se trouve que les dates se comportent de cette façon dans vba parce que la date est interprétée au format anglo-saxon : mois/jour/année quand çà l'arrange... que tu saisisses 13/01/2003 ou 01/13/2003, vba va s'arranger pour convertir la date au mieux ; dans les 2 cas, il va considérer que c'est le 13 janvier 2003.
pour que ton test soit correct, il te faut vérifier "à la main" que les chiffres saisis entre les 2 shlash sont compris entre 1 et 12.
ce que tu récupère dans la TextBox est du texte (type de données String), donc tu peux faire :
If IsDate(mydate) Then ' je trouve les positions des slash qui entourent le mois PosSlash1 = InStr(mydate, "/") PosSlash2 = InStr(PosSlash1 + 1, mydate, "/") ' je compare le mois que me renvoit la fonction Month avec ce que j'ai entre les 2 slash If Month(mydate) <> CInt(Mid(mydate, PosSlash1 + 1, PosSlash2 - PosSlash1 - 1)) Then MsgBox "date non valide" Else ActiveCell.Value = Format$(mydate, "dd/mm/yyyy") End If End If
il y a peut-être plus simple mais pour l'instant je vois pas...
à bientôt
ashto
-----Message d'origine----- Salut,
J'invite les utilisateurs d'une application à saisir des dates dans plusieurs textbox. Afin de vérifier qu'il s'agit bien d'une date, j'utilise la séquence de code suivante :
Private Sub CommandButton1_Click()
mydate = TextBox1.Value mycheck = IsDate(mydate) Select Case mycheck Case False MsgBox "date non valide" Case True ActiveCell.Value = CDate(TextBox1.Value) End Select
End Sub
Cette façon de procéder semble convenir. Je me suis toutefois aperçu avec stupeur que des saisies telles que "01/13/2000" n'étaient pas invalidées ; pire, la valeur placée dans la cellule inverse le jour et le "faux
mois" pour donner en résultat "13/01/2000", ce qui est extrêmement fâcheux en terme de fiabilité des données.
Question : à quoi est-ce dû ? Mon code est-il mauvais ? En
ce cas quelle alternative possible ?
Oserais-je solliciter une réponse dans la journée sans être insolent ? Sérieusement, même si c'est une question récurrente, j'ai vraiment besoin d'une réponse urgente. Merci beaucoup. .
Pampa-sr
Je me doutais qu'il y avait une histoire de format là- dessous. Par contre, je trouve complètement taré qu'Excel interprète la date saisie comme ça lui chante. Du reste, je ne voispas bien la signification de ta dernière remarque à propos du fait que le 13/01/2003 et le 01/13/2001 sont une seule et même date : le 13/01/2001 ???
Personnellement, j'ai opté pour la solution suivante :
mydate = TextBox1.Value mycheck = IsDate(mydate) Select Case mycheck Case False MsgBox "date non valide"
Case True Dim anystring, mystr anystring = TextBox1.Value mystrmois = Mid(anystring, 4, 2) Select Case mystrmois Case Is > 12 MsgBox "mois incorrect" End Select
ActiveCell.Value = CDate(TextBox1.Value) End Select
A priori, si j'ai bien saisi, la seule chose à contrôler, c'est que le mois ne soit pas supérieur à 12 puisque les autres possibilités d'erreur semblent détectées par la portion de code précédente.
Qu'en penses-tu ?
@+
-----Message d'origine----- bonjour,
il se trouve que les dates se comportent de cette façon dans vba parce que la date est interprétée au format anglo-saxon : mois/jour/année quand çà l'arrange... que tu saisisses 13/01/2003 ou 01/13/2003, vba va s'arranger pour convertir la date au mieux ; dans les 2 cas, il va considérer que c'est le 13 janvier 2003.
pour que ton test soit correct, il te faut vérifier "à la main" que les chiffres saisis entre les 2 shlash sont compris entre 1 et 12.
ce que tu récupère dans la TextBox est du texte (type de données String), donc tu peux faire :
If IsDate(mydate) Then ' je trouve les positions des slash qui entourent le mois PosSlash1 = InStr(mydate, "/") PosSlash2 = InStr(PosSlash1 + 1, mydate, "/") ' je compare le mois que me renvoit la fonction Month avec ce que j'ai entre les 2 slash If Month(mydate) <> CInt(Mid(mydate, PosSlash1 + 1, PosSlash2 - PosSlash1 - 1)) Then MsgBox "date non valide" Else ActiveCell.Value = Format$(mydate, "dd/mm/yyyy") End If End If
il y a peut-être plus simple mais pour l'instant je vois pas...
à bientôt
ashto
-----Message d'origine----- Salut,
J'invite les utilisateurs d'une application à saisir des dates dans plusieurs textbox. Afin de vérifier qu'il s'agit bien d'une date, j'utilise la séquence de code suivante :
Private Sub CommandButton1_Click()
mydate = TextBox1.Value mycheck = IsDate(mydate) Select Case mycheck Case False MsgBox "date non valide" Case True ActiveCell.Value = CDate(TextBox1.Value) End Select
End Sub
Cette façon de procéder semble convenir. Je me suis toutefois aperçu avec stupeur que des saisies telles que "01/13/2000" n'étaient pas invalidées ; pire, la valeur placée dans la cellule inverse le jour et le "faux
mois" pour donner en résultat "13/01/2000", ce qui est extrêmement fâcheux en terme de fiabilité des données.
Question : à quoi est-ce dû ? Mon code est-il mauvais ? En
ce cas quelle alternative possible ?
Oserais-je solliciter une réponse dans la journée sans être insolent ? Sérieusement, même si c'est une question récurrente, j'ai vraiment besoin d'une réponse urgente. Merci beaucoup. .
.
Je me doutais qu'il y avait une histoire de format là-
dessous. Par contre, je trouve complètement taré qu'Excel
interprète la date saisie comme ça lui chante. Du reste,
je ne voispas bien la signification de ta dernière
remarque à propos du fait que le 13/01/2003 et le
01/13/2001 sont une seule et même date : le 13/01/2001 ???
Personnellement, j'ai opté pour la solution suivante :
mydate = TextBox1.Value
mycheck = IsDate(mydate)
Select Case mycheck
Case False
MsgBox "date non valide"
Case True
Dim anystring, mystr
anystring = TextBox1.Value
mystrmois = Mid(anystring, 4, 2)
Select Case mystrmois
Case Is > 12
MsgBox "mois incorrect"
End Select
ActiveCell.Value = CDate(TextBox1.Value)
End Select
A priori, si j'ai bien saisi, la seule chose à contrôler,
c'est que le mois ne soit pas supérieur à 12 puisque les
autres possibilités d'erreur semblent détectées par la
portion de code précédente.
Qu'en penses-tu ?
@+
-----Message d'origine-----
bonjour,
il se trouve que les dates se comportent de cette façon
dans vba parce que la date est interprétée au format
anglo-saxon : mois/jour/année quand çà l'arrange... que
tu saisisses 13/01/2003 ou 01/13/2003, vba va s'arranger
pour convertir la date au mieux ; dans les 2 cas, il va
considérer que c'est le 13 janvier 2003.
pour que ton test soit correct, il te faut vérifier "à la
main" que les chiffres saisis entre les 2 shlash sont
compris entre 1 et 12.
ce que tu récupère dans la TextBox est du texte (type de
données String), donc tu peux faire :
If IsDate(mydate) Then
' je trouve les positions des slash qui entourent le
mois
PosSlash1 = InStr(mydate, "/")
PosSlash2 = InStr(PosSlash1 + 1, mydate, "/")
' je compare le mois que me renvoit la fonction Month
avec ce que j'ai entre les 2 slash
If Month(mydate) <> CInt(Mid(mydate, PosSlash1 + 1,
PosSlash2 - PosSlash1 - 1)) Then
MsgBox "date non valide"
Else
ActiveCell.Value = Format$(mydate, "dd/mm/yyyy")
End If
End If
il y a peut-être plus simple mais pour l'instant je vois
pas...
à bientôt
ashto
-----Message d'origine-----
Salut,
J'invite les utilisateurs d'une application à saisir des
dates dans plusieurs textbox. Afin de vérifier qu'il
s'agit bien d'une date, j'utilise la séquence de code
suivante :
Private Sub CommandButton1_Click()
mydate = TextBox1.Value
mycheck = IsDate(mydate)
Select Case mycheck
Case False
MsgBox "date non valide"
Case True
ActiveCell.Value = CDate(TextBox1.Value)
End Select
End Sub
Cette façon de procéder semble convenir. Je me suis
toutefois aperçu avec stupeur que des saisies telles
que "01/13/2000" n'étaient pas invalidées ; pire, la
valeur placée dans la cellule inverse le jour et
le "faux
mois" pour donner en résultat "13/01/2000", ce qui est
extrêmement fâcheux en terme de fiabilité des données.
Question : à quoi est-ce dû ? Mon code est-il mauvais ?
En
ce cas quelle alternative possible ?
Oserais-je solliciter une réponse dans la journée sans
être insolent ? Sérieusement, même si c'est une question
récurrente, j'ai vraiment besoin d'une réponse urgente.
Merci beaucoup.
.
Je me doutais qu'il y avait une histoire de format là- dessous. Par contre, je trouve complètement taré qu'Excel interprète la date saisie comme ça lui chante. Du reste, je ne voispas bien la signification de ta dernière remarque à propos du fait que le 13/01/2003 et le 01/13/2001 sont une seule et même date : le 13/01/2001 ???
Personnellement, j'ai opté pour la solution suivante :
mydate = TextBox1.Value mycheck = IsDate(mydate) Select Case mycheck Case False MsgBox "date non valide"
Case True Dim anystring, mystr anystring = TextBox1.Value mystrmois = Mid(anystring, 4, 2) Select Case mystrmois Case Is > 12 MsgBox "mois incorrect" End Select
ActiveCell.Value = CDate(TextBox1.Value) End Select
A priori, si j'ai bien saisi, la seule chose à contrôler, c'est que le mois ne soit pas supérieur à 12 puisque les autres possibilités d'erreur semblent détectées par la portion de code précédente.
Qu'en penses-tu ?
@+
-----Message d'origine----- bonjour,
il se trouve que les dates se comportent de cette façon dans vba parce que la date est interprétée au format anglo-saxon : mois/jour/année quand çà l'arrange... que tu saisisses 13/01/2003 ou 01/13/2003, vba va s'arranger pour convertir la date au mieux ; dans les 2 cas, il va considérer que c'est le 13 janvier 2003.
pour que ton test soit correct, il te faut vérifier "à la main" que les chiffres saisis entre les 2 shlash sont compris entre 1 et 12.
ce que tu récupère dans la TextBox est du texte (type de données String), donc tu peux faire :
If IsDate(mydate) Then ' je trouve les positions des slash qui entourent le mois PosSlash1 = InStr(mydate, "/") PosSlash2 = InStr(PosSlash1 + 1, mydate, "/") ' je compare le mois que me renvoit la fonction Month avec ce que j'ai entre les 2 slash If Month(mydate) <> CInt(Mid(mydate, PosSlash1 + 1, PosSlash2 - PosSlash1 - 1)) Then MsgBox "date non valide" Else ActiveCell.Value = Format$(mydate, "dd/mm/yyyy") End If End If
il y a peut-être plus simple mais pour l'instant je vois pas...
à bientôt
ashto
-----Message d'origine----- Salut,
J'invite les utilisateurs d'une application à saisir des dates dans plusieurs textbox. Afin de vérifier qu'il s'agit bien d'une date, j'utilise la séquence de code suivante :
Private Sub CommandButton1_Click()
mydate = TextBox1.Value mycheck = IsDate(mydate) Select Case mycheck Case False MsgBox "date non valide" Case True ActiveCell.Value = CDate(TextBox1.Value) End Select
End Sub
Cette façon de procéder semble convenir. Je me suis toutefois aperçu avec stupeur que des saisies telles que "01/13/2000" n'étaient pas invalidées ; pire, la valeur placée dans la cellule inverse le jour et le "faux
mois" pour donner en résultat "13/01/2000", ce qui est extrêmement fâcheux en terme de fiabilité des données.
Question : à quoi est-ce dû ? Mon code est-il mauvais ? En
ce cas quelle alternative possible ?
Oserais-je solliciter une réponse dans la journée sans être insolent ? Sérieusement, même si c'est une question récurrente, j'ai vraiment besoin d'une réponse urgente. Merci beaucoup. .