[VBA] format de date dans textbox [Fermé]

Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
- - Dernière réponse :  Syssy - 20 sept. 2016 à 09:48
bonjour

voila j'aimerai savoir comment forcer en VBA sous excel , un utilisateur a mettre une date au format jjmmyy car si par exemple j'ecris 222 dans la textbox il me fais la conversion

je veux que l'utilisateur soit obliger de mettre par exemple 151205 qui sera converti en 15/12/2005

actuellement j'ai ca pour le formatage de la date en 15/12/2005

TXT_du = Left(TXT_du, 2) & "/" & Mid(TXT_du, 3, 2) & "/" & Right(TXT_du, 2)

merci a vous
Afficher la suite 

13 réponses

Meilleure réponse
13
Merci
Salut.

5 ans après et pour ceux qui passeraient par là :

1 - Dans la Sub TextBoxToto_KeyPress de ta TextBox, on n'accepte que des chiffres

Quelque chose du genre :
If KeyAscii < 48 Or KeyAscii > 57 then KeayAscii = 0

2 - Dans la Sub TextBoxToto_BeforeUpdate on contrôle que la valeur saisie soit bien une date. Si ce n'est pas le cas, on refuse la modif (l'ancienne valeur est restaurée) et si c'est le cas on met la valeur saisie au format Date attendu.

Quelque chose du genre :

If IsDate(TextBoxToto.Text) then
TextBoxToto.Text = Format (TextBoxTotot.Text,"dd/mm/yyyy")
Else

Cancel = True
End If


Avec ce code l'utilisateur pourra saisir par exemple 2/2 et ça donnera le 02/02 de l'année courante au format 02/02/2011.

Dès lors l'extraction du mois ne peut pas donner d'erreur dès que la modif a été acceptée. De plus tu peux ajouter tout autre contrôle sur ta date (< date du jour etc...) dans la première branche du If puisque tu sais que tu travailles sur une date valide.

J'espère que ça servira à quelqu'un de passage (et que depuis 2006 tu as résolu ton problème :o).

Dire « Merci » 13

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

CCM 62854 internautes nous ont dit merci ce mois-ci

C'est simple et efficace. Merci.
2
Merci
Slt,

Quelque chose comme :

Private Sub TextBox3_Change()
    Dim Exemple As String
    Dim ExDate As String
    Exemple = TextBox3.Value
    If ((Len(Exemple) > 5) And (Len(Exemple) < 10)) Then
        Application.EnableEvents = False
        ExDate = Mid(Exemple, 1, 2) & "-" & Mid(Exemple, 3, 2) & "-20" & Mid(Exemple, 5)
        TextBox3.Value = ExDate
        Application.EnableEvents = True
    End If
End Sub


Lupin
Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1095
1
Merci
j'aimerai aussi savoir comment empecher de passer au textbox suivant si la date n'est pas correcte
Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1095
1
Merci
Excel
Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1095
1
Merci
merci lupin mais j'ai un petit soucis

quand je saisie ma date normale j'ai en dessous un morceau de code qui me dois en fais recuperer le mois saisie et allez rechercher ce mois ds un tableau

si par exemple je date 220 il me plante sur la ligne de recherche du moi

je te met mon code au cas ou

Exemple = TXT_du.Value
If ((Len(Exemple) > 5) And (Len(Exemple) < 10)) Then
Application.EnableEvents = False
ExDate = Mid(Exemple, 1, 2) & "-" & Mid(Exemple, 3, 2) & "-20" & Mid(Exemple, 5)
TXT_du.Value = ExDate
Application.EnableEvents = True


End If

'exemple de contrôle on ne fait le calcul que si txt_au est rempli

If TXT_au <> "" Then
TXT_TotalJour = CDate(TXT_au) - CDate(TXT_du)
End If
mois_debut = (Mid(TXT_du, 4, 2))
Sheets("Month").Select
Range("LeMois").Find(what:=mois_debut, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False, searchformat:=False).Activate
mois = ActiveCell.Offset(0, 1).Value
Sheets("Calendrier").Select
jour_debut = Left(TXT_du, 2)
Range(mois).Select
Range(mois).Find(what:=jour_debut, after:=ActiveCell, LookIn:=xlFormulas, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False, searchformat:=False).Activate
jour = ActiveCell.Value
an = 2000 + Format(Right(TXT_du, 2), "00")
Label6.Caption = jour & " " & mois & " " & an

en fait ca plante sur la ligne qui commence par Range("LeMois")
1
Merci
re :

Sub TestExemple()

    Exemple = Txt_Du.Value
    If ((Len(Exemple) > 5) And (Len(Exemple) < 10)) Then
        Application.EnableEvents = False
        ExDate = Mid(Exemple, 1, 2) & "-" & Mid(Exemple, 3, 2) & "-20" & Mid(Exemple, 5)
        Txt_Du.Value = ExDate
        Application.EnableEvents = True
    End If
    '
    'exemple de contrôle on ne fait le calcul que si txt_au est rempli
    '
    If (TXT_au.Value <> "") Then
        TXT_TotalJour = CDate(TXT_au) - CDate(Txt_Du)
    End If
    mois_debut = (Mid(Txt_Du.Value, 4, 2))
    Sheets("Month").Select
    mois = Range("LeMois").Find(what:=mois_debut).Offset(0, 1).Value
    'mois = ActiveCell.Offset(0, 1).Value
    Sheets("Calendrier").Select
    jour_debut = Left(Txt_Du, 2)
    Range(Format(mois, "00")).Select
    jour = Range(mois).Find(what:=jour_debut).Value
    'jour = ActiveCell.Value
    an = 2000 + Format(Right(Txt_Du, 2), "00")
    Label6.Caption = jour & " " & mois & " " & an
'

End Sub


et j'assume que [ LeMois ] est une plage nommé !
est-ce une seule cellule ou vraiment une plage nommé !

Lupin
Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1095
1
Merci
oui c une plage nommé

par contre je viens de tester et si dans ma textbox je tape par exemple 220 j'ai un message d'erreur

variable d'objet ou variable de bloc with non définie

et le message se rapporte a
mois = Range("LeMois").Find(what:=mois_debut).Offset(0, 1).Value
1
Merci
re:

mois = Range("LeMois").Find(what:=mois_debut).Offset(0, 1).Value

c'est possible, je n'ai jamais utilisé la méthode [OffSet]
sur un find !

ta façon de faire semble mieux !

Range("LeMois").Find(what:=mois_debut).Value
mois = Activecell.Offset(0,1).Value

peut-être que :
mois = range(Range("LeMois").Find(what:=mois_debut).Address).Offset(0,1).Value

[Application.EnableEvents = False] est utilisé à l'intérieur
de [TextBox3_Change] pour ne pas engendrer de récursivité
sur l'objet.

Lupin
1
Merci
salut
on fé du reporting sur un fichier et il ya uune colonne spécial date
je vx prendre en considération ke lé cellules ki sont inférieur au mois ou lon fé loperation
g donc créer un msbgx ki invite a entrer la date du mois et le code en bas pour faire linversion du format américain o format francé (ds le fichier source c en amrécian(mm/dd/yyyy)
il me donne un message derreur"invalid use of null"



Dim x As Date
file = InputBox("Entrez la Date du Reporting")
x = datereporting = Format(datereporting, "mm/dd/yyyy")
Selection.AutoFilter Field:=1, Criteria1:="<" & datereporting
Dim i As Long
For i = FirstLineIndex To LastLineIndex
'Sélectionne la cellule
Cells(i, ColIndex).Select
With Selection
If IsDate(.Value) Then
'Condition d'inversion
If .NumberFormat = "mm/dd/yyyy" Then
'Mémorise la date
myDate = .Value
'Transforme le type du format date
.NumberFormat = "dd/mm/yyyy"
'Transforme la date en inversant les valeurs du mois et du jour

End If
End If
End With
Next i
Messages postés
23911
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 mars 2019
2691
0
Merci
Salut,

sous quelle application ? (ACCESS, EXCEL..)
Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1095
0
Merci
une autre chose aussi je suppose que la propriété application.enableevents empeche de passer a la txtbox suivante mais moi qu'elle soit sur true ou false le changement se fais

si je saisie une date inferieur a la date du jour je passe quand meme a la suivante
Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1095
0
Merci
ok ben j'essaierai des que possible
0
Merci
on tape la date au format 11051988 et on obtient à la sortie du textbox 11/05/1988. (obligation de saisie de 8chiffres sinon le textbos se vide.)

Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Dim Exemple As String
Dim ExDate As String
Exemple = TextBox5.Value
If (Len(Exemple) = 8) Then
ExDate = Mid(Exemple, 1, 2) & "/" & Mid(Exemple, 3, 2) & "/" & Mid(Exemple, 5)
TextBox5.Value = ExDate
Else:
TextBox5.Value = ""
End If