comment taper les heures sans ":" 1430 = 14:30 ?

Bonjour,
Je cherche désespérément à quitter microsoft office pour LibreOffice.
Dans l’ensemble mon passage à Calc se passe bien à part une macro que j’ai beaucoup de peine à traduire en basic.
Ayant de nombreuses heures à taper, elle me rend bien service.
Quelqu’un peut-il m’aider ? Merci d’avance.

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
   If Target.Column > 2 And Target.Column < 7 Then  'Ajuster le no de la colonne
        On Error Resume Next
        If IsNumeric(Target) And Target <> "" Then
            Target = Left(Target, Len(Target) - 2) & ":" & Right(Target, 2)
        End If
    End If
    Application.EnableEvents = True
End Sub

Problème intéressant…

      Toutefois, votre procédure ne permet pas vraiment d’enregistrer des heures ... mais seulement des chaînes de caractère qui en ont la forme... C’est fâcheux si on veut faire des opérations dessus.

J’ai donc un peu amélioré la chose … avec un inconvénient : si vous retapez une date « par-dessus » une déjà saisie, vous devez alors saisir les deux points (« : ») séparateurs, parce que le format étant à ce moment-là fixé en date, il fait son travail, donc provoque considère une erreur de saisie. L’avantage de la possibilité de calcul sur le temps m’a semblé supérieure ; nous somme dans un contexte de tableur ; c’est fait pour faire des calculs…

      Vous notez que le document joint possède sa feuille pourvu d’un « *listener* » qui appelle la macro à chaque modification de cellule de la feuille. C’est maintenant facile à mettre en place (cela ne l’a pas toujours été) et cela se provoque en cliquant droit sur l’onglet de la feuille et en choisissant « *Évenement de la feuille...* » dans le menu contextuel.

      La macro agit si la modification est faite entre les colonnes supérieures à 2 et inférieures à 7 ; soit les colonnes « *D* » à « *G* » puisque l’index de départ (la première colonne) est numéroté à zéro. J’ai aussi rajouté des bricoles de tests pour que soit parfaitement géré des choses comme « *5678* » (refusé) ou « *123* » (validé en « *01:23* »)

      Je reste à votre disposition pour vous expliquer plus avant si vous le jugez nécessaire.



Sub jeFormate(monEvenement As Object)
 Dim monHeure As Integer, mesMinutes As Integer
 Dim maChaine As String

 On Error Resume Next

 With monEvenement                                    ' « monEvenement » EST la cellule elle-même.'
  If .supportsService("com.sun.star.table.Cell") Then ' Pas d’action si plusieurs cellules sont sélectionnées.'
   If ((.cellAddress.column > 2 )  And _
       (.cellAddress.column < 7 )) Then               ' Colonnes « D » à « G ».'

    maChaine = .string
    If ((isNumeric(maChaine))  And _
        (len(maChaine) <= 4 )  And _
        (maChaine      <> "")) Then

          maChaine = format(cInt(maChaine), "0000")    ' Gère, entre autres, les heures du genre « 01:23 ».'
        monHeure   = cInt( Left (maChaine, Len(maChaine) - 2) )
        mesMinutes = cInt( Right(maChaine, 2)                 )

     If ((monHeure   >= 0)  And (monHeure   <= 23)  And _
         (mesMinutes >= 0)  And (mesMinutes <= 59)) Then
             .value = timeSerial(monHeure, mesMinutes, 00)
      .numberFormat = 40                               ' Formate LA CELLULE sous « 12:34 ».'
     End If
    End If
   End If
  End If
 End With
End Sub




      Et continuez de quitter « *vous savez qui* » ; nous somme là pour vous aider ; c’est magique !

      ;-)

jeFormate.ods

Bonjour @SébastienC

Pour info. ma seule modification est d’avoir ajouté une quote en fin de commentaire. C’est évidemment inutile en LibreOffice Basic mais nécessaire sur ce site pour une mise en forme correcte.

Cordialement

Merci Pierrre-Yves !!!

Il ne me pose AUCUN souci de voir mes posts améliorés par quelqu’un comme toi !!! Il peut d’ailleurs toujours y rester d’immondes fÔtes d’aurtograffes qui ne m’auraient pas sauté aux yeux et dont l’extermination puisse être la bienvenue… Ne te gêne SURTOUT pas ! Je ne comprenais pas l’aléatoire de la coloration syntaxique du code… Mais je n’ai pas, non plus, cherché. Par contre, je suis sûr que j’aurais été absolument bien incapable d’y trouver solution. C’est pourtant très simple ; cela force même à utiliser l’apostrophe typographique « ’ » dans les commentaires plutôt que l’américaine « ’ ». Du dernier chic ; utéeffehuitement parlant, j’adore !

Par contre, le fait de ne pas pouvoir avoir un vrai fil de discussion me laisse tout de même un peu songeur. Une seule réponse par utilisateur dans un fil, des commentaires archi restreints en nombre de caractères. En face, c’est humainement 1984 ; ici c’est logiciellement Néandertal.

Bonjour,
Un grand merci pour votre réponse et vos explications !
Mon problème est que je modifie systématiquement les heures car ce tableau me permet de faire un prévisionnel qui va être ajuster régulièrement en fonction des vacances et heures supplémentaires et sur plusieurs fichiers. De pouvoir utiliser le clavier numérique est un avantage indéniable !

J’ai essayé de placer la macro, mais il me semble que j’ai créé un petit bog !

Je vous joints un fichier exemple (fichiers excel enregistré ods)

Encore un grand merci pour votre aide.
Bien cordialement–2019 RELEVES HORAIRE ESSAIS.ods

Je viens de passer un moment sur votre classeur et j’ai plusieurs commentaires à écrire dessus. Vous êtes parti d’un fichier M$-Excel et l’organisation des macros est quand même très différente sous LibreOffice. Je sais bien que cela peut « marchouiller », mais j’ai quand même tendance à vous conseiller (très fortement) de repartir sur des bases saines. Si vous me donnez quelques jours, je vais travailler sur l’élimination des bibliothèques inutiles (Dieu que c’est redondant ce « machin »)…

Je me rends aussi compte que vous faite évidemment des calculs sur les heures que vous saisissez ; cela implique que la modification de la chaîne de caractère était, sous M$-Excel, prise en compte comme une heure, ce qui n’est pas le cas de LibreOffice si ce n’est pas clairement spécifié. C’est en même temps un inconvénient (c’est plus compliqué à concevoir) qu’un avantage (cela offre plus de possibilités).

Suite de ma réponse si ce forum d’obédience médiévale me le permet.

Confirmez-moi s’il vous plaît deux bricoles :

  • Il vous arrive (semble-t-il souvent) de modifier une date.
  • Vous n’utilisez pas d’autres macros à part celle du sujet du présent fil, dans ce fichier.

Il faut absolument trouver le moyen de corriger une date de la même manière. Je n’ai pas d’idée géniale pour le strict moment ; allo Pierre-Yves ? Non mais allo quoi !

On devrait quand même trouver une solution. Wait a little bit my friend; I think about you…
:wink:

Bonsoir,
Les dates(première colonne) sont modifiées chaque année pour permettre de réutiliser le fichier. et d’avoir une lecture en grisé des weekend. Sur les feuilles 1,2,3,4 je n’ai laissé que le mois de janvier pour simplifier, les mois suivants ne sont que des copier coller. les totaux sont un récapitulatif global des 4 feuilles.
Les horaires(heure) sont remplis en début d’année, puis rectifier plusieurs fois en fonction des changements (horaires variable, enseignement, rendez-vous,autre). Il m’arrive de modifier une vingtaine de fois la même cellule.
Je n’utilise pas d’autre macro sur ce fichier, mais j’utilise le format conditionnel.
Un grand merci, c’est sympa de penser à moi !
Bien cordialement