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

(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:

crown54

XLDnaute Junior
bonjour je reviens vers vous pour une explication.
J'ai créé un nouvel onglet pour 2018, copié la macro mais cela ne fonctionne pourriez-vous m'éclairer svp?
Merci encore
 

Pièces jointes

  • badgeages 2017_v2.xlsm
    82 KB · Affichages: 20

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

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
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

crown54

XLDnaute Junior
merci ça fonctionne cette fois!!
Puis je abuser et demander comment fonctionne la macro ligne par ligne si vous avez du temps? J'aimerai comprendre pour m'améliorer
En tout cas un grand merci
 

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.
 

crown54

XLDnaute Junior
ok merci pour votre réponse. Je comprends mieux
par contre cette ligne là pourriez-vous me l'expliquer plus en détail svp?
Target.Value = TimeSerial(Target.Value \ 100, Target.Value Mod 100, 0)
merci
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…