Formater une plage en horaire

Résolu
vieuxray -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Oups .....
      pour supprimer le 0 de 0144, il faut remplacer :
        Target.NumberFormatLocal = "hh""h""mm;@"
      .
      par
        Target.NumberFormatLocal = "h""h""mm;@"
      .
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  3. vieuxray
     
    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
  4. vieuxray
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      De rien, au plaisir de te relire sur le Forum.

      Cordialement
      Patrice (actuellement en vacances!!!)
      0