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

Signaler
Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
-
 nabilone -
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

13 réponses

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).
13
Merci

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez Comment Ça Marche

CCM 63032 internautes nous ont dit merci ce mois-ci

C'est simple et efficace. 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
1 116
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
1 116
Excel
Messages postés
4807
Date d'inscription
lundi 30 mai 2005
Statut
Contributeur
Dernière intervention
9 septembre 2009
1 116
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")
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
1 116
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
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
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
23761
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
13 janvier 2020
2 852
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
1 116
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
1 116
ok ben j'essaierai des que possible
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