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ô....
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,
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
Merci d'avance,