Autres Fonction Date dans TextBox

Nonomix

XLDnaute Nouveau
Bonjour,

J'ai un tableau réaliser sous Excel 2007 avec un formulaire avec une TextBox que je voudrais au format date.

Actuellement je suis obliger de rentrer au format 01/02/2020 (pour 1 février 2020) mais cela me mets dans la cellule 02/01/2020 (pour 2 janvier 2020) ce qui correspond pas du tout a mon souhait.

J'aimerais qu'on puisse saisir au choix 01/02/2020 ou 01.02.2020 ou 01022020 et que cela me copie dans la cellule final A1 au format jj/mm/aaaa. La cellule A2 comprend la formule =A1 mais doit être au format exclusif mmm-aa (car actuellement cela mets au format identique que A1 malgré la configuration format cellule mmm-aa)

Merci pour votre aide.
 

Chris24

XLDnaute Impliqué
Bonjour
Pour une saisie au format "jjmmaaaa" un petit bout de code

VB:
Private Sub TextBox1_Change()
'Code permettant de mettre une date au format 00/00/0000 dans une textbox
Dim valeur As Byte
TextBox1.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
valeur = Len(TextBox1)
If valeur = 2 Or valeur = 5 Then TextBox1 = TextBox1 & "/"
End Sub

'pour validation

Sheets("Feuil1").Range("A1") = CDate(TextBox1)

Exemple dans le fichier


Cdt
 

Pièces jointes

  • Classeur1.xlsm
    23.1 KB · Affichages: 15

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous,

Une autre méthode que j'utilise de temps en temps.
  • on passe d'une textbox à la suivante avec la touche Tab ou la touche entrée
  • on saisit soit un chiffre soit deux chiffres pour le jour ou le mois
  • on saisit soit deux chiffres soit quatre chiffres pour l'année
Tant que la saisie des textbox n'est pas une date, les textbox ont un fond rose.
  • on tient compte des années bissextiles.
  • pas d'inversion possible (à priori) entre le jour et le mois
  • si l'année est sur deux caractères, c'est une année du troisième millénaire

edit : préférez la v2a
 

Pièces jointes

  • Nonomix- userform date- v1.xlsm
    26.8 KB · Affichages: 10
Dernière édition:

Nonomix

XLDnaute Nouveau
Bonsoir à tous,

Une autre méthode que j'utilise de temps en temps.
  • on passe d'une textbox à la suivante avec la touche Tab ou la touche entrée
  • on saisit soit un chiffre soit deux chiffres pour le jour ou le mois
  • on saisit soit deux chiffres soit quatre chiffres pour l'année
Tant que la saisie des textbox n'est pas une date, les textbox ont un fond rose.

Merci, ton option me plait bien vu que je n'arrive pas a cacher le calendar et le faire apparaître avec la flèche du ComboBox, mais serait-il possible de possible de passer d'une case à l'autre une fois les deux chiffres saisie et de bloquer la validation avec un formulaire expliquant que la date saisie est incorrect ?
Après il me restera à trouvez le bon emplacement du code pour mon tableau car je découvre seulement la BVA et je trouve que les concepteurs d'Excel n'ont pas su gérer la gestion de la date.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
et de bloquer la validation
C'est déjà fait dans la procédure évènementielle liée au bouton du userform.
Si la date saisie est incorrecte, on ne modifie la cellule A1.

avec un formulaire expliquant que la date saisie est incorrect
Idem. C'est déjà fait dans la v1 par l'affichage d'un message.

serait-il possible de possible de passer d'une case à l'autre une fois les deux chiffres saisie
A venir très prochainement dans la v2 ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
serait-il possible de possible de passer d'une case à l'autre une fois les deux chiffres saisie

Voici la v2 (et sans programmation supplémentaire) :
  • Les textbox2, textbox3 et textbox4 ont des TabIndex qui se suivent
  • Les textbox2 et textbox3 ont la propriété MaxLength à la valeur 2
  • Les textbox2 et textbox3 ont la propriété AutoTab à la valeur True
  • Le textbox4 a la propriété MaxLength à la valeur 4
edit : version v2a
 

Pièces jointes

  • Nonomix- userform date- v2a.xlsm
    29.6 KB · Affichages: 20
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir à tous

@Nonomix je pense que c'est le Control DTpicker 6.0 que tu cherches, il faut voir si tu l'as dans les "additional controls" (Right Click sur la boite à outils de VBE)

1588283069778.png

Sinon il te faut chercher la mscomct2.ocx et l'enregistrer.

Autrement pour une TextBoxDate "Intelligente" je mettrai ceci comme code
VB:
Private Sub CommandButton1_Click()
If Not IsDate(Me.TextBox1.Value) Then
    Me.Label1.Caption = "Grrrrrr, on vous a demandé une Date !"
    Exit Sub
End If

    If Year(Me.TextBox1.Value) <= 1900 Then
        Me.Label1.Caption = "Re-Grrrrrr, on ne vous a pas demandé l'heure !"
        Exit Sub
    End If

Cells(1, 1) = CDate(Me.TextBox1.Value)
End Sub

Private Sub DTPicker1_Change()
Cells(2, 1) = CDate(Me.DTPicker1.Value)
End Sub

Private Sub TextBox1_Change()
Me.Label1.Caption = ""
End Sub

[ATTACH type="full"]1065016[/ATTACH]


Bonne nuit
@+Thierry
 

Pièces jointes

  • TextBoxDate.gif
    TextBoxDate.gif
    93.1 KB · Affichages: 23

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @_Thierry ;),

Autrement pour une TextBoxDate "Intelligente" je mettrai ceci comme code...

Oui mais CDATE (et c'est son problème) interprète abusivement les expressions supposées être des dates. Et un jour, je me suis fait abusé de manière perfide, sournoise et vicieuse. Ca m'a coûté quelques heures pour trouver l'origine de mes résultat étranges à l'époque. Les résultats étaient presque justes (donc totalement faux :mad:)

Si on saisie 12 24 2001 ou bien 12/24/01 dans TextBox1, alors CDATE() trouve une date valide et on met la date du 24/12/2001 en A1. :(

Et si on saisit 29 02 21, alors on place dans A1 la date 21/02/2029. Étrange, non ? Cdate (est ce à son honneur ???) contourne l'année 21 qui n'est pas bissextile.

Enfin si on saisit 01 02 99, on place 01/02/1999 dans A1. A mon avis et depuis l'an 2000, il faudrait plutôt placer 01/02/2099.
 
Dernière édition:

Nonomix

XLDnaute Nouveau
Bonjour à tous,

Je n'ai pas de Control DTpicker 6.0 ni la mscomct2.ocx.

Pour la version v2a, je l'ai insérer dans ma VBA, cela me mets bien en couleur lorsque la date n'est pas correct mais quand je saisie une date correct 09 09 2009 j'ai un message d'erreur qui me dit "La date est incorrecte. Corrigez la avant de valider" je fais "OK" puis tout mon formulaire se ferme, me copie les données saisie sauf la date !!!! De quoi cela pourrais venir, code mis au mauvais endroit ou autre ?
 

patricktoulon

XLDnaute Barbatruc
bonjour
je l'ai donné moult fois pourtant la solution du textbox date forcée avec control de validité dynamique :rolleyes:
il y a un moteur de recherche dans le site ;)

VB:
Option Explicit

Const separator As String = "/"
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    ControlValiddate TextBox1, KeyAscii
End Sub

Private Sub ControlValiddate(txtb, KeyAscii)
    Dim t$
    With txtb
        If Not Chr(KeyAscii) Like "*[0-9]*" Then KeyAscii = 0
        t = Mid(.Value, 1, .SelStart)
        If Len(t) = 2 Or Len(t) = 5 Then t = t & separator
        t = t & Chr(KeyAscii):
        If Len(t) >= 6 Then If Not IsDate(Left(t, 6) & "2000") Then t = Left(t, 3): Beep
        If Len(t) = 10 And Not IsDate(t) Then t = Left(t, 6): Beep
        .Value = Mid(t, 1, 10)
        If Val(.Value) > 31 Then .Value = "": Beep
    End With
    KeyAscii = 0
End Sub

et si il fllait aller un peu plus loin avec par exemple un masque de saisie et la gestion des 3 format de date géré nativement par vba tu a ceci aussi

faut il encore ce donner la peine de chercher ;)

pour info dans l'exemple ici présenté et la ressource du lien les touches suppr et back ne sont pas condamnées
 

Discussions similaires

Réponses
2
Affichages
228
Réponses
2
Affichages
297

Statistiques des forums

Discussions
311 720
Messages
2 081 898
Membres
101 834
dernier inscrit
Jeremy06510