Microsoft 365 compter le temps passé sur une ligne et cumuler tous les temps passés

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous 🙂

Voilà plusieurs jours que je planche sur un nouveau besoin et, pour l'instant, malgré tests et recherches, je n'y suis pas encore arrivé.

Contexte
Dans le fichier test joint, j'ai les suivants :
- ligne 6 masquée (hauteur 0),
- lignes 7 à 10 contiennent des informations à afficher "clairement" quand clic sur une cellule,

Code feuille Test
VB:
Private Sub Worksheet_SelectionChange(ByVal R As Range)
If Not Intersect(R, Range("a7:s20000")) Is Nothing Then
    If R.RowHeight = 300 Then
    Cells(ActiveCell.Row, 1).Select
    [a1].Select
    ActiveWindow.ScrollRow = Selection.Row
    Else
    SupprFormats
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Rows("6:6").Copy
    Cells(ActiveCell.Row, 1).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Selection.RowHeight = 300
    Cells(ActiveCell.Row, 1).Select
     Application.CutCopyMode = False
    End If
    [a1].Select
    ActiveWindow.ScrollRow = Selection.Row
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End If
End Sub

Action
1 - Pour démarrer le test, clic sur le bouton "supprime formats" (supprime les formats des lignes (sauf ligne 6),
2 - Pour afficher en clair et en couleur les lignes clic dans une cellule de la ligne choisie pour affichage,

Mon besoin
Je voudrais mettre en cellule :
1 - en cellule "M5" le temps pendant lequel je suis resté sur la ligne affichée
2 - en cellule "M4" le temps "cumulé" pendant lequel je suis resté sur toutes les lignes

Auriez-vous le bon code ?

Je joins un p'tit fichier test et je continue mes recherches,
Un grand merci,
lionel 🙂
 

Pièces jointes

Dernière édition:
Solution
En déclarant la ligne cliquée en Public pour la mémoriser puis avec :
VB:
    If LigneCliquée <> R.Row Then T0 = Timer
et
   If R.Row <> LigneCliquée Then
        LigneCliquée = R.Row
        Tpassé = (Timer - T0) / 86400
        [M5] = Tpassé
        [M4] = [M4] + Tpassé
    End If
Dans tes recherches, tu as dû rencontrer le mot "timer", je suppose.
C'est peut-être une solution à envisager.

Sinon, simplement mettre l'heure dans une variable au moment adéquat, c'est-à-dire à l'activation de la ligne à chrométrer, et faire la différence avec l'heure au moment de sa désactivation.


[edit]
Mon premier message est parti un peu vite... et tu as répondu pendant que j'écrivais ce complément.
[/edit]
 
rebonjour Lionel, Marcel,
Un essai en PJ avec :
VB:
En début de macro :
    T0 = Timer

A la fin :
    [M5] = 1000 * (Timer - T0)
    [M4] = [M5] + [M4]
Les temps sont affichés en ms.

Comme M4 s'auto-incrémente, il faut l'initialiser, donc en ThisWorkbook j'ai mis :
Code:
Private Sub Workbook_Open()
     [M4] = 0: [M5] = 0
End Sub
 

Pièces jointes

Bonjour sylvanu, Merci d'être encore là pour moi 🙂
Et merci pour ton fichier ... ça fonctionne nickel 🙂

J'ai 2 demandes pour ce soit "Perfect" pour mettre dans mes "usines à gazouillis" lol
1 - Est-il possible de formater M4 et M5 en heures, minutes, secondes et millisecondes ?
(c'est pour totaliser les temps de travail de la journée)

2 - Le code va être utilisé dans mon fichier de travail qui a plusieurs feuilles. Est-il possible que le code soit fonctionnel en étant dans le code de la feuille où il sera utilisé (Test pour ce fichier) ?
(au lieu d'être dans le ThisWorkbook)

Déjà nickel, un grand merci à toi 🙂
lionel,
 
Dernière édition:
1- Il suffit de faire à la fin :
VB:
    Tpassé = (Timer - T0) / 86400
    [M5] = Tpassé
    [M4] = [M4] + Tpassé
et mettre les temps en format : hh:mm:ss.000
2-
(au lieu d'être dans le ThisWorkbook)
Dans Thisworkbook il n'y a rien si ce n'est à remise à zéro du temps en M4.
Comme se temps s'incrémente, il faut bien qu'au départ il soit à 0.
 

Pièces jointes

Re-sylvanu 🙂

Encore MERCI,
Effectivement, j'ai regardé trop vite le ThisWorkbook et merci pour le format des cellules.

J'en ai une petite dernière lol (enfin je crois 😇)
Dans le cadre du travail, on peut estimer que le temps que je reste sur une ligne est le temps de travail sur cette ligne.

Mais, si je clique sur une autre cellule de la même ligne (ligne active) le code se répète.
Il faudrait que le code s'active uniquement quand je change de ligne .... C'est possible Docteur ?
lionel 🙂
 
En déclarant la ligne cliquée en Public pour la mémoriser puis avec :
VB:
    If LigneCliquée <> R.Row Then T0 = Timer
et
   If R.Row <> LigneCliquée Then
        LigneCliquée = R.Row
        Tpassé = (Timer - T0) / 86400
        [M5] = Tpassé
        [M4] = [M4] + Tpassé
    End If
 

Pièces jointes

Bonjour Lionel, Marcel32, sylvanu,

Je trouve le fichier du post #1 trop tarabiscoté, j'en ai donc fait un autre :
VB:
Dim marche As Boolean 'mémorise la variable

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a$, h#, t#, tt#
If Intersect(ActiveCell, [B5:B9]) Is Nothing Then marche = False: Exit Sub
marche = True
a = ActiveCell.Address
h = ActiveCell
t = Timer
While marche And ActiveCell.Address = a
    If Timer < t Then h = ActiveCell: t = Timer 'après minuit
    ActiveCell = h + (Timer - t) / 86400
    tt = Timer + 0.1
    While Timer < tt And tt < 86400: DoEvents: Wend 'attente de 0.1 seconde
Wend
End Sub

Sub RAZ()
marche = False
[B5:B9] = ""
End Sub
A+
 

Pièces jointes

Bonjour à toutes et à tous,
Belle fin de dimanche 🙂

Je reviens sur le fil car c'est un peu plus compliqué que je ne pensais lol .... ça aurait été trop simple.
Le souci sur le code de Sylvanu (qui par ailleurs fonctionne très bien 🙂) est :
1- Pas de comptage du temps passé sur la ligne,

Le souci du code de Gérard (qui par ailleurs fonctionne très bien dans son contexte, et que je garde précieusement 🙂) :
- Ne correspondant pas au besoin de mon fichier.

L'idéal serait, dans le contexte de mon fichier joint, d'intégrer le code de Gérard.
C'est ce que je tente de faire ... sans succès pour l'instant ...

Un p'tit peu d'aide ?
Entre temps, je continue d'essayer ...
Merci d'avance 🙂
Je joins le fichier contenant les 2 codes.
lionel 🙂
 

Pièces jointes

Bonjour Lionel, le fil,

Le fichier du post #1 ne va pas, c'est pour ça que je ne l'ai pas utilisé.

Il n'est pas normal que ta macro s'exécute sur les lignes > 10, il faut la revoir.

Tu devrais être capable d'adapter mes codes à ce que tu veux faire.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
1 K
  • Question Question
Microsoft 365 Programme trop lent
Réponses
12
Affichages
897
Retour