Zone de saisie de date format jj/mm/aaaa, n'utilisez plus le controle maskedit.ocx !

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 060 fois - Téléchargée 28 fois

Contenu du snippet

Je sais que ce type de projet n'est pas dans mes habitudes pour ceux qui me connaissent (je préfère en effet faire de l'inédit qui sert rarement que du tout cuit qui sert vraiment lol), mais suite à une demande, j'ai réalisé le coding des 2 evènements "Change" et "Keypress", qui une fois implémenté transforme une zone de saisie (principalement une TextBox) en véritable Maskedit 00/00/0000, avec en plus un controle des valeurs Jour et Mois.

Source / Exemple :


'Dessinez une TextBox, nommez-la ZT, puis mettez sa propriété MaxLength à 10
'Puis dans le code, collez ces 2 courtes procédures :

Private Sub ZT_Change()
Dim p As Integer
  p = ZT.SelStart
  If Len(ZT.Text) = 3 Then
    If Mid$(ZT.Text, 3, 1) <> "/" Then
      If Mid$(ZT.Text, 2, 1) = "/" Then ZT.Text = "0" & ZT.Text Else ZT.Text = Left$(ZT.Text, 2) & "/" & Right$(ZT.Text, 1)
      p = p + 1
    End If
    If Val(Left$(ZT.Text, 2)) > 31 Then ZT.Text = "31" & Mid$(ZT.Text, 3, Len(ZT.Text) - 2)
  End If
  If Len(ZT.Text) = 6 Then
    If Mid$(ZT.Text, 6, 1) <> "/" Then
      If Mid$(ZT.Text, 5, 1) = "/" Then ZT.Text = Left$(ZT.Text, 3) & "0" & Right$(ZT.Text, 3) Else ZT.Text = Left$(ZT.Text, 5) & "/" & Right$(ZT.Text, 1)
      p = p + 1
    End If
    If Val(Mid$(ZT.Text, 4, 2)) > 12 Then ZT.Text = Left$(ZT.Text, 3) & "12" & Mid$(ZT.Text, 6, Len(ZT.Text) - 5)
  End If
  ZT.SelStart = p
End Sub

Private Sub ZT_KeyPress(KeyAscii As Integer)
  If KeyAscii = 47 Then
    Select Case Len(ZT.Text)
      Case 1, 2, 4, 5
      Case Else
        KeyAscii = 0
    End Select
  Else
    If InStr(1, "0123456789/" & Chr$(vbKeyBack), Chr$(KeyAscii)) = 0 Then KeyAscii = 0
  End If
End Sub

Conclusion :


Cela permet de se passer du masked.ocx, mais certains, peut soucieux du déploiement, y préféreront toujours un bon vieux Calendar bien lourd... dommage pour eux ;)

@+
Celiphane

A voir également

Ajouter un commentaire

Commentaires

mictif
Messages postés
105
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
14 février 2013
1 -
chez moi ca ne marche pas!!!
le format est "000000/00"
si chez vous ca marrche je comprend pas pourquoi chez moi ca marche pas!!! enfin je rergarde...
ps merci pour ce code
mictif l'apprenti DI
cs_moustachu
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012
-
C'est DateDiff("d",date1,date2)

++
Moustachu
cs_teddy_bear
Messages postés
36
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
1 octobre 2005
-
merci beaucoup pour ce coude ca m'a aidé bcp c'est exactement ce ke je cherchait
si tu peu m'aider je voudrai bien savoir comment calculer le nombre de jours entre 2 dates
je serai trè reconnaissante
merci encore
celiphane
Messages postés
466
Date d'inscription
samedi 16 février 2002
Statut
Membre
Dernière intervention
20 avril 2007
-
non ba en fait en ayant approndi les tests (dans le cadre d'une utilisation professionnelle en faite), je conserve mon code, parceque les 2 codes que tu as proposé Olilefou sont "buggés" :

Le premier, le court, autorise la saisie de N caractères slash (0 slash 0 slash 0 slash ca passe !!!)

Le second, le long, n'autorise pas l'utilisateur à modifier du texte DANS la date : si tu mets 12/05/2003, et que tu sélectionne juste 12 en surbrillance, le fait de taper au clavier remet immédiatement le curseur à la fin de la textbox.

Désolé mais je conserve mon code, plus fonctionnel. A moins que tu ne puisses corriger ca ?

@+
Celiphane
Olilefou
Messages postés
29
Date d'inscription
mercredi 1 août 2001
Statut
Membre
Dernière intervention
9 décembre 2005
-
Bien sur que tu peux utiliser mes exemples, sinon je ne viendrais pas sur ce site.

Bye

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.