Format de saisie pour date [Résolu/Fermé]

Signaler
Messages postés
35
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
28 mai 2020
-
Messages postés
14854
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
-
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./.

3 réponses

Messages postés
14854
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
590
Bonsoir,

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.

1
Merci

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

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
49
Date d'inscription
samedi 21 mai 2016
Statut
Membre
Dernière intervention
28 mai 2020

tu peut faire le Type = Date normalement
Messages postés
35
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
28 mai 2020

bonjour, ok merci
Messages postés
14854
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
590
Bonsoir,
tu peux utiliser un MaskedTextBox.

Mais ce qui est plus "user friendly" c'est d'écrire un interpréteur qui serait reconnaitre que
010118 équivaut à 01012018 équivaut à 01-01-18 etc... et vaut 01/01/2018
Messages postés
35
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
28 mai 2020

Bonjour, ok merci, je vais regarder ça ce week-end
Messages postés
14854
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
590
Si tu optes pour l'interpréteur, je te donnerais des pistes.