Pb format date et heure

Bonjour

Ci joint un code pour un formulaire :

' Ferme mon UserForm avec le bouton
Private Sub CommandButton1_Click()
  Unload Me
End Sub

Private Sub CommandButton2_Click()
If TextBox1 = "" Or texbox1 = "jj/mm/aaaa" Or TextBox2 = "" Or TextBox2 = "hh:mm" Or TextBox3 = "" Or TextBox3 = "jj/mm/aaaa" Or TextBox4 = "" Or TextBox4 = "hh:mm" Or TextBox5 = "" Or TextBox6 = "" Or ComboBox1 = "" Or ComboBox2 = "" Or ComboBox3 = "" Or ComboBox4 = "" Then
MsgBox ("Tous les champs ne sont pas remplis")
Else
    If Sheets("feuil2").Range("A2") = "" Then
    Sheets("feuil2").Range("A2") = ComboBox1
    Else
    Sheets("feuil2").ListObjects(1).ListRows.Add
    End If

    dlt = Sheets("feuil2").Range("A1048576").End(xlUp).Row

    Sheets("feuil2").Range("a" & dlt) = ComboBox1
    Sheets("feuil2").Range("b" & dlt) = ComboBox2
    Sheets("feuil2").Range("c" & dlt) = ComboBox3
    Sheets("feuil2").Range("d" & dlt) = ComboBox4
    TextBox1 = Format(TextBox1, "mm/dd/yyyy") ' date début
    Sheets("feuil2").Range("e" & dlt) = TextBox1.Value
    TextBox3 = Format(TextBox3, "mm/dd/yyyy") ' date fin
    Sheets("feuil2").Range("f" & dlt) = TextBox3.Value
    TextBox2 = Format(TextBox2, "hh:nn") ' heure début
    Sheets("feuil2").Range("g" & dlt) = TextBox2.Value
    TextBox4 = Format(TextBox4, "hh:nn") ' heure fin
    Sheets("feuil2").Range("h" & dlt) = TextBox4.Value
    Sheets("feuil2").Range("i" & dlt) = TextBox5
    Sheets("feuil2").Range("j" & dlt) = TextBox6
End If
Unload Me       ' Ferme le formulaire
UserForm1.Show  ' rouvre le formulaire mais vide
End Sub

Private Sub TextBox1_AfterUpdate()
On Error GoTo messagerreur
TextBox1 = Format(TextBox1, "short date")
Exit Sub
messagerreur:
    MsgBox ("le format date n'est pas valide, il faut : Jour/Mois/année !")
    TextBox1 = Empty
End Sub

' lorsque l'on click dans la zone de text
' le format date disparait
Private Sub TextBox1_Enter()
    If TextBox1 = "jj/mm/aaaa" Then
    TextBox1 = ""
    End If
End Sub

' lorsque l'on click dans la zone de text
' le format date réapparait
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1 = "" Then
    TextBox1 = "jj/mm/aaaa"
    End If
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' Permet de sélectionner les chiffres et la barre / , uniquement.
' 123456789/
    If Not ((KeyAscii > 46 And KeyAscii < 58)) Then
    KeyAscii = 0
    End If
End Sub

' lorsque l'on click dans la zone de text
' le format heure disparait
Private Sub TextBox2_enter()
    If TextBox2 = "hh:mm" Then
    TextBox2 = ""
    End If
End Sub

' lorsque l'on click dans la zone de text
' le format heure réapparait
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox2 = "" Then
    TextBox2 = "hh:mm"
    End If
End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' Permet de sélectionner les chiffres et les : , uniquement.
' 123456789:
    If Not ((KeyAscii > 47 And KeyAscii < 59)) Then
    KeyAscii = 0
    End If
End Sub

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' Permet de sélectionner les chiffres et la barre / , uniquement.
' 123456789/
    If Not ((KeyAscii > 46 And KeyAscii < 58)) Then
    KeyAscii = 0
    End If
End Sub
Private Sub TextBox3_AfterUpdate()
On Error GoTo messagerreur
TextBox3 = Format(TextBox3, "short date")
Exit Sub
messagerreur:
    MsgBox ("le format date n'est pas valide, il faut : Jour/Mois/année !")
    TextBox3 = Empty
End Sub

' lorsque l'on click dans la zone de text
' le format date disparait
Private Sub TextBox3_Enter()
    If TextBox3 = "jj/mm/aaaa" Then
    TextBox3 = ""
    End If
End Sub

' lorsque l'on click dans la zone de text
' le format date réapparait
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox3 = "" Then
    TextBox3 = "jj/mm/aaaa"
    End If
End Sub

' lorsque l'on click dans la zone de text
' le format heure disparait
Private Sub TextBox4_enter()
    If TextBox4 = "hh:mm" Then
    TextBox4 = ""
    End If
End Sub

' lorsque l'on click dans la zone de text
' le format heure réapparait
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox4 = "" Then
    TextBox4 = "hh:mm"
    End If
End Sub

Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' Permet de sélectionner les chiffres et les : , uniquement.
' 123456789:
    If Not ((KeyAscii > 47 And KeyAscii < 59)) Then
    KeyAscii = 0
    End If
End Sub

' Lors de l'ouverture de UserForm,
' les dates/heures s'initialise avec le format
' jj/mm/aaaa et hh:mm
Private Sub UserForm_Initialize()
TextBox1.Text = "jj/mm/aaaa"
TextBox3.Text = "jj/mm/aaaa"
TextBox2.Text = "hh:mm"
TextBox4.Text = "hh:mm"

'
With ComboBox1
.AddItem "totot"
.AddItem "tutu"
End With

' ici, la position physique 
' sur le terrain
With ComboBox2
.AddItem "1"
.AddItem "2"
.AddItem "3"
.AddItem "4"
.AddItem "5"
End With

' Ici tous les techniciens
'
With ComboBox3
.AddItem "zed"
.AddItem "zud"
End With

End Sub

mon soucis est que quand je rentre des dates ex : 02/02/20589 il accepte l'année ??

et que quand je rentre des heures ex : 12:5686 il accepte aussi les minutes ??

de même pour : 1536:258 ??

bonjour toutes et tous

@ tester nn par mm

"hh:nn"

par

"hh:mm"


Or texbox1

par Or Textbox1 (j'pense)


crdlt,

André

merci

en effet erreur de frappe.

Mais j'ai tour mon pb.

De plus si dans date je tape 1 et que je passe a un autre champ, il me met 31/12/1899 ? même pas 01/01/1900 ?

Re,

@Quattro26140

Et en reproduisant sur un autre classeur,en limitant le nombre de textbox, combobox etc.

regarde ci-dessous si,cela peut aider:

' Exemple avec l'Userform1 comprenant une textbox

'Déclaration de la variable madate
Dim madate As Date

madate = Now() ' la date et l'heure du jour Now pour maintenant

' Exemple reference d'une textbox quelconque d'un userform pour la date
Userform1.TextBox1.Value = Format (madate, "DD/MM/YYYY")

crdlt,

André

merci

Il y a quand même un soucis.

Lorsque je rentre une date ex : 69/03/2020 dans le formulaire, il m'indique dans le tableau excel la même chose ??

Lorsque je rentre une date ex : 153 dans le formulaire, il m'indique dans le tableau excel : 03/06/1900 ?? je comprend que 153 = cette date. mais c'est pas se que je veux. Normalement j'ai un code qui gère les erreurs et devrait me mettre une erreur, car 153 ne correspond pas au format date :

Private Sub TextBox1_AfterUpdate()
On Error GoTo messagerreur
TextBox1 = Format(TextBox1, "short date")
Exit Sub
messagerreur:
    MsgBox ("le format date n'est pas valide, il faut : Jour/Mois/année !")
    TextBox1 = Empty
End Sub

j'ai pas l'impression que ca fct ??

ci joint mon fichier

Bonsoir Quattro26140 & André13,

Pour résoudre ton souci de date. Ajoute dans des TextBox prenant la date:

Exemple pour TextBox1

Private Sub Textbox1_KeyPress(ByVal KeyAscii As MsForms.ReturnInteger)
If not ((KeyAscii > 46 and KeyAscii <58)) or Len(TextBox1.Text)>9 then KeyAscii = 0
End Sub
Private Sub Textbox1_Exit(ByVal Cancel as MSForms.ReturnBoolean)
If Not IsDate(Textbox1.Text) Then Rep=MsgBox("Erreur Date. Recommencez.", vbCritical, "ATTENTION"):Texbox1.Text=""

Ceci afin de ne pas accepter des dates invalides en quittant le Textbox.

Bons tests, bonne continuation.

Suite,

L' année peut être bloquée à 4 chiffres en rajoutant

Private Sub Textbox1_Exit(ByVal Cancel as MSForms.ReturnBoolean)
If Not IsDate(Textbox1.Text) Or Len(TextBox1.Text)<>10 Then Rep=MsgBox("Erreur Date. Recommencez.", vbCritical, "ATTENTION"):Texbox1.Text=""

Re,

Bonjour et merci X Cellus

une petite aide sup. calendrier que rdurupt a élaboré d'adapté un calendrier pour les dates (merci à lui) il en existe pas mal

ci-joint un mixe de tout çà et cela devrait être presque ok

crdlt,

André

ztest77

Merci à vous

@Andre13 très bien le calendar par contre pourquoi quand je click sur une date du calendrier et ensuite je dois double cliqué sur textbox3 pour qu'elle s'ajoute ?

@X Cellus, j'ai rentré les codes cela fonctionne, par contre cela ne resoud pas le fait qui si je rentre par inadvertance ex :153 dans le champ date, cela me mettra la date en : 01/06/1900.

il faudrait un message d'erreur ?

Merci à vous

@Andre13 très bien le calendar par contre Février est manquant, est ce normal ?

CBox_Mois.AddItem "février"

tu peux l'ajouter bien vu ( je n'avais même pas vu)

crdlt,

André

A nouveau Andre13 et Quattro26140,

Effectivement j'ai un calendrier similaire. Je ne l'ai pas proposé car le besoin me semblait plus sur une modification d'un code existant que de l'ajout de plusieurs lignes de code pour créer un calendar. Mais son avantage est qu'un calendrier formate la date. Donc moins d'erreurs.

Si tu rentres 153, il s' affichera dans le textbox mais l'évènement Textbox_exit l'annulera quand tu sortiras du contrôle. Le textbox deviendra vide et il faudra donc recommencer à entrer une date. Si la date entrée dans le textbox est valide, elle restera affichée dans celui-ci.

As tu résolu le souci d'heure et minutes? Que j'ai vu par la suite. J'ai aussi quelques lignes de code pour passer cette validation. Je te l'envoie dès la fin du film que je regardes actuellement.

À suivre...

En fait quand je rentre 153, et que je passe à un autre champ, et bien 153 disparaît et est transformé en la date de 1900 ?

De plus, si je rempli tous les champs et que je valide, mon tableau Excel sera inscrit avec cette date de 1900...?

Suite,

Justement s'il disparaît c'est que ton entrée n'est pas valide et qu'il faut revenir sur le textbox pour corriger cette erreur. Le textbox doit te laisser apparaître une date valide. Ainsi cela signifie que c'est bon. Et permet de passer au textbox suivant.

On pourrait ajouter un message d'erreur te demandant de corriger. Pourquoi pas? Mais cela alourdit la procédure. Voire changer la couleur de fond du textbox pour accentuer l'erreur.

Pour la vérification du temps. Je te propose dans le textbox le gérant le code suivant.

Private sub textbox_keypress(...

If Not ((keyascii >47 and keyascii <59 or Len(textbox) >4 then keyascii=0

End sub

Puis

Private sub textbox_exit(byval...

Dp= Mid(textbox, 3,1):Lg=Len(textbox)

If Lg<>5 or Dp<>":" then rep=MsgBox(...):textbox="":Exit sub

Gauche=Cint(Left(textbox, 2)): Droite=Cint(Right(textbox, 2))

If gauche>24 or droite>59 or (gauche=24 and droite>0 then rep=Msgbox(...) :textbox=""

End sub

Complete avec le nom exacte du textbox. Et aussi les ... Mis pour aller plus vite et que tu connais déjà pour l'avoir dans ton programme.

Bons tests, bonne continuation.

Merci

Je vais tester tout ça.

@Andre13 très bien, par contre pourquoi quand je click sur une date du calendrier et ensuite je dois double cliqué sur textbox3 pour qu'elle s'ajoute ?

Bonjour Quattro26140,

Ci-joint fichier exemple d'un calendrier avec insertion directe de la date dans un textbox par clic sur un calendrier.

Erreur de sujet pour ma part !

Rechercher des sujets similaires à "format date heure"