Obliger saisie heure au format 24h avec inputbox

orphelion

XLDnaute Occasionnel
Bonjour a tous, bonjour le forum,

je travaille au format anglais sous excel et la saisie des heures peut varier suivant l'operateur entrant les donnees.

Je souhaite ouvrir une fenetre precisant a l'operateur d'entrer l'heure au format 24h (inputbox) et copier sa valeur dans la case adequate, tout cela avec un private sub.

J'ai fait quelques tentatives infrutueuses jusqu'a maintenant. Vos lumieres me seraient tres utiles:)

Merci d'avance!
 

Pièces jointes

  • fichier exemple.zip
    16.3 KB · Affichages: 93
  • fichier exemple.zip
    16.3 KB · Affichages: 90
  • fichier exemple.zip
    16.3 KB · Affichages: 93

wilfried_85

XLDnaute Nouveau
Re : Obliger saisie heure au format 24h avec inputbox

Bonjour,

je crois, à moins que tu ne saisisses que des horraires apres 12:00, que cela ne soit impossible, comment une macro peut elle faire la différence entre 10:00 et 22:00. La saisie d'une donnée est faite pas un être humain et si celui-ci veut mettre 10:00 à la place de 22:00 tu ne pourras rien y faire. La macro ne pourra que définir si c'est un format Horraire ou pas.

Maintenant si c'est l'heure de saisie qui doit être mise, je ne vois pas l'intérêt de la faire saisir. Time peut aussi bien faire l'affaire.

à te lire pour + de précision si nécessaire.
 

JNP

XLDnaute Barbatruc
Re : Obliger saisie heure au format 24h avec inputbox

Bonjour le fil :),
Si j'ai bien compris, le problème vient de la saisie éventuelle au format anglais, type "pm 9:0" :rolleyes:...
Si c'est ça, à tester
Code:
Private Sub worksheet_change(ByVal Target As Range)
If Not Intersect(Target, [A2:A300]) Is Nothing Then
    If IsNumeric(Target) Or Target = "NR" Then Exit Sub
    If InStr(1, UCase(Target), "AM") <> 0 Then Target _
        = Replace(Replace(UCase(Target), "AM", ""), " ", "")
    If InStr(1, UCase(Target), "PM") <> 0 Then Target _
        = Replace(Replace(UCase(Target), "PM", ""), " ", ""): Target = Target + 0.5
    If Not IsNumeric(Target) And Target <> "NR" Then
        MsgBox "Please enter a number or NR."
        Target.ClearContents
        Target.Select
    End If
End If
End Sub
Bonne journée :cool:
 

orphelion

XLDnaute Occasionnel
Re : Obliger saisie heure au format 24h avec inputbox

Bonjour Wilefried_85, Bonjour JNP, le fil :)

Effectivement je ne pense pas que mon probleme soit facile facile.
et malheureusement JNP ta proposition ne me sauve pas (pour le moment:))

il est clair que l'on ne peut pas empecher l'utilisateur de rentrer 10:00 ou 22:00.
Toutefois peut on envisager d'inclure une condition tel que l'heure rentree ne depasse pas +/- 12h l'heure de saisie ( now()+0.5 or now() -0.5 ).
si tel est le cas demander a l'utilisateur de verifier sa saisie et l'ecriture au format 24h.
Code:
MsgBox " Please ensure to insert time in the following format 21h, if not running or no sample, enter NR."

De plus il me faudra ajouter le droit d'entrer le texte NR en cas de valeur non existante.
Code:
If cible = "NR" then exit sub

Merci beaucoup pour votre aide.

PS: JNP tu as bien vu que j'ai deja un private sub sur une autre colonne, je mixerai tout ca plus tard pas besoin de t'empeter. merci.
 

wilfried_85

XLDnaute Nouveau
Re : Obliger saisie heure au format 24h avec inputbox

re:

Je ne sais pas si la saisie d'une heure antérieure est possible, si c'est le cas, c'est une idée qui peut etre viable pour certains cas.

Refuser toutes les saisies < à l'heure actuelle
Tester si l'heure actuelle et supérieure à 12:00 si c'est le cas
verifier si l'heure saisie est > 12:00 si c'est le cas
demander la confirmation de la saisie de l'heure en proposant soit la même heure soit l'heure + 12:00
Code:
dim h as date, s as string, ok as boolean
    ok = false
    while ok = false
         s = inputbox "Donnez l'heure : "
         on error goto erreur
         h = cdate(s)
         on error goto 0
         ok = true
         goto suite
erreur:
         msgbox "l'heure saisie n'est pas au format horraire ! "
    wend
    if time > cdate("11:59") then
         if h < cdatte("12:00") then 
               if msgbox("Confirmation de l'heure : " & vbcrlf & "Yes : " & Format(h,"hh:mm") &  vbcrlf & "No : " & Format(h + cdate("12:00"),"hh:mm"),vbyesno) = vbno then h = h + cdate("12:00")
         end if
    end if
 

JNP

XLDnaute Barbatruc
Re : Obliger saisie heure au format 24h avec inputbox

Re :)
et malheureusement JNP ta proposition ne me sauve pas (pour le moment:))
il est clair que l'on ne peut pas empecher l'utilisateur de rentrer 10:00 ou 22:00.
Toutefois peut on envisager d'inclure une condition tel que l'heure rentree ne depasse pas +/- 12h l'heure de saisie ( now()+0.5 or now() -0.5 ).
A moins que l'utilisateur soit vraiment embouché et mette des négatifs, tu peux utiliser Target < 1 pour vérifier que ce n'est pas supérieur à 24h (-0.5 à +0.5 fait une rotation de 24 h, c'est -0.25 et +0.25 qui seraient des bornes abmissibles à + ou - 6h :p)... Tout autre contrôle t'empêche de corriger une erreur ultérieurement :rolleyes:... Le "h" peux aussi être détecté et mis en Replace avec un ":" comme mis dans ma Sub :rolleyes:...
PS: JNP tu as bien vu que j'ai deja un private sub sur une autre colonne, je mixerai tout ca plus tard pas besoin de t'empeter. merci.
Ben ton exemple avait une colonne en A, d'où mon code, mais avec Union, ça marchera :p...
Bon courage :cool:
 

orphelion

XLDnaute Occasionnel
Re : Obliger saisie heure au format 24h avec inputbox

Rererere (Reuh reuh :))

tout d'abord, merci pour vos conseils et votre soutien ^^

J'ai essaye plus dans le detail ton code Wielfried_85 malheureusement, j'ai toujours un message d'erreur. Je ne sais pas comment rentrer l'heure au format horaire. J'ai un peu honte la ;)
Ta solution reste tres interessante et je serai ravi de la comprendre dans le detail.

Je ne me suis pas beaucoup penche sur ce probleme la semaine derniere mais effectivement JNP tu es un AS j'ai meme pas besoin d'inputbox ca fonctionne du tonnerre :)

Merci encore a vous deux!
a bientot!
 

orphelion

XLDnaute Occasionnel
Re : Obliger saisie heure au format 24h avec inputbox

Bonjour le fil,

pour ceux/celles que cela peut interesser, ou encore pour toutes bonnes idees pour ameliorer ce code voici une reponse possible et operationnelle pour ma demande plus haut.
Code:
Private Sub worksheet_change(ByVal Target As Range)

If Target.Column <> 2 Then GoTo second
    If IsNumeric(Target) Or Target = "NR" Then Exit Sub
    If InStr(1, UCase(Target), "AM") <> 0 Then Target _
        = Replace(Replace(UCase(Target), "AM", ""), " ", "")
    If InStr(1, UCase(Target), "PM") <> 0 Then Target _
        = Replace(Replace(UCase(Target), "PM", ""), " ", ""): Target = Target + 0.5
    If InStr(1, UCase(Target), ";") <> 0 Then Target _
        = Replace(UCase(Target), ";", ":")
    If Not IsNumeric(Target) And Target <> "NR" Then
        MsgBox "Please enter the time or NR."
        Target.ClearContents
        Target.Select
      
second:
If Target.Column <> 48 Then Exit Sub

   If IsNumeric(Target) Or Target = "NR" Then Exit Sub
    If Not IsNumeric(Target) And Target <> "NR" Then
        MsgBox "Please enter a number or NR."
        Target.ClearContents
        Target.Select
  
    End If
End If
End Sub

Merci encore pour votre aide JNP et wielfried_85 :)
 

JNP

XLDnaute Barbatruc
Re : Obliger saisie heure au format 24h avec inputbox

Re :),
Tu peux l'optimiser comme ceci
Code:
Private Sub worksheet_change(ByVal Target As Range)
If IsNumeric(Target) Or Target = "NR" Then Exit Sub
If Target.Column = 2 Then
    If InStr(1, UCase(Target), "AM") <> 0 Then Target _
        = Replace(Replace(UCase(Target), "AM", ""), " ", "")
    If InStr(1, UCase(Target), "PM") <> 0 Then Target _
        = Replace(Replace(UCase(Target), "PM", ""), " ", ""): Target = Target + 0.5
    If InStr(1, Target, ";") <> 0 Then Target _
        = Replace(Target, ";", ":")
    If Not IsNumeric(Target) And Target <> "NR" Then
        MsgBox "Please enter the time or NR."
        Target.ClearContents
        Target.Select
    End If
ElseIf Target.Column = 48 Then
    If Not IsNumeric(Target) And Target <> "NR" Then
        MsgBox "Please enter a number or NR."
        Target.ClearContents
        Target.Select
    End If
End If
End Sub
UCase mets en majuscule, donc n'est pas utile pour ";" :p...
Bonne journée :cool:
 

orphelion

XLDnaute Occasionnel
Re : Obliger saisie heure au format 24h avec inputbox

Bonjour JNP,
etonamment c'est bien ce que j'avais fait au depart mais ca me faisait apparaitre de msgbox partout sauf en colonne 2 et 48 :s
J'ai donc pris l'option opposee avec <> et le goto qui je le sais n'est pas tres jolie jolie mais fait le boulot ^^

En tout cas, il est vrai que je ne connaissais pas la subtilites du Ucase, interessant:)
Merci
A+
 

Statistiques des forums

Discussions
312 571
Messages
2 089 809
Membres
104 278
dernier inscrit
LENZY