Format de saisie pour date
Résolu
TéddyChnouki_54
Messages postés
38
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai un formulaire visual basic 2017 avec une quantité de dates à saisir.
Je souhaiterai savoir si il existe un format pour saisir les dates sans être obligé de saisir les "/", en fait mettre automatiquement le "/" comme pour un formulaire sans access ??.
Je vous remercie par avance.
Cordialement
Philippe./.
J'ai un formulaire visual basic 2017 avec une quantité de dates à saisir.
Je souhaiterai savoir si il existe un format pour saisir les dates sans être obligé de saisir les "/", en fait mettre automatiquement le "/" comme pour un formulaire sans access ??.
Je vous remercie par avance.
Cordialement
Philippe./.
A voir également:
- Format de saisie pour date
- Format epub - Guide
- Format factory - Télécharger - Conversion & Codecs
- Format dat - Guide
- Hp usb disk storage format tool - Télécharger - Stockage
- Format apfs - Guide
3 réponses
Bonsoir,
pour l'interpréter, j'ai codé ça vite fait, je ne suis pas sûr que c'est à toute épreuve
Ce qui est sûr c'est que certain textes sans séparateur pouvant être interprétés de plusieurs façons le seront par la 1ere possible selon mon algorithme.
Par exemple 10318 c'est 10/03/2018 est pas 01/03/2018 ni 10/03/0018.
pour l'interpréter, j'ai codé ça vite fait, je ne suis pas sûr que c'est à toute épreuve
Private Function EstCeUneDate(ByVal Texte As String, <System.Runtime.InteropServices.Out()> ByRef LaDate As Date) As Boolean
'on essaye directement d'en faire une date
If Date.TryParse(Texte, LaDate) Then
Return True
End If
'Si ça ne marche pas, on essaye d'interpreter
LaDate = Date.MinValue 'il faut une valeur par défaut
'il faut trouver un nombre entre 1 et 31, avec un séparateur ( /\-_) en option, suivi d'un nombre entre 1 et 12, avec le même séparateur en option, suivi de 2 à 4 chiffres
'Pour cela j'utilise une regex http://regexstorm.net/tester?p=%28%3f%3cjour%3e%28%3f%3a3%5b01%5d%29%7c%28%3f%3a%5b12%5d%5cd%29%7c%28%3f%3a0%3f%5b1-9%5d%29%29%28%5b+%2f%5c%5c-_%5d%29%3f%28%3f%3cmoi%3e%28%3f%3a1%5b0-2%5d%29%7c%28%3f%3a0%3f%5b1-9%5d%29%29%5c1%3f%28%3f%3cannee%3e%5cd%7b2%2c4%7d%29&i=12%2f12%2f5678%0d%0a32%2f10%2f5678%0d%0a10318
Dim pattern As String = "^(?<jour>(?:3[01])|(?:[12]\d)|(?:0?[1-9]))([ /\\-_])?(?<moi>(?:1[0-2])|(?:0?[1-9]))\1?(?<annee>\d{2,4})$"
Dim m As Match = Regex.Match(Texte, pattern)
If m.Success Then
'le modèle est bon, reste à savoir si ça fait une date, le 31 avril n'existe pas, le 29 février ça dépend etc...
'on commence par faire des nombres avec les morceaux de texte
Dim jour As Integer = Convert.ToInt32(m.Groups("jour").Value)
Dim moi As Integer = Convert.ToInt32(m.Groups("moi").Value)
Dim annee As Integer = Convert.ToInt32(m.Groups("annee").Value)
'si l'année est sur 2 chiffres, arbitrairement je choisi que 00 à 29 c'est 2000 à 2029, et 30 à 99, c'est 1930 à 1999
If annee < 30 Then
annee += 2000
ElseIf annee < 100 Then
annee += 1900
End If
'enfin on essaye d'en faire une date
Return Date.TryParse(String.Format("{0}/{1}/{2}", jour, moi, annee),LaDate)
End If
Return False
End Function
Private Sub textBox3_Validating(ByVal sender As Object, ByVal e As CancelEventArgs)
Dim laDate As Date
If EstCeUneDate(textBox3.Text, laDate) Then
textBox3.Text = laDate.ToShortDateString() 'on affiche la date remise en forme
Else
MessageBox.Show("Ceci n'est pas une date valide")
e.Cancel = True
End If
End Sub
Ce qui est sûr c'est que certain textes sans séparateur pouvant être interprétés de plusieurs façons le seront par la 1ere possible selon mon algorithme.
Par exemple 10318 c'est 10/03/2018 est pas 01/03/2018 ni 10/03/0018.