Verifier une date! [Résolu]

Signaler
Messages postés
20
Date d'inscription
lundi 15 novembre 2004
Statut
Membre
Dernière intervention
2 mai 2005
-
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
-
Bonjour tt le monde! Merci d'avance!!!
jé formaté mon maskedbox1.text en cette format date "__/__/____" s il est vide ;
j aimerai faire une test de control pour ce text afin d avoir une date correcte du genre "01/03/2005" et evité des fautes comme "36/18/2005" .
merci pour votre aide !

6 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
27
100% d'accord avec CanisLupus.
on peut éviter le controle de numéricité avec Mask = " ##/##/#### "

Private Sub Command1_Click()
MsgBox "le controle de date donne: " & ControlDate(MaskEdBox1.Text)
End Sub


Private Function ControlDate(d As String) As Boolean
Dim s As String
s = Left$(d, 2)
If s < "01" Or s > "31" Then Exit Function
s = Mid$(d, 4, 2)
If s < "01" Or s > "12" Then Exit Function
s = Mid$(d, 7, 4)
'Limite inférieure et supérieure à déterminer si nécessaire
If s < "1980" Or s > "2099" Then Exit Function
If IsDate(d) Then ControlDate = True
End Function

Daniel
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Messages postés
3
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006

If isdate(maskedbox1.text) then ...
cela devrait suffir
Bon courage
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
27
ça évitera pas certaines dates farfelues comme 01/30/2005

Daniel
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
15
Et si tu utilisais un controle Calendar ? Avec ça, tu serais sùr que c'est bien une date qui est saisie.

Loup Gris
Messages postés
3
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006

OK, je corrige :
If isdate(format$(maskedbox1.text,"dd/MM/yyyy")) then ...

Personnellement, moins j'utilise de controles, mieux je me porte !
Thierry
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
15
Désolé de te contredire Thierry mais :
1 - ton dernier exemple ne marche pas mieux avec la date "farfelue" citée par Daniel.
2 - MaskEditBox est aussi un controle.

Maintenant, si on veut se servir absolument d'une MaskEditBox formatée comme précisé plus haut, alors il faut faire des tests du genre :

if cint(mid$(MaskEditBox.text,1,2))<1 or cint(mid$(MaskEditBox.text,1,2))>31 then pas un jour valide
if cint(mid$(MaskEditBox.text,4,2))<1 or cint(mid$(MaskEditBox.text,4,2))>12 then pas un mois valide

et ensuite seulement, on teste isnumeric(MaskEditBox.text).

Petite explik :
Avec option régionale française, en VB, il y a toujours des confusions entre les formats date anglo-saxon (mm/dd/yyyy) et français (dd/mm/yyyy). Sujet éternellement débattu dans les forums.
exemple : isnumeric("30/01/2005") et isnumeric("01/30/2005") renvoient vrai tous les 2. Et ce n'est pas format() qui va remettre tout dans l'ordre.

Personnellement, pour stocker des dates dans mes BDD, j'utilise un format texte de 8 caractères (yyyymmdd) ça facilite grandement les tris et il n'y a pas de confusion possible. Cela, je le reconnais, au prix d'une exécution un tout petit peu moins rapide mais bon, faut faire un choix.

Et, quand il s'agit d'une saisie, je pref le controle Calendar pour 2 raisons :
1 - l'utilisateur n'a qu'à cliquer (moins d'erreurs de saisie)
2 - gestion facilitée pour le programmeur
Conclusion : moins de stress pour tous.

Loup Gris