Formater une plage en horaire

Résolu/Fermé
vieuxray - Modifié par vieuxray le 14/07/2014 à 16:47
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 15 juil. 2014 à 14:13
Bonjour a toutes et tous, forum bonjour



Excel 2007 - VBA

Je souhaiterai svp formater une plage de cellules (F2:F16) sous un format spécial

je voudrais que lorsque je tapes en (F2 ou F3 etc etc) Ex: 1255 que cela écrive directement sous

ce format 12h 45 et si il y a un zéro devant 01h 44 >>> écrire 1h 44 en supprimant le zéro

Où autre solution en VBA, je vous remercie pour votre aide et votre savoir partagé.

Bonne après midi a tous

Cdlt Ray

4 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
14 juil. 2014 à 16:46
Bonjour Ray,

Dans le module de la feuille, essaies :
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  If Intersect(Target, [F2:F16]) Is Nothing Then Exit Sub
  If Not IsNumeric(Target.Value) Then Exit Sub
  Application.EnableEvents = False
  Target.Value = (Int(Target.Value / 100) / 24) + _
                 ((Target.Value Mod 100) / (24 * 60))
  Application.EnableEvents = True
  Target.NumberFormatLocal = "hh""h""mm;@"
End Sub
1
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
14 juil. 2014 à 16:53
Oups .....
pour supprimer le 0 de 0144, il faut remplacer :
  Target.NumberFormatLocal = "hh""h""mm;@"
.
par
  Target.NumberFormatLocal = "h""h""mm;@"
.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
15 juil. 2014 à 11:30
Bonjour Ray

Je me suis encore fais piéger par une bizarrerie d'Excel !!!
J'avais oublié que la fonction IsNumeric() considère qu'une cellule vide contient un zéro !

Voici le code modifié :
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count > 1 Then Exit Sub
  If Intersect(Target, [F2:F16]) Is Nothing Then Exit Sub
  If Not IsNumeric(Target.Value) Then Exit Sub
  If Target.Formula = "" Then Exit Sub
  Application.EnableEvents = False
  Target.Value = (Int(Target.Value / 100) / 24) + _
                 ((Target.Value Mod 100) / (24 * 60))
  Application.EnableEvents = True
  Target.NumberFormatLocal = "h""h""mm;@"
End Sub
1
Salut Patrice33740,

Tout d'abord merci de t'etre interresser a mon post, et merci pour le code.

j'ai essayer ca fonctionne bien, mais quand je tape 0155 il m'écrit bien 1h55 ça OK

mais en supposant que je me sois tromper alors j'efface la cellule et ca me laisse des zéros ecrit comme suit 0h00

quand j'efface je souhaiterai svp effacer toute la cellule et entrer une nouvelle valeur

Encore merci pour ton aide

Cordialement Ray
0
Salut Patrice33740,

Merci bien pour ta réponse et pour la modification.

ça fonctionne bien comme souhaiter et je te remercie

beaucoup pour ton aide que j'ai beaucoup apprécier.

Je clos donc le sujet avec encore pleins de merci, bonnnes

vacances si tu part et a bientot sans doute.

Bye, Bien cordialement Raymond
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
15 juil. 2014 à 14:13
De rien, au plaisir de te relire sur le Forum.

Cordialement
Patrice (actuellement en vacances!!!)
0