TextBox au format date [Résolu/Fermé]

Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
- - Dernière réponse : Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
- 3 févr. 2017 à 09:44
Bonjour,

J'aimerai que dans un TextBox autoriser que la saisie d'une date au format JJ/MM/AAAA . Et par la même occasion mettre au format JJ/MM/AAAA plusieurs colonnes de mon tableau Excel à partir de la ligne 3 .

Dans l'attente de vous lire.

Merci.

Cordialement,


Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2243
2
Merci
Bonjour,

Problème avec ton fichier.
Regarde celui-ci : http://www.cjoint.com/c/GBdgY0HWU8E

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 62794 internautes nous ont dit merci ce mois-ci

Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
-
Bonjour,

Merci de votre réponse, j'ai résolut le soucis cette nuit grâce a votre réponse d'hier.

Merci énormément. Plus que deux soucis encore et mon fichier serait opérationnel.
Messages postés
14891
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 décembre 2019
1195
0
Merci
Bonjour,

exemple de "formatage" saisie date textbox
'control entree avec format date
Private Sub Textbox51_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    TextBox51.MaxLength = 10
    Select Case KeyAscii
        Case 46, 48 To 57
            ' 01/04/2016
            VT = Len(TextBox51)
            If VT = 2 Or VT = 5 Then TextBox51 = TextBox51 & "/"
        Case Else
            KeyAscii = 0
            MsgBox "Only numbers allowed"
    End Select
End Sub


par la même occasion mettre au format JJ/MM/AAAA

Vous pouvez developper un peu plus?
Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
-
Bonjour,

Je vous remercie de votre réponse, mais le code il faut l'insérer ou exactement ? Dans le TextBox ou dans un nouveau module ?

Merci par avance.

Pour répondre à ta question sur le format de cellule JJ/MM/AAA, je veux que dans mon tableau Excel sur les colonnes, le format des dates renseignées reste dans ce format.
Messages postés
57
Date d'inscription
dimanche 15 juillet 2012
Statut
Membre
Dernière intervention
2 mars 2017
0
Merci
Bonjour tout le monde,

Je vais essayer de continuer la réponse de f89

Pour un textBox je ne pense pas que ce soit possible de vérifier cette ordre, il faut que tu mettes une conditions sur le bouton de validation 'OnClick'.

Par exemple si ta valeur va dans la variable dateTextBox tu peux faire :

Dim jourS As String, moisS As String, anneeS As String, dateTextBox As String
If Len(dateTextBox) = 10 Then ' Donc jj/mm/aaaa
    jourS = Mid(dateTextBox, 1, 2) 'Permet de séparer ta chaine de caractère
    moisS = Mid(dateTextBox, 4, 2)
    anneeS = Mid(dateTextBox, 7, 4)
End If

'Et après il faut poser tes conditions pour vérifier que la date est bien la bonne par rapport au mois et à l'année en cours :D
'Il doit cependant exister une méthode plus rapide et plus intelligente mais elle fonctionne !


Voilà, dit moi si tu veux des explications, bon courage !
Bien cordialement,
Hugo
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2243
0
Merci
Bonjour,

D'après ce lien donné dans ton autre discussion, regarde ce code :

Dans un module standard :
'Constante séparateur de date
Public Const SEP_DATE As String = "/"

Public Sub Format_Date(cTBx As MSForms.TextBox, KC As MSForms.ReturnInteger)
Dim ici As Byte, flt As String, cr As String, drf As String, dtt As String

    flt = "##" & SEP_DATE & "##" & SEP_DATE & "####"
    drf = "31" & SEP_DATE & "12" & SEP_DATE & "2000"
    With cTBx
        ici = .SelStart
        If KC = 46 And .SelText = Mid(.Text, ici + 1) Then
            .Text = Left(.Text, ici)
            If Len(.Text) = 2 Or Len(.Text) = 5 Then .Text = Left(.Text, Len(.Text) - 1)
            KC = 0: Exit Sub
        End If
        If ici < Len(.Text) Then .SelStart = Len(.Text): KC = 0: Exit Sub
        If KC = 8 Then
            If ici = 3 Or ici = 6 Then .Text = Left(.Text, Len(.Text) - 1)
            Exit Sub
        End If
        If KC = 37 And ici = 0 Then
            If IsDate(.Tag) Then .Text = .Tag: KC = 0: Exit Sub
        End If
        If KC > 95 Then cr = Chr(KC - 48)
        If ici = 3 Then Mid(drf, 1, 5) = IIf(cr = "0", "00" & SEP_DATE & "01", "00" & SEP_DATE & "02")
        dtt = .Text & cr & Mid(drf, ici + 2)
        If KC = 32 Then
            If ici = 0 Or ici = 3 Or ici = 6 Or ici = 8 Then
                Dim voir As String
                voir = .Text & Mid(Format(Date, "dd" & SEP_DATE & "mm" & SEP_DATE & "yyyy"), ici + 1)
                If IsDate(voir) Then .Text = voir
            End If
            KC = 0:   Exit Sub
        End If
        If ici <> 8 Then
            If Not IsDate(dtt) Or Not dtt Like flt Then KC = 0: Exit Sub
        Else
            If Not IsNumeric(cr) Then KC = 0: Exit Sub
        End If
        Select Case ici
            Case 1, 4
                If ici = 4 And Val(Mid(.Text, ici, 1) & cr) > 12 Then KC = 0: Exit Sub
                If ici = 4 Then
                    .Text = Left(dtt, Len(.Text & cr)) & SEP_DATE: KC = 0
                Else
                    .Text = Left(dtt, Len(.Text & cr)) & SEP_DATE: KC = 0
                End If
            Case 3
                If cr > "1" Then KC = 0
        End Select
    End With
    Application.CutCopyMode = True
End Sub


Dans le module de ton Userform, pour chaque TextBox concerné :
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Format_Date TextBox1, KeyCode
End Sub


Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
> pijaku
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
-
Sur mon code sa me donne sa

'le TexBox1 s'appelle : PdateEO
Private Sub PdateEO_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Format_Date PdateEO, KeyCode
End Sub

'le TexBox1 s'appelle : RdateEO
Private Sub RdateEO_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Format_Date PdateEO, KeyCode
End Sub

Juste après ce code au-dessu, je met le code standard, à l'exécution, je ne peux pas renseigner une nouvelle date.
Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
-
Cette ligne reste rouge.
Public Const SEP_DATE As String = "/"
pijaku
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2243 > Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
-
Cette ligne doit être tout en haut de ton module.
ou alors tu la places dans la sub comme ceci :
 
Public Sub Format_Date(cTBx As MSForms.TextBox, KC As MSForms.ReturnInteger)
Dim ici As Byte, flt As String, cr As String, drf As String, dtt As String
Const SEP_DATE As String = "/"
Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
> pijaku
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
-
Ce n'est pas faute d'essayer mais j'ai fait exactement la même chose et impossible de rentrer la date dans le TextBox.
Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
> Jono92600
Messages postés
76
Date d'inscription
jeudi 26 janvier 2017
Statut
Membre
Dernière intervention
24 mai 2017
-
Je viens de mettre le fichier sur le site :

http://www.cjoint.com/c/GBcxYHEe5wY

le code c'est aef17

Pour ceux qu'ils veulent et peuvent m'aider.

Merci par avance.