Formatage 'textbox' pour un format heure

Bonjour,

Je me permets de solliciter votre aide concernant le formatage d'une 'textbox' contenant des horaires, pour mes formulaires.

Actuellement, j'utilise le code suivant pour afficher automatiquement un "masque" à la valeur entrée par l'utilisateur. Ainsi lorsque ce dernier entre 0830 ou 1925, le symbole : apparaît au milieu de la chaîne de caractères.

Private Sub TextBox1_Change()
'exemple pour format xx:xx
Dim Valeur As Byte
TextBox1.MaxLength = 5 'nb caracteres maxi dans textbox

Valeur = Len(TextBox1)
If Valeur = 2 Then TextBox1 = TextBox1 & ":"
End Sub

Toutefois, j'aimerais améliorer ce formatage de deux façons mais je ne sais pas comment y parvenir...

- D'une part, j'aimerais ajouter automatiquement le symbole ":" pour toutes les heures avant midi lorsque l'utilisateur entre une heure sous ce format 600 ou 002 ou 952 pour que ces nombres se transforment en 6:00 ou 0:02 ou 9:52.

- D'autre part, lorsqu'il y a une erreur de saisie, j'aimerais que ma textbox se réinitialise lorsque l'utilisateur utilise la touche "retour arrière" de son clavier.

Merci d'avance pour votre aide !

Je vous joints mon fichier de test :

42textbox-heure.xlsm (25.74 Ko)

Cordialement,

Baptiste.

Comment dire à Excel ce que veut la personne qui saisi : 142?

Cela peut devenir 01:42 ou 14:20!

Il vaut mieux demander à la personne de placer un signe entre heures et minutes

Cdt

Bonjour,

Comment dire à Excel ce que veut la personne qui saisi : 142?

Il n'y a pas un moyen de préciser des intervalles à Excel ? Par exemple 000 à 959 et 1000 à 2359 ?

Il vaut mieux demander à la personne de placer un signe entre heures et minutes

C'est une perte de temps pour nos besoins et nous sommes habitués à ce que le signe entre heures et minutes se place automatiquement

Cdt.

D'accord et vous imposer a l'utilisateur de toujours taper deux chiffres pour les minutes ex: 40mn;01mn

10mn ce qui donne 940; 101; ou 1410

etc...

Bonjour,

Ce formulaire me paraitrait mieux approprié.

116textbox-heure1.xlsm (22.15 Ko)

super je le garde pour moi, mais Horusbk sera t-il content de faire 83 clics pour avoir 24h59?

mais Horusbk sera t-il content de faire 83 clics pour avoir 24h59?

83 clics ne sont pas nécessaires. Il suffit d'utiliser le défilement rapide en maintenant appuyé le clic gauche de la souris ….

Bonjour thev

Merci pour ta réponse, par contre je rejoins Toukoul sur le fait que c'est un peu long de cliquer ou faire défiler les ScrollBar pour sélectionner les heures et minutes.

Cdt, Horusbk

Merci Thev, je pose un genou à terre et attends le plat de l'épée sur l'épaule.

mais va t il falloir lui faire une procédure de contrôle de saisie?

Merci pour ta réponse, par contre je rejoins Toukoul sur le fait que c'est un peu long de cliquer ou faire défiler les ScrollBar pour sélectionner les heures et minutes.

Certes, mais ceci peut être fortement réduit selon les tranches d'heure ou de minutes à rentrer.

par exemple si la tranche d'heures est 8h00 -- 20h00 et si les tranches de minutes sont toutes les 15 ou 5 minutes.

Re Thev,

Je comprends, par contre dans notre situation on ne peut pas définir à l'avance des tranches horaires car le plus souvent nous ajoutons l'heure à laquelle l’événement se produit.

J'ai essayé d'adapter la programmation du formulaire que j'ai indiqué dans mon premier message :

Cependant, j'arrive à obtenir des formats en 0:02 mais plus en 10:00.

Private Sub TextBox1_Change()
Dim Valeur As Byte
TextBox1.MaxLength = 5 'nb caracteres maxi dans textbox
Valeur = Len(TextBox1)

If 0 < Val(TextBox1.Value) <= 959 Then
    If Valeur = 1 Then TextBox1 = TextBox1 & ":"
ElseIf 1000 <= Val(TextBox1.Value) <= 2359 Then
    If Valeur = 2 Then TextBox1 = TextBox1 & ":"
End If
End Sub

Cdt, Horusbk

Bonjour

il faut faire un keypress a voir

Private Sub Textbox1_keypress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim AKey$
AKey = "[01234567989:]"
If Not ChrW(KeyAscii) Like AKey Then KeyAscii = 0
If Len(TextBox1) = 5 Then KeyAscii = 0: Exit Sub
If Len(TextBox1) = 0 And Not ChrW(KeyAscii) Like "[0-1-2]" Then KeyAscii = 0
If Len(TextBox1) = 1 And TextBox1 = 2 And Not ChrW(KeyAscii) Like "[0-1-2-3]" Then KeyAscii = 0
If Len(TextBox1) = 3 And Not ChrW(KeyAscii) Like "[0-1-2-3-4-5]" Then KeyAscii = 0
If Len(TextBox1) = 2 Then
   If ChrW(KeyAscii) <> ":" Then KeyAscii = Asc(":")
End If
End Sub

A+

Maurice

Bonjour Maurice,

Merci pour ta réponse.

Est-ce possible de créer des formats en 0:20, 9:21 également ?

Actuellement lorsque je teste un 0:23 j'obtiens 02:3

A+ Horusbk

Bonjour

tu remplace

aller amuse toi bien

A+

Maurice

Bonjour,

Autre proposition qui me parait plus simple

Encore plus simple!

re !

Merci pour vos réponses. Je n'avais pas pensé à appliquer le format lors de la validation du formulaire. C'est une bonne idée je trouve.

Merci à tous.

Horusbk

Rechercher des sujets similaires à "formatage textbox format heure"