IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tableau avec compteur de temps (timer) [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Juriste
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Juriste

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut Tableau avec compteur de temps (timer)
    Bonjour,

    J'ai l'habitude d'essayer de me débrouiller en bidouillant avec le fruit de mes recherches sur le forum mais là j'avoue que je suis trop débutant pour réussir à mettre au point ce que je veux et je n'ai rien trouvé qui réponde à mon problème et que je sache adapter ou mettre en oeuvre.

    Je m'explique, il s'agirait de faire un tableau avec des éléments concernant des dossiers de travail.
    À chaque fois qu'on remplit une ligne, le tableau s'agrandit de lui-même avec une nouvelle ligne vierge.
    Dans chaque ligne, il y aurait par exemple le nom du dossier, la date d'ouverture et un compteur de temps que l'on pourrait déclencher, arrêter ou réinitialiser pour savoir combien de temps on passe sur un dossier.
    Le plus simple restait selon moi d'avoir dans chaque ligne une liste déroulante à côté du compteur avec START / STOP / RÉINITIALISER pour agir sur le compteur (mais je suis ouvert à d'autres options).
    Mon principal problème est de gérer la programmation du compteur de temps pour qu'à chaque ligne, la commande agisse sur le compteur qui se trouve sur la même ligne et ce de façon automatique (sans avoir à programmer à l'avance un compteur pour chaque ligne alors-même que mon tableau s'agrandit tout seul en fonction du nombre de dossiers et que je ne sais pas à l'avance quelle sera sa taille définitive).

    Merci d'avance pour votre aide précieuse,

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    pour te donner des pistes va voir là

    https://www.developpez.net/forums/d1...on-simultanee/

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Juriste
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Juriste

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut
    Bonjour,

    Merci pour le lien, j'ai regardé mais mon principal problème n'est pas de créer le timer mais de faire en sorte qu'un nouveau timer se crée automatiquement sur chaque nouvelle ligne du tableau et soit commandé par la liste déroulante de la même ligne.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    J'aurai peut être une piste pour toi !
    Tu crée un tableau structuré (Insertion ---> Tableau), ce tableau comporte une colonne "Heure début", une colonne "Heure fin" et une colonne "Total heures" en plus des autres colonnes qui te sont nécessaires). Dans la colonne "Heure début", une liste de validation avec deux valeurs, START et RÉINITIALISER, dans la colonne "Heure fin" les valeurs STOP et RÉINITIALISER. Les listes de validation doivent avoir la case "Quand des données non valides sont tapées" décochée afin de permettre d'entrer des valeurs autres que celles de la liste. Ensuite, mettre ce code dans le module de la feuille en adaptant les colonnes cibles (3 au total) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim T As ListObject
     
        Set T = ActiveSheet.ListObjects("Tableau1")
     
        If Target.Count > 1 Then Exit Sub
        If Target.Row - 1 > T.DataBodyRange.Rows.Count Then Exit Sub
     
        'suspend les événements...
        Application.EnableEvents = False
     
        Select Case Target.Column
     
            Case 3 'colonne "Heure début"
            'inscrit le jour et l'heure
            If Target.Value = "START" Then Target.Value = Now
     
            If Target.Value = "RÉINITIALISER" Then
                Target.Value = ""
                Target.Offset(, 1).Value = ""
                Target.Offset(, 2).Value = ""
            End If
     
            Case 4 'colonne "Heure fin"
            'inscrit le jour et l'heure et totalise les heures dans la colonne "Total heures"
            If Target.Value = "STOP" Then
                Target.Value = Now
                Target.Offset(, 1).Value = Target.Offset(, 1).Value + (Target.Value - Target.Offset(, -1).Value)
                Target.Offset(, 1).NumberFormat = "[hh]:mm:ss"
            End If
     
            If Target.Value = "RÉINITIALISER" Then
                Target.Value = ""
                Target.Offset(, 1).Value = ""
                Target.Offset(, -1).Value = ""
            End If
     
        End Select
     
        '...les rétabli
        Application.EnableEvents = True
     
    End Sub
    Dans chaque ligne, il y aurait par exemple le nom du dossier, la date d'ouverture et un compteur de temps que l'on pourrait déclencher, arrêter ou réinitialiser pour savoir combien de temps on passe sur un dossier.
    Le mode de fonctionnement :
    Avec le choix "START" dans la colonne "Heure début", le jour et l'heure à l'instant T sont inscrit dans la cellule à la place de "START". Une fois le travail fini sur le dossier, faire de même avec la colonne "Heure fin" en choisissant "STOP" ceci a pour effet d'entrer le jour et l'heure à l'instant T et d'additionner le temps écoulé entre ces deux moments à la valeur déjà présente dans la cellule de la colonne "Total heures".
    Le choix de "RÉINITIALISER" vide les trois cellules que ce soit dans la colonne "Heure début" ou "Heure fin"
    Alors, bien évidemment il faut penser à cliquer sur les valeurs des listes de validation pour comptabiliser le temps à l'ouverture et fermeture du fichier !
    Je te joins malgré tout un classeur pour que tu puisses tester :
    Test totaliseur heures.xlsm

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Juriste
    Inscrit en
    Janvier 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Juriste

    Informations forums :
    Inscription : Janvier 2019
    Messages : 6
    Par défaut
    Merci pour la piste mais ça ne me permet pas vraiment de faire ce que je cherche (savoir commencer à travailler sur un dossier -> lancer le compteur, arrêter -> stopper le compteur, y revenir plus tard -> relancer le compteur là où il s'était arrêté, clôturer le dossier -> stopper définitivement le compteur.

    En fait j'ai déjà le code du compteur qui fait ça et qui marche, je te le mets dans le fichier ci-dessous. Ce qu'il me manque c'est la manière de le faire se répéter à chaque ligne du tableau (avec des références relatives je pense).
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Le problème de ton Timer c'est qu'il, à mon sens, sollicite des ressources inutilement car avec ce que je t'ai proposé ça revient au même coté résultat mais sans utiliser de ressources durant ton travail sur ton fichier.
    Je suppose que le fichier qui contient le Timer n'est pas sur celui que tu travailles, il est juste là pour enregistrer le temps passé ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro avec Tableau en VBA et temps d'execution
    Par eric4459 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/02/2016, 18h14
  2. [Toutes versions] Formule dans tableau avec douchette RECHECHEH et second temps validation
    Par G4 83000 dans le forum Excel
    Réponses: 1
    Dernier message: 08/12/2014, 21h36
  3. Création d'un tableau avec le temps
    Par alexxxxxx dans le forum LabVIEW
    Réponses: 1
    Dernier message: 14/06/2012, 18h57
  4. calcul à temps réel dans un tableau avec formulaire
    Par BYALI dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 13/05/2009, 15h02
  5. timer pour QCM avec réponse en temps imparti
    Par yoshik dans le forum Général Python
    Réponses: 11
    Dernier message: 17/02/2009, 15h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo