Problème de gestion TextBox-Exit

Guy_L

XLDnaute Occasionnel
Bonjour,
Afin de tester que l'utilisateur d'un fichier a bien rempli un champ date au format jj/mm/aaaa (ou dd/mm/yyyy) et que cette date est correcte, j'ai créé une macro dont voici un extrait. Je précise que, parallèlement, une Checkbox permet de saisir automatiquement la date si c'est aujourd'hui (voir ci-dessous). (A noter aussi que vous trouverez des lignes comme ' TextBox1 = "" et ' Exit Sub qui sont des "essais" que j'ai provisoirement mis en remarque).
Seulement voilà, ça ne fonctionne pas et je dois certainement m'être "mélangé les crayons":

VB:
'Date aujourd'hui (case à cocher)
Private Sub CheckBox1_Click()

If CheckBox1.Value Then
    TextBox1.Value = Format(Now(), "dd/mm/yyyy")
Else
    TextBox1.Value = ""
    TextBox1.SetFocus
End If
    
End Sub
VB:
'Vérification de la cohérence de date saisie au moment de la frappe - date du calcul
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

'Cohérence du format
If Not IsDate(TextBox1.Value) Then
    MsgBox "Saisissez un format de date correct du type jj/mm/aaaa !", , "Date du Calcul - Format"
'    TextBox1 = ""
    TextBox1.SetFocus
    Cancel = True
'    Exit Sub
End If

'Cohérence du mois (si le mois est > à 12)               'Nota : La syntaxe est Mid(Texte, Départ, Nombre de caractères).
If Mid(TextBox1.Value, 4, 2) > 12 Then
    MsgBox "Mois incorrect" & Chr(10) & "Saisissez un format de date correct du type jj/mm/aaaa !", , "Date du Calcul - Mois"
'    TextBox1.Value = ""
    TextBox1.SetFocus
    Cancel = True
'    Exit Sub
End If

End Sub
Merci d'avance pour votre aide.
 

Yaloo

XLDnaute Barbatruc
Re : Problème de gestion TextBox-Exit

Bonsoir Guy_L,

Perso j'utilise ces macros dès que j'ai des dates à mettre dans un TextBox. Comme ça, il n'y a pas (ou pas trop) à vérifier que le contenu du TextBox correspond à une date.

VB:
Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 10
Valeur = Len(TextBox1)
    If Valeur = 2 Or Valeur = 5 Then
        TextBox1 = TextBox1 & "/"
    End If
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 47
Case Is < 48, Is > 57
KeyAscii = 0
End Select
End Sub

A+

Martial
 

Guy_L

XLDnaute Occasionnel
Re : Problème de gestion TextBox-Exit

Merci, mais j'ai testé cette solution (la première partie en tous cas) et à chaque caractère entré, ma msgbox s'affichait. Moi, je voulais saisir toute la date avant validation. Mais c'est peut-être ce que "surveille" ta ligne "TextBox1.MaxLength = 10" ?
Peux-tu m'expliquer ce que fait la deuxième procédure ?
 

Yaloo

XLDnaute Barbatruc
Re : Problème de gestion TextBox-Exit

Re,

Cette ligne indique que le maximum de caractère est de 10.

Ci-dessous une version avec le contrôle de la date intégré à la procédure Change. Elle pourrait aussi être mise dans une procédure Exit.

VB:
Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 10
Valeur = Len(TextBox1)
    If Valeur = 2 Or Valeur = 5 Then
        TextBox1 = TextBox1 & "/"
    End If
If Len(TextBox1) = 10 Then
  If Not IsDate(TextBox1.Value) Then MsgBox "La date est erronée": TextBox1 = "": TextBox1.SetFocus
End If
End Sub

A+
 

Guy_L

XLDnaute Occasionnel
Re : Problème de gestion TextBox-Exit

Finalement, voici la macro complète et qui fonctionne (avec votre aide, merci)
Code:
'Vérification de la cohérence de date saisie au moment de la frappe - date du calcul
Private Sub TextBox1_Change()
TextBox1.MaxLength = 10
If Len(TextBox1) = 10 Then
  If Not IsDate(TextBox1.Value) Then
    MsgBox "Saisissez un format de date correct du type jj/mm/aaaa !", , "Date de Calcul"
    TextBox1.SetFocus
  Else
    If Mid(TextBox1.Value, 4, 2) > 12 Then
        MsgBox "Mois incorrect" & Chr(10) & "Saisissez un format de date correct du type jj/mm/aaaa !", , "Date du Calcul"
        TextBox1.SetFocus
    End If
  End If
End If

End Sub
 

Discussions similaires

Réponses
2
Affichages
261

Statistiques des forums

Discussions
312 330
Messages
2 087 341
Membres
103 524
dernier inscrit
Smile1813