Forcer une date au format jj/mm/aaaa dans un userform.

headshot

XLDnaute Nouveau
Bonjour, dans une appli excel j'ai crée un userform ou l'utilisateur doit saisir une date (et d'autre champs) puis lorsque qui valide les champs de l'userform sont reprit dans un tableau. Cependant j'aimérai obliger l'utilisateur à saisir la date sous la forme jj/mm/aaaa. Il faudrait un bout de code du type :

If datej = "jj/mm/aaaa" Then
goto End If
Else
MsgBox ("Vous devez saisir la date sous la forme jj/mm/aaaa")
Intit.SetFocus
Exit Sub
End If

Sauf que je connaît pas la fonction qui permet de reconnaître la date sous la forme jj/mm/aaaa

Merci.
 

Pierrot93

XLDnaute Barbatruc
Re : Forcer une date au format jj/mm/aaaa dans un userform.

Bonjour,

pour tester si une valeur est une date, tu peux essayer la fonction "isdate"... D'autre part, une petite recherche sur le forum te fournira divers exemples sur les contrôles de saisie...

bonne fin d'après midi
@+
 

Borismy

XLDnaute Occasionnel
Re : Forcer une date au format jj/mm/aaaa dans un userform.

Bonjour,

Un exemple (qui n'est pas de moi, on s'en serait douté :D)




Code:
Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
Valeur = Len(TextBox1)
If Valeur = 2 Or Valeur = 5 Then TextBox1 = TextBox1 & "/"
End Sub
'Ensuite pour vérifier que c'est bien une date qui a été saisie
Private Sub CommandButton1_Click()
If Not IsDate(TextBox1) Then
MsgBox "Format incorrect"
TextBox1 = ""
Exit Sub
Else
MsgBox "Format correct"
'...la suite de la procédure
End If
End Sub

Boris
 

GeoTrouvePas

XLDnaute Impliqué
Re : Forcer une date au format jj/mm/aaaa dans un userform.

Bonjour tout le monde headshot, Pierrot et Borismy !

J'ai récemment planché sur le sujet pour une application que je suis en train de développer.

Etant assez perfectionniste (de temps en temps), j'ai poussé le contrôle à l'extrême pour empécher de saisir n'importe quoi et n'afficher un message d'erreur qu'en dernier recours. Voici mon code :

Code:
Private Sub Textbox1_Change()
    
    TextBox1.BackColor = &H80000005

End Sub

Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    TextBox1.BackColor = &H80000005
    If InStr("0123456789", VBA.Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
        TextBox1.BackColor = &HFF&
    End If

End Sub

Private Sub Textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    If Len(TextBox1.Text) = 0 Then
        GoTo Fin
    End If
        
    If Len(Replace(TextBox1.Text, "/", "")) <> 6 And Len(Replace(TextBox1.Text, "/", "")) <> 8 Then
        GoTo ErreurSaisie
    End If
    
    If Len(TextBox1.Text) = 6 Then
        If Right(TextBox1, 2) > 50 Then
            TextBox1 = Left(TextBox1, 4) & 19 & Right(TextBox1, 2)
        Else
            TextBox1 = Left(TextBox1, 4) & 20 & Right(TextBox1, 2)
        End If
    End If
    
    TextBox1.Text = Left(Replace(TextBox1.Text, "/", ""), 2) & "/" & Mid(Replace(TextBox1.Text, "/", ""), 3, 2) & "/" & Right(Replace(TextBox1.Text, "/", ""), 4)
    TextBox1.MaxLength = 10
    
    If Not IsDate(TextBox1.Value) Then
        GoTo ErreurSaisie
    End If
    
    GoTo Fin
    
ErreurSaisie:

    Cancel = True
    With TextBox1
        .BackColor = &HFF&
        MsgBox "Date saisie incorrecte"
        TextBox1.Text = Replace(TextBox1.Text, "/", "")
        .SetFocus
        .SelStart = 0
        .SelLength = Len(TextBox1.Text)
    End With
        
Fin:

End Sub

Private Sub NSaisie8_Enter()
    
    NSaisie8.Text = Replace(NSaisie8.Text, "/", "")
    NSaisie8.MaxLength = 8

End Sub

Ici l'utilisateur ne peut pas saisir autre chose que des chiffres (même pas un "/" qui seront placés automatiquement). Si il saisie une date au format jj/mm/aa, le contrôle est automatiquement modifié en jj/mm/aaaa (en mettant 19XX si aa est supérieur à 50 et 20XX si inférieur).

Normalement, tout ça devrait fonctionner impeccable. N'étant jamais à l'abri d'une erreur, ça serait sympa de me faire savoir si tu as des bugs (enfin si c'est ma version que tu choisis).

Bonne journée
 

MJR

XLDnaute Nouveau
Re : Forcer une date au format jj/mm/aaaa dans un userform.

Bonjour tout le monde headshot, Pierrot et Borismy !

J'ai récemment planché sur le sujet pour une application que je suis en train de développer.

Etant assez perfectionniste (de temps en temps), j'ai poussé le contrôle à l'extrême pour empécher de saisir n'importe quoi et n'afficher un message d'erreur qu'en dernier recours. Voici mon code :

Code:
Private Sub Textbox1_Change()
   
    TextBox1.BackColor = &H80000005

End Sub

Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    TextBox1.BackColor = &H80000005
    If InStr("0123456789", VBA.Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
        TextBox1.BackColor = &HFF&
    End If

End Sub

Private Sub Textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   
    If Len(TextBox1.Text) = 0 Then
        GoTo Fin
    End If
       
    If Len(Replace(TextBox1.Text, "/", "")) <> 6 And Len(Replace(TextBox1.Text, "/", "")) <> 8 Then
        GoTo ErreurSaisie
    End If
   
    If Len(TextBox1.Text) = 6 Then
        If Right(TextBox1, 2) > 50 Then
            TextBox1 = Left(TextBox1, 4) & 19 & Right(TextBox1, 2)
        Else
            TextBox1 = Left(TextBox1, 4) & 20 & Right(TextBox1, 2)
        End If
    End If
   
    TextBox1.Text = Left(Replace(TextBox1.Text, "/", ""), 2) & "/" & Mid(Replace(TextBox1.Text, "/", ""), 3, 2) & "/" & Right(Replace(TextBox1.Text, "/", ""), 4)
    TextBox1.MaxLength = 10
   
    If Not IsDate(TextBox1.Value) Then
        GoTo ErreurSaisie
    End If
   
    GoTo Fin
   
ErreurSaisie:

    Cancel = True
    With TextBox1
        .BackColor = &HFF&
        MsgBox "Date saisie incorrecte"
        TextBox1.Text = Replace(TextBox1.Text, "/", "")
        .SetFocus
        .SelStart = 0
        .SelLength = Len(TextBox1.Text)
    End With
       
Fin:

End Sub

Private Sub NSaisie8_Enter()
   
    NSaisie8.Text = Replace(NSaisie8.Text, "/", "")
    NSaisie8.MaxLength = 8

End Sub

Ici l'utilisateur ne peut pas saisir autre chose que des chiffres (même pas un "/" qui seront placés automatiquement). Si il saisie une date au format jj/mm/aa, le contrôle est automatiquement modifié en jj/mm/aaaa (en mettant 19XX si aa est supérieur à 50 et 20XX si inférieur).

Normalement, tout ça devrait fonctionner impeccable. N'étant jamais à l'abri d'une erreur, ça serait sympa de me faire savoir si tu as des bugs (enfin si c'est ma version que tu choisis).

Bonne journée
Je ne dirai que deux mots : BRAVO et MERCI.
 

YHP5400

XLDnaute Nouveau
Re : Forcer une date au format jj/mm/aaaa dans un userform.

Bonjour tout le monde headshot, Pierrot et Borismy !

J'ai récemment planché sur le sujet pour une application que je suis en train de développer.

Etant assez perfectionniste (de temps en temps), j'ai poussé le contrôle à l'extrême pour empécher de saisir n'importe quoi et n'afficher un message d'erreur qu'en dernier recours. Voici mon code :

Code:
Private Sub Textbox1_Change()
  
    TextBox1.BackColor = &H80000005

End Sub

Private Sub Textbox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    TextBox1.BackColor = &H80000005
    If InStr("0123456789", VBA.Chr(KeyAscii)) = 0 Then
        KeyAscii = 0
        TextBox1.BackColor = &HFF&
    End If

End Sub

Private Sub Textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  
    If Len(TextBox1.Text) = 0 Then
        GoTo Fin
    End If
      
    If Len(Replace(TextBox1.Text, "/", "")) <> 6 And Len(Replace(TextBox1.Text, "/", "")) <> 8 Then
        GoTo ErreurSaisie
    End If
  
    If Len(TextBox1.Text) = 6 Then
        If Right(TextBox1, 2) > 50 Then
            TextBox1 = Left(TextBox1, 4) & 19 & Right(TextBox1, 2)
        Else
            TextBox1 = Left(TextBox1, 4) & 20 & Right(TextBox1, 2)
        End If
    End If
  
    TextBox1.Text = Left(Replace(TextBox1.Text, "/", ""), 2) & "/" & Mid(Replace(TextBox1.Text, "/", ""), 3, 2) & "/" & Right(Replace(TextBox1.Text, "/", ""), 4)
    TextBox1.MaxLength = 10
  
    If Not IsDate(TextBox1.Value) Then
        GoTo ErreurSaisie
    End If
  
    GoTo Fin
  
ErreurSaisie:

    Cancel = True
    With TextBox1
        .BackColor = &HFF&
        MsgBox "Date saisie incorrecte"
        TextBox1.Text = Replace(TextBox1.Text, "/", "")
        .SetFocus
        .SelStart = 0
        .SelLength = Len(TextBox1.Text)
    End With
      
Fin:

End Sub

Private Sub NSaisie8_Enter()
  
    NSaisie8.Text = Replace(NSaisie8.Text, "/", "")
    NSaisie8.MaxLength = 8

End Sub

Ici l'utilisateur ne peut pas saisir autre chose que des chiffres (même pas un "/" qui seront placés automatiquement). Si il saisie une date au format jj/mm/aa, le contrôle est automatiquement modifié en jj/mm/aaaa (en mettant 19XX si aa est supérieur à 50 et 20XX si inférieur).

Normalement, tout ça devrait fonctionner impeccable. N'étant jamais à l'abri d'une erreur, ça serait sympa de me faire savoir si tu as des bugs (enfin si c'est ma version que tu choisis).

Bonne journée
super code c'est exactement ce que je cherchais depuis 1 semaine ravi de m'être inscrit sur le forum
 

patricktoulon

XLDnaute Barbatruc
Bonjour
un peu plus pointu;) et dynamique
impossible de taper une date erroné et format français forcé
on peu pareil avec keydown aussi moyennat la conversion keycode/keyascii
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   'collection textbox formaté :patricktoulon
 Dim v, Mask$: Mask = "01/01/2000"
    If Chr(KeyAscii) Like "[!0-9]" Then KeyAscii = 0: Exit Sub
    With TextBox1
        v = .Value & Chr(KeyAscii)
        If Not IsDate(v & Mid(Mask, Len(v) + 1)) Then
            keyascci = 0: beep
        Else
            If Mid(v, 4, 2) > 12 Then v = Mid(v, 1, 3):beep
            .Value = v & IIf(Len(v) Like "[2,5]", "/", "")
        End If
    End With
    KeyAscii = 0
End Sub
 

Astarelfe

XLDnaute Nouveau
Bonjour
un peu plus pointu;) et dynamique
impossible de taper une date erroné et format français forcé
on peu pareil avec keydown aussi moyennat la conversion keycode/keyascii
VB:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   'collection textbox formaté :patricktoulon
 Dim v, Mask$: Mask = "01/01/2000"
    If Chr(KeyAscii) Like "[!0-9]" Then KeyAscii = 0: Exit Sub
    With TextBox1
        v = .Value & Chr(KeyAscii)
        If Not IsDate(v & Mid(Mask, Len(v) + 1)) Then
            keyascci = 0: beep
        Else
            If Mid(v, 4, 2) > 12 Then v = Mid(v, 1, 3):beep
            .Value = v & IIf(Len(v) Like "[2,5]", "/", "")
        End If
    End With
    KeyAscii = 0
End Sub

Bonjour,

Et merci pour ce code - Je ne peux pas saisir de date commençant par 31 (ex. 31/12/2022)
Avez-vous une suggestion ?
 

Discussions similaires

Réponses
3
Affichages
331

Statistiques des forums

Discussions
312 106
Messages
2 085 352
Membres
102 871
dernier inscrit
Maïmanko