TextBox au format date

Résolu
Jono92600 Messages postés 78 Statut Membre -  
Jono92600 Messages postés 78 Statut Membre -
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,

4 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Bonjour,

    Problème avec ton fichier.
    Regarde celui-ci : https://www.cjoint.com/c/GBdgY0HWU8E
    2
    1. Jono92600 Messages postés 78 Statut Membre
       
      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.
      0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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?
    0
    1. Jono92600 Messages postés 78 Statut Membre
       
      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.
      0
  3. HugoHerbomez Messages postés 59 Statut Membre 2
     
    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
    0
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    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


    0
    1. HugoHerbomez Messages postés 59 Statut Membre 2
       
      outch ça fait mal aux yeux ^^
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772 > HugoHerbomez Messages postés 59 Statut Membre
       
      Peut être, surement même, mais c'est efficace.
      1- Essaie de saisir cette date : 29/02/2017
      2- Essaie de saisir 01/13/2017
      3- si le textbox est vide, appuie sur la barre d'espace...
      4- conserve en "mémoire" la dernière date saisie tant que tu ne fermes pas l'userform.
      Plutôt bien non?
      0
    3. HugoHerbomez Messages postés 59 Statut Membre 2
       
      Oui c'est sûr que c'est très efficace, perso j'ai directement divisé la valeur entrée en jour, mois et année et ensuite j'ai regardé la conformité selon l'année et le mois en cours. Et si ça ne fonctionne pas ça ne saisie pas la donnée et en attend une bonne.
      Sinon quand ce n'est pas dans un textBox la question ne se pose même pas, il faut juste faire une validation de donnée sur les cellules ayant des dates et obliger la saisie d'une date entre le 01/01/2000 par exemple et AUJOURDHUI()
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772 > HugoHerbomez Messages postés 59 Statut Membre
       
      Pour faire une vérification en fin de saisie (par un bouton), tu n'as besoin que de IsDate(). Pas besoin de passer par une décomposition de chaine.
      0
    5. HugoHerbomez Messages postés 59 Statut Membre 2
       
      Tu peux ajouter la contrainte de format avec la fonction IsDate?
      0