Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Contrôle de saisie d'heures

ThierryP

XLDnaute Occasionnel
Bonjour le forum,

Un utilisateur a besoin d'entrer dans des cellules (affichage : [h]:mm) un nombre d'heures hebdomadaires (typiquement : 35:00 ou 36:30).
Afin de ne pas planter les calculs et les macros qui tournent derrière, je demande à avoir une saisie décimale de ce nombre (soit 36,5 pour 36h et 30 min).
Comme il y a souvent des soucis entre la chaise et l'écran (et j'en suis un bon exemple ), je mets en place un contrôle de saisie dans le worksheet_change, mais petit souci : si la saisie se fait en heures (35:30 par ex), Excel a déjà transformé cette saisie en 1,4791666667), et donc forcément ma fonction instr(Target,":") eh ben ça marche pô....
VB:
If Target.Column = 5 Then 'Durée hebdomadaire
    If Not IsNumeric(Target) Then
        MsgBox "Saisie invalide"
        Target.ClearContents
        GoTo fin
    End If
    If InStr(Target, ":") <> 0 Then
        MsgBox "Saisie décimale uniquement":
        Target.ClearContents
        GoTo fin
    End If
    If Not IsEmpty(Target) Then Target = Int(Target) & ":" & Round((Target - Int(Target)) * 60, 0)
    Target.Offset(0, 1).Select
    GoTo fin
End If
Tester la présence d'une virgule ne sert à rien, puisqu'elle est présente (sauf à minuit...). Est-ce que quelqu'un aurait une petite idée de comment faire ???

Merci d'avance,
 
Solution
Ça devrait y répondre parce que si on saisit directement 35:00 ça vaut 1,45833333333333 jours ce qui est moins de 4 jours, donc conservé tel quel.
Tandis que si on saisit 35 c'est > 4 donc divisé par 24 soit 1,45833333333333 jours, affiché 35:00 par le format d'affichage de la cellule.

ThierryP

XLDnaute Occasionnel
Bonjour Phil69970,

Oui, ça c'est OK, je sais faire !
Mon fichier est déjà entièrement structuré et opérationnel( du coup, je ne voudrais pas passer par des cellules intermédiaires), j'en suis à la gestion des erreurs de saisie, et là, je n'avais pas prévu de coincer sur cette saisie.....
Si pas de solution VBA, alors je crois que je vais passer par un USF, mais ça alourdit un peu le schmilblic !
 

ThierryP

XLDnaute Occasionnel
Oui, ça je le fais en VBA pour transformer la saisie décimale en heures "classiques" mais si la personne se trompe et saisit "36:30", la cellule affiche après macro "1:31".... On est loin du compte !
C'est pour ça que je cherche à déterminer si il y a ":" dans la saisie mais que ça ne fonctionne pas !
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi je diviserais la valeur par 24 si elle est supérieure à … disons 4 par exemple, soit 96 heures.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column = 5 Then 'Durée hebdomadaire
      If Not IsNumeric(Target) Then
         MsgBox "Saisie invalide"
         Application.EnableEvents = False
         Target.ClearContents
         Application.EnableEvents = True
      ElseIf Target.Value > 4 Then
         Application.EnableEvents = False
         Target.Value = Target.Value / 24
         Application.EnableEvents = True
         End If
      End If
   End Sub
 
Dernière édition:

ThierryP

XLDnaute Occasionnel
Bonsoir Dranreb,
Merci pour ton retour, mais ça ne répond pas vraiment à ma problématique....

Comme dit plus haut, je crois que je vais passer par un USF de saisie, plus facile à contrôler !!
 

Dranreb

XLDnaute Barbatruc
Ça devrait y répondre parce que si on saisit directement 35:00 ça vaut 1,45833333333333 jours ce qui est moins de 4 jours, donc conservé tel quel.
Tandis que si on saisit 35 c'est > 4 donc divisé par 24 soit 1,45833333333333 jours, affiché 35:00 par le format d'affichage de la cellule.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…