IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Proposé par UcFoutu - Contrôle de saisie d'une date au format voulu dans un textbox


Sujet :

Contribuez

  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut Proposé par UcFoutu - Contrôle de saisie d'une date au format voulu dans un textbox
    Citation Envoyé par ucfoutu
    Je me suis un peu cassé la tête pour faire avec VBA (dont je me sers tous les 36 du mois) presque tout de ce que je peux faire beaucoup mieux avec VB.

    Cet outil permet de paramétrer comme on l'entend les dates à saisir, tant en ce qui concerne la forme (aaaa/mm/jj, mm/jj/aaaa ou jj/mm/aaaa) que le séparateur lui même (/, - ou espace)

    Le tout est un module qui pèse moins de 3 Ko ...

    Le contrôle de la saisie se fait en cours de saisie (incohérence immédiatement signalée par un bip et refus de la frappe du caractère concerné)

    Le tout en permettant des copiers/collers de dates cohérentes et répondant au format défini

    mettre ce qui suit dans un userform, avec 3 textboxes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    'NOTE : verifcomplet permet de ne pas quitter une saisie incomplète,
    'sauf si elle est encore vide
     
    'Notez bien également : si vous préférez utiliser yyyy à la place de aaaa
    ' et dd à la place de jj, c'est prévu (vous vouvez donc le faire)
     
    '===================================================================
    'ici, on traite les saisie de dates françaises
     
    Private Sub TextBox1_Change()
      Static javais As String
      javais = ctrldate(ActiveControl, "jj/mm/aaaa", javais)
    End Sub
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = Not verifcomplet(TextBox1)
    End Sub
     
    '===================================================================
    'ici, on traite les saisies de dates anglaises
    Private Sub TextBox2_Change()
      Static javais As String
      javais = ctrldate(ActiveControl, "mm/jj/aaaa", javais)
    End Sub
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = Not verifcomplet(TextBox2)
    End Sub
     
    '===================================================================
    'ici, on traite les saisies de dates américaines "année d'abord"
    Private Sub TextBox3_Change()
      Static javais As String
      javais = ctrldate(ActiveControl, "aaaa/mm/jj", javais)
    End Sub
     
    Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = Not verifcomplet(TextBox3)
    End Sub



    mettre ceci (le module de traitement) dans un module standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Option Explicit
     
    Private Function j0(q As Control, jfr As String, ch As String) As String
      j0 = ch
      Dim t As String
      t = q.Text
      q.SelStart = Len(t)
      If q.SelStart < Len(t) Then
        q.SelStart = Len(t)
        Beep
        Exit Function
      End If
      Dim jrf1 As String, jrf2 As String, jflt As String, j1 As String, jms As String
      Select Case Left(jfr, 1)
        Case "d", "m", "j"
          j1 = Mid(jfr, 3, 1)
          jflt = "##" & j1 & "##" & j1 & "####"
          If Left(jfr, 1) = "m" Then
            jrf2 = "01" & j1 & "01" & j1 & "2000"
            jrf1 = "01" & j1 & "10" & j1 & "2000"
            jms = Left(t, 2)
          Else
            jrf1 = "01" & j1 & "10" & j1 & "2000"
            jrf2 = "01" & j1 & "03" & j1 & "2000"
            jms = Mid(t, 4, 2)
          End If
        Case "a", "y"
          j1 = Mid(jfr, 5, 1)
          jflt = "####" & j1 & "##" & j1 & "##"
          jrf2 = "2000" & j1 & "01" & j1 & "01"
          jrf1 = "2000" & j1 & "01" & j1 & "10"
          jms = Mid(t, 6, 2)
      End Select
      If Not t Like Left(jflt, Len(t)) Then Beep: Exit Function
      Dim jrf As String
      If Val(jms) > 12 Or Val(Left(jms, 1)) > 1 Then Beep: Exit Function
      If jms > "0" Then
        jrf = t & Mid(jrf1, Len(t) + 1)
      Else
        jrf = t & Mid(jrf2, Len(t) + 1)
      End If
      If Not IsDate(jrf) Then Beep: Exit Function
      j0 = q.Text
      If Len(j0) < Len(ch) And Right(ch, 1) = j1 Then
         j0 = Left(ch, Len(ch) - 2) '============
         Exit Function
      End If
      If Len(j0) < Len(ch) And Right(ch, 2) Like j1 & "#" Then
        j0 = Left(ch, Len(ch) - 1)
        Exit Function
      End If
      Dim lj0 As Integer
      lj0 = Len(j0)
      If Left(jfr, 1) <> "y" And Left(jfr, 1) <> "a" Then
       If (lj0 = 2 Or lj0 = 5) And Len(t) > Len(ch) Then j0 = j0 & j1
      Else
        If (lj0 = 4 Or lj0 = 7) And Len(t) > Len(ch) Then j0 = j0 & j1
      End If
    End Function
     
    Public Function ctrldate(q As Control, leformatdate As String, ch As String) As String
      ctrldate = j0(q, leformatdate, ch)
      q.Text = ctrldate
    End Function
     
    Public Function verifcomplet(q As Control)
       verifcomplet = True
       If Len(q.Text) Mod 10 <> 0 Then
         MsgBox "saisie incomplète !"
         verifcomplet = False
       End If
    End Function
    ucfoutu

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour ce code, c'est exactement ce que je cherchais, marche parfaitement.

Discussions similaires

  1. [AC-2003] Afficher une date au format français dans une Texte_box
    Par facteur dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/04/2014, 12h57
  2. [MySQL] Enregistrer une date au format francais dans une BDD SQL
    Par papayou94 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/08/2011, 14h53
  3. [MySQL] stoker une date du format francophone dans mysql
    Par phpines dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/03/2009, 15h29
  4. Contrôle de saisie pour une date
    Par canada_bea dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/04/2007, 18h36
  5. Insérer une date au format français dans un champ
    Par EpOnYmE187 dans le forum Installation
    Réponses: 2
    Dernier message: 14/06/2005, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo