OVH Cloud OVH Cloud

Saisie d'une date dans un textbox

7 réponses
Avatar
Alain MENARD
Bonjour à tous,

J'ai une textbox à l'écrans dans laquelle l'utilisateur doit saisir une
date. Au lieu d'écrire une date, il met ??? parcequ'il ne connait pas la
date. Vous imaginez qu'à la sauvegarde dans le fichier Access, j'ai une
belle erreur puisque ce n'est pas une date.

Ce que je voudrais, c'est m'assurer que ce qui est écrit dans la zone soit
bien une date, pas n'importe quoi, et afficher un message "Saisie
incorrecte" si l'utilisateur met "Janvier" ou "????" par exemple.

Merci d'avance

--

Amicalement

Alain
Pour me joindre : amenard@vision-tech.fr

7 réponses

Avatar
bossun
utilise un DTPicker pour la saisie des dates. en plus c'est un format
date... t as rien besoin de convertir.





"Alain MENARD" a écrit dans le message de news:
3f057e76$0$13217$
Bonjour à tous,

J'ai une textbox à l'écrans dans laquelle l'utilisateur doit saisir une
date. Au lieu d'écrire une date, il met ??? parcequ'il ne connait pas la
date. Vous imaginez qu'à la sauvegarde dans le fichier Access, j'ai une
belle erreur puisque ce n'est pas une date.

Ce que je voudrais, c'est m'assurer que ce qui est écrit dans la zone soit
bien une date, pas n'importe quoi, et afficher un message "Saisie
incorrecte" si l'utilisateur met "Janvier" ou "????" par exemple.

Merci d'avance

--

Amicalement

Alain
Pour me joindre :




Avatar
bossun
tu regarde dans les options du controle pour enlever la case... je crois que
tu dois mettre checkbox à false




"Alain MENARD" a écrit dans le message de news:
3f058650$0$13187$
petit pb :

VB ne veut pas de :

OFormFiche.DateEmission.Value = "". Il me dit Impossible de mettre à Null


si
ChekBox is false. Je précise que je ne veux pas de case à cocher

--

Amicalement

Alain
Pour me joindre :

"bossun" a écrit dans le message de news:

> utilise un DTPicker pour la saisie des dates. en plus c'est un format
> date... t as rien besoin de convertir.
>
>
>
>
>
> "Alain MENARD" a écrit dans le message de news:
> 3f057e76$0$13217$
> > Bonjour à tous,
> >
> > J'ai une textbox à l'écrans dans laquelle l'utilisateur doit saisir


une
> > date. Au lieu d'écrire une date, il met ??? parcequ'il ne connait pas


la
> > date. Vous imaginez qu'à la sauvegarde dans le fichier Access, j'ai


une
> > belle erreur puisque ce n'est pas une date.
> >
> > Ce que je voudrais, c'est m'assurer que ce qui est écrit dans la zone
soit
> > bien une date, pas n'importe quoi, et afficher un message "Saisie
> > incorrecte" si l'utilisateur met "Janvier" ou "????" par exemple.
> >
> > Merci d'avance
> >
> > --
> >
> > Amicalement
> >
> > Alain
> > Pour me joindre :
> >
> >
>
>




Avatar
François Picalausa
Bonjour/soir,

Tu peux essayer comme ceci:
Private Sub Text1_Validate(Cancel As Boolean)
If Not IsDate(Text1.Text) And Text1.Text <> "" Then
MsgBox "Entrez une date ou rien si vous ne connaissez pas la date"
Cancel = True 'Tu espérais quitter, utilisateur? C'est raté!
Else
'Pour que la date soit toujours au même format
'(puisque "10 janvier 2003" est valide, sinon)
Text1.Text = Format(Text1.Text, "dd/mm/yyyy")
End If
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

Alain MENARD wrote:
Bonjour à tous,

J'ai une textbox à l'écrans dans laquelle l'utilisateur doit saisir
une date. Au lieu d'écrire une date, il met ??? parcequ'il ne connait
pas la date. Vous imaginez qu'à la sauvegarde dans le fichier Access,
j'ai une belle erreur puisque ce n'est pas une date.

Ce que je voudrais, c'est m'assurer que ce qui est écrit dans la zone
soit bien une date, pas n'importe quoi, et afficher un message "Saisie
incorrecte" si l'utilisateur met "Janvier" ou "????" par exemple.

Merci d'avance


Avatar
Zoury
Salut Alain! :O)

Voici un exemple que j'avais posté il y a quelques temps, je l'ai modifié afin
de faire en sorte que le bouton Cancel affiche "" dans le textbox. L'exemple
utilise la Calendar control, mais le principe pourrait surement fonctionner sur
les autres contrôles du genre.

'***
' Project1
' Ajouter la composante [Microsoft Calendar Control 10.0]
'---
' Form1
' 1 TextBox
' 1 CommandBouton
Option Explicit

Private Sub Form_Load()
SetControls
End Sub

Private Sub Command1_Click()

Dim dt As Date

If LenB(Text1.Text) > 0 Then
dt = GetDate(CDate(Text1.Text))
Else
dt = GetDate(Now)
End If

If dt = 0 Then
Text1.Text = ""
Else
Text1.Text = Format$(dt, "Long Date")
End If

End Sub

Private Function GetDate(Optional ByRef dt As Date = Empty) As Date
Form2.DateValue = dt
Form2.Show vbModal
GetDate = Form2.DateValue
Unload Form2
End Function

Private Sub SetControls()

Me.Move Me.Left, Me.Top, 4110, 915
Me.Caption = "Contrôle Calendar"

Command1.Move 3480, 120, 375, 255
Command1.Caption = "..."
Command1.Default = True

Text1.Move 120, 120, 3255, 285
Text1.Text = Format$(Now, "Long Date")
Text1.Locked = True

End Sub
'---
' Form2 -> KeyPreview = True
' 1 Calendar
' 2 CommandButtons
Option Explicit

Private m_dt As Date
Private m_cm As CloseMode

Public Enum CloseMode
cmCancel = 0
cmOk = 1
End Enum

Public Property Get DateValue() As Date
DateValue = m_dt
End Property

Public Property Let DateValue(ByRef dt As Date)
m_dt = dt
End Property

Public Property Get CloseMode() As CloseMode
CloseMode = m_cm
End Property

Private Sub Command1_Click()
m_dt = Calendar1.Value
m_cm = cmOk
Me.Hide
End Sub

Private Sub Command2_Click()
m_cm = cmCancel
m_dt = 0
Me.Hide
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyEscape Then
m_cm = cmCancel
m_dt = 0
Me.Hide
End If
End Sub

Private Sub Form_Load()
SetControls
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode <> vbFormCode Then
Cancel = 1
m_cm = cmCancel
m_dt = 0
Me.Hide
End If
End Sub

Private Sub SetControls()

Me.Move Me.Left, Me.Top, 4695, 4050
Me.Caption = "Choisissez une date"

Command2.Move 2160, 3120, 1095, 375
Command2.Caption = "&Cancel"

Command1.Move 3360, 3120, 1095, 375
Command1.Caption = "&Ok"
Command1.Default = True

Calendar1.Move 0, 120, 4575, 2895

Command1.TabIndex = 0
Command2.TabIndex = 0
Calendar1.TabIndex = 0

End Sub
'***

C'est bien ce que tu veux?

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Alain MENARD
Salut Zoury,

Merci de ce code. C'est super. Cependant je vais utiliser dan sun premier
temps celui de François qui résout mon pb premier, à savoir être sûr que la
saisie est une date. Je m'atais orienté pvers le datapicker mais je déteste
le fait qu'il affiche la dernière date estompé meme quand la zone est censée
etre vide.

J'enregistre ton code et te remercie.

Dites les gars, comment est on sur que l'on saisie un nombre dela meme
manière que le code de François :

Dans champ1 : une année (4 chiffres)

Dans Champ2 : un prix (avec des virgules éventuelles)


Merci énormément

--

Amicalement

Alain MENARD

Pour me joindre :

"Zoury" a écrit dans le message de news:
#
Salut Alain! :O)

Voici un exemple que j'avais posté il y a quelques temps, je l'ai modifié


afin
de faire en sorte que le bouton Cancel affiche "" dans le textbox.


L'exemple
utilise la Calendar control, mais le principe pourrait surement


fonctionner sur
les autres contrôles du genre.

'***
' Project1
' Ajouter la composante [Microsoft Calendar Control 10.0]
'---
' Form1
' 1 TextBox
' 1 CommandBouton
Option Explicit

Private Sub Form_Load()
SetControls
End Sub

Private Sub Command1_Click()

Dim dt As Date

If LenB(Text1.Text) > 0 Then
dt = GetDate(CDate(Text1.Text))
Else
dt = GetDate(Now)
End If

If dt = 0 Then
Text1.Text = ""
Else
Text1.Text = Format$(dt, "Long Date")
End If

End Sub

Private Function GetDate(Optional ByRef dt As Date = Empty) As Date
Form2.DateValue = dt
Form2.Show vbModal
GetDate = Form2.DateValue
Unload Form2
End Function

Private Sub SetControls()

Me.Move Me.Left, Me.Top, 4110, 915
Me.Caption = "Contrôle Calendar"

Command1.Move 3480, 120, 375, 255
Command1.Caption = "..."
Command1.Default = True

Text1.Move 120, 120, 3255, 285
Text1.Text = Format$(Now, "Long Date")
Text1.Locked = True

End Sub
'---
' Form2 -> KeyPreview = True
' 1 Calendar
' 2 CommandButtons
Option Explicit

Private m_dt As Date
Private m_cm As CloseMode

Public Enum CloseMode
cmCancel = 0
cmOk = 1
End Enum

Public Property Get DateValue() As Date
DateValue = m_dt
End Property

Public Property Let DateValue(ByRef dt As Date)
m_dt = dt
End Property

Public Property Get CloseMode() As CloseMode
CloseMode = m_cm
End Property

Private Sub Command1_Click()
m_dt = Calendar1.Value
m_cm = cmOk
Me.Hide
End Sub

Private Sub Command2_Click()
m_cm = cmCancel
m_dt = 0
Me.Hide
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyEscape Then
m_cm = cmCancel
m_dt = 0
Me.Hide
End If
End Sub

Private Sub Form_Load()
SetControls
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode <> vbFormCode Then
Cancel = 1
m_cm = cmCancel
m_dt = 0
Me.Hide
End If
End Sub

Private Sub SetControls()

Me.Move Me.Left, Me.Top, 4695, 4050
Me.Caption = "Choisissez une date"

Command2.Move 2160, 3120, 1095, 375
Command2.Caption = "&Cancel"

Command1.Move 3360, 3120, 1095, 375
Command1.Caption = "&Ok"
Command1.Default = True

Calendar1.Move 0, 120, 4575, 2895

Command1.TabIndex = 0
Command2.TabIndex = 0
Calendar1.TabIndex = 0

End Sub
'***

C'est bien ce que tu veux?

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/



Avatar
Alain MENARD
Merci Dominique,

C'est exactement comme me l'avais suggéré François

Merci encore


--

Amicalement

Alain MENARD

Pour me joindre :

"Dominique BUCCAFURRI" a écrit dans le
message de news:
Salut
tu peut utiliser la fonction IsDate
ex:
IF NOT ISDATE(TEXT1) THEN
msgbox "Saisie Incorrecte"
TEXT1.SETFOCUS
END IF

BYE

"Alain MENARD" a écrit dans le message de news:
3f057e76$0$13217$
> Bonjour à tous,
>
> J'ai une textbox à l'écrans dans laquelle l'utilisateur doit saisir une
> date. Au lieu d'écrire une date, il met ??? parcequ'il ne connait pas la
> date. Vous imaginez qu'à la sauvegarde dans le fichier Access, j'ai une
> belle erreur puisque ce n'est pas une date.
>
> Ce que je voudrais, c'est m'assurer que ce qui est écrit dans la zone


soit
> bien une date, pas n'importe quoi, et afficher un message "Saisie
> incorrecte" si l'utilisateur met "Janvier" ou "????" par exemple.
>
> Merci d'avance
>
> --
>
> Amicalement
>
> Alain
> Pour me joindre :
>
>




Avatar
Zoury
Salut Alain! :O)

: Dans champ1 : une année (4 chiffres)
: Dans Champ2 : un prix (avec des virgules éventuelles)

'***
Option Explicit

Private Sub Form_Load()

Debug.Print IsNumber("123,1238")
Debug.Print IsNumber("123.1238")
Debug.Print IsNumber(",1238")
Debug.Print IsNumber(".1238")
Debug.Print IsNumber("123,")
Debug.Print IsNumber("123.")

Debug.Print IsDigitsOnly("12345")
Debug.Print IsDigitsOnly("12A45")
Debug.Print IsDigitsOnly("")

End Sub

Private Function IsNumber(ByVal Value As String) As Boolean
If Value Like "[+-]*" Then Value = Mid$(Value, 2)
IsNumber = Not Value Like "*[!0-9" & GetDecimalNotation & "]*" And _
Not Value Like "*" & GetDecimalNotation & "*" &
GetDecimalNotation & "*" And _
Len(Value) > 0 And Value <> GetDecimalNotation And _
Value <> vbNullString And _
Not Value Like GetDecimalNotation & "*" And _
Not Value Like "*" & GetDecimalNotation
End Function

Private Function GetDecimalNotation() As String
GetDecimalNotation = Format$(0, ".")
End Function

Private Function IsDigitsOnly(ByRef s As String) As Boolean
IsDigitsOnly = (Not s Like "*[!0-9]*") And LenB(s) > 0
End Function
'***

Tu peux laisser tomber la première ligne de code de IsNumber si tu ne veux pas
de la validation pour le signe + ou -. Il ne te restera qu'à valider la longueur
de la chaine pour les années soit :

'***
Debug.Print Len(sAnnee) = 4 And IsDigitsOnly(sAnnee) ' Renvoi Vrai si valide
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/