VBA - Vérifier la saisie d'une date dans TextBox

  • Initiateur de la discussion Initiateur de la discussion Blueangel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

Blueangel

Guest
Bonsoir à tous,

Je recherche un moyen de vérifier la saisie d'une date dans un textBox en VBA (avec : jour = 30, 31, 28 ou 29, 1<mois<12).
J'ai déjà un algorithme pour savoir si une année est bissextile ou pas :

Cijoint.fr - Service gratuit de dépôt de fichiers

Est-ce que quelqu'un pourrait m'aider ?
Merci
@+
Blueangel
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Bonsoir Néné et Jean-Marcel,

Non, je ne me suis pas trompé de fichier : c'est l'algorithme pour savoir si une année est bissextile ou pas.

Merci pour le fichier, Jean-Marcel, il fonctionne bien. Par contre, je ne voyais pas ça comme ça. De plus, je ne comprends pas trop l'utilisation de "Case". Je suis novice en VBA, et je n'ai jamais utilisé ça dans le programme que je suis en train de faire.
Est-ce que tu pourrais m'en dire + (ou quelqu'un d'autre qui passerait par là)

D'avance merci.
@+
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Bonjour,

J'ai trouvé un code sur le net pour la vérification de la saisie d'une date.
Par contre, je rencontre quelques soucis pour le faire fonctionner dans mon programme : pb d'adaptation ? pb de rappel de "Function" ?

Quelqu'un pourrait-il m'expliquer le problème ?
Voici mon fichier (pour accéder à vba --> ouvrir le USF Gestion Clients, puis le fermer) :
Cijoint.fr - Service gratuit de dépôt de fichiers

D'avance merci,
@+
Blueangel
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Re,

J'ai fait quelques modif de mon code. Je n'ai plus d'erreur de compilation, par contre, toutes mes dates sont incorrectes !!
Voici mon code :

Dans TextBox5_exit :

Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Dim verif_date As Boolean

VerifDate.verif_date (la_date)

If verif_date = False Then
Texte = "La date saisie n'existe pas! Merci de la modifier"
Titre = "Date incorrecte"
Message = MsgBox(Texte, vbOKOnly + vbCritical, Titre)
End If

End Sub


Dans Module :

Public Function verif_date(ByRef la_date As String)

Dim jour As String
Dim mois As String
Dim annee As String

If la_date = "" Then
Exit Function
End If

jour = Int(Left(la_date, 2))
annee = Int(Right(la_date, 4))
mois = Int(Mid(la_date, 4, 2))

verif_date = True

If mois > 12 Or mois < 1 Then
verif_date = False
Else

Select Case mois
Case Is = 1, 3, 5, 7, 8, 10, 12
If jour > 31 Or jour < 1 Then
verif_date = False
End If
Case Is = 4, 6, 9, 11
If jour > 30 Or jour < 1 Then
verif_date = False
End If
Case Is = 2
If annee Mod 4 = 0 Or annee Mod 400 = 0 Then
'Annee bisextile
If jour > 29 Or jour < 1 Then
verif_date = False
End If
Else
' Annee pas bisextile
If jour > 28 Or jour < 1 Then
verif_date = False
End If
End If
End Select
End If

End Function

Qu'est-ce que j'ai mal fait ??

@+
Blueangel
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Bonjour,

Excel sait bien reconstruire une date en fonction de nombres que l'on passe à la fonction DateSerial(Year,Month,Day) on peut donc vérifier la cohérence d'une date par une fonction personnalisée du genre:

Code:
Public Function VerifDate(ByRef la_date As String) As Boolean
    Dim t: t = Split(la_date, "/")
    If UBound(t) < 2 Or Or UBound(t)>2 Or Len(la_date) < 10 Then Exit Function
    VerifDate = CStr(DateSerial(Val(t(2)), Val(t(1)), Val(t(0)))) = la_date
End Function

Le contrôle de la saisie peut se faire en amont pour obtenir ces dix caractères:

Code:
Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    'Tester la longueur saisie (Trim pour éviter les espaces blancs laissés inopinément)
    Select Case Len(Trim(TextBox5))
        Case 0 ' aucune date rentrée
        Case 1 To 9 'Mauvais format
            MsgBox "La date doit-être au format jj/mm/aaaa ou vide", vbExclamation, "Saisie date"
            Cancel = True 'empêche l'utilisateur de sortir du text box
        Case 10
            If Not VerifDate(Trim(TextBox5.Text)) Then
                MsgBox "La date n'est pas cohérente (Laissez la vide pour sortir)", vbExclamation, "Saisie date"
                Cancel = True 'empêche l'utilisateur de sortir du textbox
            End If
    End Select
End Sub
Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    'Autorise uniquement le '/' et les chiffres 0 à 9
    If KeyAscii < 47 Or KeyAscii > 57 Then
        Beep 'emet un son
        KeyAscii = 0
    End If
End Sub

A+
 
Dernière modification par un modérateur:
Re : VBA - Vérifier la saisie d'une date dans TextBox

Salut Hasco,

Merci pour ton code, mais j'ai le même problème : Date incorrecte à chaque saisie !

Vois-tu où est le problème ? Je commence à être un peu perdu !

@+
Blueangel
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Fausse alerte ! J'ai corrigé mon erreur. Merci à toi Hasco.
Par contre, j'ai tout de même une question : pourquoi ça ne fonctionne pas avec mon code ? (je demande, car je le trouve plus simple et beaucoup plus adapté à mon niveau en vba)
Je vous remets mon fichier :

Merci
@+
Blueangel
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Re,

Désolé Blueangel, mais je n'ouvre les fichiers ailleurs qu'ici que très exeptionnellement.

Si tu veux que je vois ton exemple, fais un classeur avec le stricte nécessaire. C'est à dire un userform avec un seul textbox un bouton et ta macro. A joindre ici bien-sûr

A+
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Re,

Voici ton fichier en retour avec quelques modification.

Keyascii ne peut être traité que dans l'évènement KeyPress.

L'appel de la fonction à changé également.

A+
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Bonsoir Blueangel, aux participants, et à ceux qui passeront par ici,

Tu avais la solution dans un exemple que je t'ai envoyé sur un autre fil:
(l faut savoir fouiller et copier)

Code:
Private Sub TextBox1_Change()
Me.TextBox1.MaxLength = 10
If Len(Me.TextBox1) = 2 Or Len(Me.TextBox1) = 5 Then Me.TextBox1 = Me.TextBox1 & "/"
End Sub

Par la suite, comme le format est une date acceptable; elle est exploitable...!
(Il y a à revoir le "Me.TextBox"... Mais je te laisse faire!)

Amicalement.

Yann
 
Re : VBA - Vérifier la saisie d'une date dans TextBox

Merci beaucoup à toi Hasco !
Bonjour Yann ! Oui, ça fonctionnait bien pendant un moment, mais avec toutes les manip' que j'ai fait... j'étais un peu paumé à vrai dire.
C'était la dernière petite chose que j'avais à faire dans mes 2 formulaires (ouf!)
Maintenant que j'ai "presque" compris comment appeler un "Sub" ou une "Function" placé dans un module, je vais tenter de mettre un peu d'ordre dans mon programme (mieux vaut tard que jamais).
Je profite de ce post pour dire que j'ai juste quelques difficultés lorsqu'il y a des paramètres entre () --> ça me renvoi toujours des erreurs de compilation.

Donc si quelqu'un aurait quelques explications pour m'éclaircir sur ce point. En attendant que continue mes recherches (même si j'ai l'impression de tourner en rond)

Encore merci pour votre aide.
@+
Blueangel
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
430
Retour