Cdate

Bonsoir à tous et bonnes fêtes de fin d'année.

Je travaille sur un formulaire avec des textbox et je voulais spécifier à la textbox10 la date.

J'avais avant :

If TextBox10 = "" Then End
        .Range("Q" & lgn) = TextBox10

Que j'ai modifié ainsi mais j'ai des erreurs :

If isdate (TextBox10) = "" Then End
        .Range("Q" & lgn) = CDate (TextBox10)

Pouvez vous me donner votre avis sur l'erreur ? Merci

Cordialement

Bonsoir wall,

si j'ai bien compris...

Private Sub TextBox10_Change()
'
If Len(Me.TextBox10.Text) = 10 Then
    If IsDate(Me.TextBox10.Text) = True Then Range("A1").Value = CDate(Me.TextBox10.Text)
Else
    Range("A1").Value = ""
End If
'
End Sub

Joyeuses Fêtes!

A+

Merci pour ta réponse mais j'ai une erreur de code ici

Range("B4").Value = ""

alors j'ai essayé cela et cela semble fonctionné

Private Sub TextBox11_Change() 'fonction date dans textbox10
Dim Valeur As Byte
Valeur = Len(TextBox10)
If Valeur = 2 Or Valeur = 5 Then TextBox11 = TextBox10 & "/"
End Sub

Cordialement

Salut wall,

tu devrais arrêter le vin et te remettre à l'eau!

Tu mélanges tout : byte au lieu de integer, TextBox10 pour 11...

Private Sub TextBox11_Change() 'fonction date dans textbox10
Dim Valeur As Integer
Valeur = Len(TextBox11)
If Valeur = 2 Or Valeur = 5 Then TextBox11 = TextBox11 & "/"
End Sub

Santé!

A+

Merci beaucoup mais effectivement je tourne à l 'eau de vie sans le minimum de révision.

En fait c'est la textbox 11 erreur de frappe et pour le reste, je pige que dalle.

cordialement

Re,

cette 'macro' intercepte les frappes au clavier intervenant dans la TextBox11.

Sachant que Len = la longueur du texte (ou nombre de caractères), quand Len=2 (01 par exemple) ou Len=5 (01/05), un caractère / est automatiquement ajouté, histoire de faciliter l'encodage de la date.

Tu pourrais donc écrire (si Option Explicit est ignoré) :

Private Sub TextBox11_Change()
'
If Len(Me.TextBox11.Text)= 2 Or Len(Me.TextBox11.Text) = 5 Then Me.TextBox11.Text = Me.TextBox11.Text & "/"
'
End Sub

A+

Merci super mais si je veux limiter la saisie de l'année à 4 chiffres parce que dans ce code je peux saisir par erreur 26/12/2016666666 par exemple !!!!

Merci

Salut wall,

très juste! Et, on peut s'amuser à l'infini dans le contrôle des frappes encodées!

Quelques exemples!

Et on peut forcer encore plus loin en contrôlant que l'on encode bien deux chiffres pour le jour ou le mois même en-dessous de 10... etc, etc, etc....

Private Sub TextBox11_Change()
'
If Len(Me.TextBox11.Text) >= 10 Then
    If Len(Me.TextBox11.Text) = 11 Then Me.TextBox11.Text = Left$(Me.TextBox11.Text, 10)
    'on peut jouer aussi!
    'si l'année encodée est antérieure ou postérieure à telle année, on annule!
    If Val(Right(Me.TextBox11.Text, 4)) < 2000 Or Val(Right(Me.TextBox11.Text, 4)) > 2015 Then Me.TextBox11.Text = Left$(Me.TextBox11.Text, 5)
Else
    'ici aussi, on peut jouer!
    'si le mois encodé n'est pas égal par exemple à juin --> 6, on annule!
    If Len(Me.TextBox11.Text) = 5 Then 'donc avant l'ajout du caractère /
        If Val(Right(Me.TextBox11.Text, 2)) <> 6 Then Me.TextBox11.Text = Left$(Me.TextBox11.Text, 3)
    End If
    If Len(Me.TextBox11.Text) = 2 Or Len(Me.TextBox11.Text) = 5 Then Me.TextBox11.Text = Me.TextBox11.Text & "/"
End If
'
End Sub

A+

5textbox.xlsm (17.92 Ko)

Merci pour cette solution, tu es un As.

Je me suis limité à ce bout de code, il est court certes mais avec ses inconvénients, du genre on peut saisir 45/14/5014...sans importance peut être?

Private Sub TextBox11_Change() 'date
'
If Len(Me.TextBox11.Text) >= 10 Then
    If Len(Me.TextBox11.Text) = 11 Then Me.TextBox11.Text = Left$(Me.TextBox11.Text, 10)

Else

    If Len(Me.TextBox11.Text) = 2 Or Len(Me.TextBox11.Text) = 5 Then Me.TextBox11.Text = Me.TextBox11.Text & "/"
End If
'
End Sub

Cordialement

Bonjour,

Une autre proposition (saisie jj/mm/aaaa) pour un UserForm.

Cdlt.

Private Sub TextBox11_Change()
Dim n As Byte
    TextBox11.MaxLength = 10
    n = Len(TextBox11)
    If n = 2 Or n = 5 Then TextBox11 = TextBox11 & Chr(47)
End Sub

Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(TextBox11) Then
        MsgBox "Date invalide!"
        TextBox11 = ""
        Cancel = True
    End If
End Sub

Bonjour,

merci Jean Eric,

Bonne solution mais comme j'ai remarqué, si on saisie une date du genre 45/13/4050, on aura pas de message d'erreur?

Bonjour,

Tu n'as pas bien compris que 45/13/2050 n'étant pas une date, sera invalide !

Bonjour,

Désolé mais je pensais que l'erreur à afficher ne survenait que si on ne respectait pas le format jj/mm/aaaa et non celle 31 max/12max/2050 max par exemple. Dans mon cas, mon formulaire accepte par exemple 12/17/2016 et pourtant ce n'est pas une date????

Est-ce que tu l'as testée avec IsDate ?

Avec

Private Sub TextBox11_Change()
Dim n As Byte
    TextBox11.MaxLength = 10
    n = Len(TextBox11)
    If n = 2 Or n = 5 Then TextBox11 = TextBox11 & Chr(47)
End Sub

Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(TextBox11) Then
        MsgBox "Date invalide!"
        TextBox11 = ""
        Cancel = True
    End If
End Sub
Rechercher des sujets similaires à "cdate"