(Résolu) format automatique heure

crown54

XLDnaute Junior
Bonjour à tous,
je souhaiterais pouvoir faire du calcul horaire sur mes badgeages 2017. J'aimerais simplifier la saisie en évitant de taper les : systématiquement. Un format de cellule de ce style ##\:## fonctionne sauf que du coup je ne peux effectuer aucun calcul. Y a t-il un moyen macro ou format personnalisé qui permette ceci.
D'avance merci
Cordialement,
 

Dranreb

XLDnaute Barbatruc
Bon, on peut y ajouter des conditions pour qu'elle ne réagisse pas à la modification du contenu de n'importe quelle cellule :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect([B:M], Target) Is Nothing Then Exit Sub
If Target.Rows.Count <> 1 Or Target.Columns.Count <> 1 Then Exit Sub
If Target.Row <= 3 Then Exit Sub
If Target.Value < 1 Then Exit Sub
Application.EnableEvents = False
Target.Value = TimeSerial(Target.Value \ 100, Target.Value Mod 100, 0)
Application.EnableEvents = True
End Sub
Peut être Application.EnableEvents est resté False suite à une fausse manip ?
Joignez le classeur équipé de ma macro, contrairement à celui joint.
 

Dranreb

XLDnaute Barbatruc
Oui, j'ai mis la macro dans le module de l'objet Worksheet Feuil1 et ça a marché.
Il faut dire que chez moi les macros sont toujours activées, et que j'ai une macro pour remettre Application.EnableEvents à True pour le cas ou il aurait été est laissé à False par une macro qui a planté avant de le remettre True.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Si, ça fonctionne. Le seul problème c'est qu'il y a un format de cellule h:mm:ss;@ sur les cellules et qu'elles ne sont pas assez larges pour tout afficher, alors ça affiche #####.
Vous pourriez d'ailleurs y remédier en ajoutant cette instruction :
VB:
Target.NumberFormat = "h:mm;@"

La Sub InsereLign() derrière ne sert à rien, elle n'était pas de moi.
 

crown54

XLDnaute Junior
Bonjour.
Si, ça fonctionne. Le seul problème c'est qu'il y a un format de cellule h:mm:ss;@ sur les cellules et qu'elles ne sont pas assez larges pour tout afficher, alors ça affiche #####.
Vous pourriez d'ailleurs y remédier en ajoutant cette instruction :
VB:
Target.NumberFormat = "h:mm;@"

La Sub InsereLign() derrière ne sert à rien, elle n'était pas de moi.

on parle bien de l'onglet 2018. Chez moi cela ne fonctionne pas et pourtant toutes les cellules sont bien au format h:mm.
Je n'y comprends rien il doit y avoir un truc chez moi qui bug!
La ligne derrière a une utilité mais seulement à la création du tableau en appliquant la macro insérer une ligne.
 

crown54

XLDnaute Junior
badgeages.jpg
badgeages2.jpg
effectivement ça n'est pas le bon fichier. Mais en repassant en h:mm ça ne change rien.
Voilà le bon fichier en pj + des copies écran du problème rencontré.
 

Pièces jointes

  • badgeages 2017_v2.xlsm
    81.2 KB · Affichages: 25

Dranreb

XLDnaute Barbatruc
Dites moi plutôt ce sue vous ne comprenez pas.
Parce que la moitié des instructions au début de la procédure consiste à en sortir tout de suite s'il n'y a pas lieu de continuer, donc si la plage changée n'est pas dans les colonne B:M, s'il y a plus d'1 cellule changée, si elle est dans une ligne avant la 3, enfin si elle porte déjà une valeur interprétable comme une durée inférieure à 1 jour.
 

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 112
dernier inscrit
cuq-laet