OVH Cloud OVH Cloud

Re: Date dans TextBox

16 réponses
Avatar
David
Et une autre erreur repérée

Quand on tape 1213 par exemple

10 réponses

1 2
Avatar
Ilan
Effectivement,
Ajoute dans le code les lignes indiquees

....
....
End Select
If Mois>12 then Mois <= Test mois>12
If Mois<>12 then JourMax=......
If Jour<=0 then jour=1 <= Test jour<=0
If Jour>JourMax Then ......



Et une autre erreur repérée

Quand on tape 1213 par exemple






Avatar
David
Bonjour Ilan

Merci pour toutes tes réponses

Mais là j'ai la grosse tête. Je suis plus

Je modifie ou ? quoi ?
Avatar
Ilan
Tiens voila tout le code corrige

Sub TextBox5_AfterUpdate()
Dim jour As integer, mois As Integer, annee As Integer
Dim JourMax As Integer
jour = Day(Date)
mois = month(Date)
annee = Year(Date)
JourMax = 31
Select Case Len(TextBox5.Value)
Case Is = 5, 6
jour = CInt(Left(TextBox5.Value, Len(TextBox5.Value) - 4))
mois = CInt(Mid(TextBox5.Value, Len(TextBox5.Value) - 3, 2))
annee = CInt(Right(TextBox5.Value, 2))
Case Is = 3, 4
jour = CInt(Left(TextBox5.Value, Len(TextBox5.Value) - 2))
mois = CInt(Right(TextBox5.Value, 2))
Case Is = 1, 2
jour = CInt(TextBox5.Value)
End Select
If mois > 12 Then mois = 12
If mois <> 12 Then JourMax = Day(DateAdd("d", -1, "01/" & mois + 1 & "/" &
annee))
If jour <= 0 Then jour = 1
If jour > JourMax Then jour = JourMax
TextBox5.Value = CDate(jour & "/" & mois & "/" & annee)
End sub
Avatar
isabelle
bonjour David,

voici une autre approche,
________________________________________________________________________

à copier sur la page code du userform,

Private Sub TextBox1_Change()
TextBox1 = LaDateISO(TextBox1)
End Sub
________________________________________________________________________

à copier sur la page code d'un module standard,

Function LaDateISO(Tbox As MSForms.TextBox)
'Format aaaa/mm/jj
Dim Nb As Integer, R As String, G As String
Dim T As String, arr(), A As Integer
arr = Array("/", "/", " ")
T = Tbox
For Each elt In arr
T = Replace(T, elt, "")
Next
Nb = Len(T)
If Nb > 8 Then
Tbox = Left(Tbox, Len(Tbox) - 1)
LaDateISO = Tbox
Exit Function
End If
For A = 1 To Nb
If IsNumeric(Mid(T, A, 1)) = True Then
R = R & Mid(T, A, 1)
End If
Next
If Nb >= 4 And Nb <= 6 Then
G = Left(R, 4) & "/" & Right(R, Len(R) - 4)
ElseIf Nb > 6 And Nb <= 8 Then
G = Left(R, 4) & "/" & Mid(R, 5, 2) & "/" & Right(R, Len(R) - 6)
Else
G = R
End If
LaDateISO = G
End Function
________________________________________________________________________

ou bien celle ci pour un format différent de date,
(dans la procédure TextBox1_Change modifier LaDateISO par LaDate)

Function LaDate(Tbox As MSForms.TextBox)
'Format jj/mm/aaaa
Dim Nb As Integer, R As String, G As String
Dim T As String, arr(), A As Integer
arr = Array("/", "/", " ")
T = Tbox
For Each elt In arr
T = Replace(T, elt, "")
Next
Nb = Len(T)
If Nb > 8 Then
Tbox = Left(Tbox, Len(Tbox) - 1)
LaDate = Tbox
Exit Function
End If
For A = 1 To Nb
If IsNumeric(Mid(T, A, 1)) = True Then
R = R & Mid(T, A, 1)
End If
Next
If Nb >= 2 And Nb <= 5 Then
G = Left(R, 2) & "/" & Right(R, Len(R) - 2)
ElseIf Nb > 5 And Nb <= 10 Then
G = Left(R, 2) & "/" & Mid(R, 3, 2) & "/" & Right(R, Len(R) - 4)
Else
G = R
End If
LaDate = G
End Function
________________________________________________________________________


isabelle
Avatar
David
Merci Ilan

Je vais voir ce que je fais car Isabelle me propose deux autres solutions.

Je test

Encore merci
Avatar
David
Bonjour et merci Isabelle. Je c'est plus quoi faire.

Toute les solutions sont presque bonne mais c'est le presque qui me gène

Bonne soirée
Avatar
David
Bonjour Ilan

1° je saisie une date, je quitte le textbox, je reviens sur le textbox pour
pouvoir modifier par exemple le mois. Impossible, cela met le mois en cours.

2° je saisie une date, je quitte le textbox, je reviens sur le textbox pour
supprimer la date. Impossible

Peut'on modifier ?

Merci de ton aide

David



Sub TextBox5_AfterUpdate()
Dim jour As Integer, mois As Integer, annee As Integer
Dim JourMax As Integer
jour = Day(Date)
mois = Month(Date)
annee = Year(Date)
JourMax = 31
Select Case Len(TextBox5.Value)
Case Is = 5, 6
jour = CInt(Left(TextBox5.Value, Len(TextBox5.Value) - 4))
mois = CInt(Mid(TextBox5.Value, Len(TextBox5.Value) - 3, 2))
annee = CInt(Right(TextBox5.Value, 2))
Case Is = 3, 4
jour = CInt(Left(TextBox5.Value, Len(TextBox5.Value) - 2))
mois = CInt(Right(TextBox5.Value, 2))
Case Is = 1, 2
jour = CInt(TextBox5.Value)
End Select
If mois > 12 Then mois = 12
If mois <> 12 Then JourMax = Day(DateAdd("d", -1, "01/" & mois + 1 & "/" &
annee))
If jour <= 0 Then jour = 1
If jour > JourMax Then jour = JourMax
TextBox5.Value = CDate(jour & "/" & mois & "/" & annee)
End Sub
Avatar
Ilan
Bonjour David,
Essaie l'ensemble du code suivant.
Chez moi ca semble marcher correctement. Mais c'est a toi de voir.

Sub TextBox5_AfterUpdate()
Dim jour As Integer, mois As Integer, annee As Integer
Dim JourMax As Integer
Dim DateEntree As String
Dim SepPos As Byte
jour = Day(Date)
mois = Month(Date)
annee = Year(Date)
JourMax = 31
DateEntree = TextBox5.Value
SepPos = InStr(1, DateEntree, "/")
If SepPos > 0 Then
jour = CInt(Left(DateEntree, SepPos - 1)): DateEntree =
Right(DateEntree, Len(DateEntree) - SepPos)
SepPos = InStr(1, DateEntree, "/")
If SepPos > 0 Then
mois = CInt(Left(DateEntree, SepPos - 1)): DateEntree =
Right(DateEntree, Len(DateEntree) - SepPos)
annee = CInt(DateEntree)
Else
mois = DateEntree
End If
Else
jour = CInt(DateEntree)
End If
If mois = 0 Then mois = 1
If mois > 12 Then mois = 12
If mois <> 12 Then JourMax = Day(DateAdd("d", -1, "01/" & mois + 1 & "/" &
annee))
If jour <= 0 Then jour = 1
If jour > JourMax Then jour = JourMax
TextBox5.Value = Format(jour & "/" & mois & "/" & annee, "dd/mm/yyyy")
End Sub

Private Sub TextBox5_Enter()
TextBox5.MaxLength = 10
End Sub

Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii <> 8 And KeyAscii <> 10 And KeyAscii <> 13 And (KeyAscii < 48 Or
KeyAscii > 57) Then
KeyAscii = 0
Exit Sub
Else
If Len(TextBox5.Text) = 2 Or Len(TextBox5.Text) = 5 Then TextBox5.Text
= TextBox5.Text + "/"
End If
End Sub
Avatar
David
Bonjour Ilan

Une nouvelle fois, merci pour ton aide

Encore une petite erreur mais je pense que tu n'est pas loin.

Si je rentre une date et que je reviens pour l'effacer cela met

incompatilité de type erreur 13 à cette ligne: jour = CInt(DateEntree)

Désolé de te donner autant de travail

Encore merci

David
Avatar
Ilan
Ouaip, effectivement

Remplace la procedure TextBox5_AfterUpDate par celle-ci

Sub TextBox5_AfterUpdate()
Dim jour As Integer, mois As Integer, annee As Integer
Dim JourMax As Integer
Dim DateEntree As String
Dim SepPos As Byte
jour = Day(Date)
mois = Month(Date)
annee = Year(Date)
JourMax = 31
DateEntree = TextBox5.Value
If Len(DateEntree) > 0 Then
SepPos = InStr(1, DateEntree, "/")
If SepPos > 0 Then
jour = CInt(Left(DateEntree, SepPos - 1)): DateEntree =
Right(DateEntree, Len(DateEntree) - SepPos)
SepPos = InStr(1, DateEntree, "/")
If SepPos > 0 Then
mois = CInt(Left(DateEntree, SepPos - 1)): DateEntree =
Right(DateEntree, Len(DateEntree) - SepPos)
annee = CInt(DateEntree)
Else
mois = DateEntree
End If
Else
jour = CInt(DateEntree)
End If
End If
If mois <= 0 Then mois = 1
If mois > 12 Then mois = 12
If mois <> 12 Then JourMax = Day(DateAdd("d", -1, "01/" & mois + 1 & "/" &
annee))
If jour <= 0 Then jour = 1
If jour > JourMax Then jour = JourMax
TextBox5.Value = Format(jour & "/" & mois & "/" & annee, "dd/mm/yyyy")
End Sub



Bonjour Ilan

Une nouvelle fois, merci pour ton aide

Encore une petite erreur mais je pense que tu n'est pas loin.

Si je rentre une date et que je reviens pour l'effacer cela met

incompatilité de type erreur 13 à cette ligne: jour = CInt(DateEntree)

Désolé de te donner autant de travail

Encore merci

David






1 2