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 :

Timer sur VBA problème de fonctionnement [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut Timer sur VBA problème de fonctionnement
    Bonjour à tous,
    Je m'appelle Dimitri et je suis en étude d'ingénieur, dans le cadre de mes études je dois faire un programme de maintenance sur Excel.
    Le problème c'est que je n'ai encore eu aucune formation sur VBA.
    Le but du programme est de faire un suivi de maintenance en fonction des horaires d'utilisation de la machine.
    J'ai donc pensé à faire un timer qu'on lance lorsqu'on allume la machine et qu'on arrete lors de sa mise hors service.
    Jusque la tout va bien. Cependant plusieurs tâches sont à réaliser à des périodes différentes. Donc par exemple après 25h d'utilisation nettoyer le filtre et après 100h le changer.
    Mon planning de maintenance ce présente sous forme de tableau, voir ci dessous:
    Nom : tableau maintenance.PNG
Affichages : 1382
Taille : 34,2 Ko

    En dessous de chaque tâches je voulais afficher une cellule avec un timer qui puisse etre remis à zéro indépendamment des autres et donc afficher son temps indépendamment des autres.
    Ci joint une capture de ce que j'ai essayé de faire à coté pour tester la méthode:
    Nom : timer.PNG
Affichages : 1341
Taille : 7,8 Ko
    Donc en gros un bouton pour lancer tous les timer, un bouton pour stopper tous les timer et ensuite un bouton reset pour chaque timer.

    J'ai déjà ecrit les lignes de codes VBA mais il y a des gros bug (le timer ne va pas de seconde en seconde, quand je reset un timer, il repart bien indépendamment des autres mais son temps est multiplié par 3 ect ect...) J'ai essayé de résoudre tout ça tant bien que mal mais sans succés..
    Est ce que quelqu'un pourrait regarder mes lignes de codes et me dire ce qu'il ne va pas svp?
    Ca fait des jours que je suis dessus et je sèche vraiment..
    Merci d'avance!

    Ci joint mon fichier excel:
    Maintenance planning (Enregistré automatiquement).xlsm

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut
    PS: Si quelqu'un a une autre solution plus simple ou plus efficace à mettre en place, je suis preneur de toutes idées

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j 0 H -2

    Un timer pour toute l'application toutes les secondes exemple booléens true/false pour chaque bouton si true incrément si false pas d'incrément du compteur assujetti au bouton!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     compteur = compteur + "00:00:0" & abs(true)
    Dernière modification par Invité ; 07/07/2017 à 08h16.

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Un exemple bricolé vite fait avec Application.OnTime :

    Code à placer dans un module standard :
    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
    Option Explicit
     
    Public Stop1 As Boolean
    Public Stop2 As Boolean
    Public Stop3 As Boolean
    Public T1 As Long
    Public T2 As Long
    Public T3 As Long
     
    Private Const SECONDE As String = "00:00:01"
     
    Public Sub Timer1()
        If Stop1 = False Then
            T1 = T1 + 1
            Cells(1, 1).Value = T1
            Application.OnTime Now + TimeValue(SECONDE), "Timer1"
        End If
    End Sub
     
    Public Sub Timer2()
        If Stop2 = False Then
            T2 = T2 + 1
            Cells(1, 2).Value = T2
            Application.OnTime Now + TimeValue(SECONDE), "Timer2"
        End If
    End Sub
     
    Public Sub Timer3()
        If Stop3 = False Then
            T3 = T3 + 1
            Cells(1, 3).Value = T3
            Application.OnTime Now + TimeValue(SECONDE), "Timer3"
        End If
    End Sub
    Code des boutons dans le module de la feuille :
    (boutons nommés : START_ALL, STOP_ALL, RESET_ONE, ..., STOP_THREE)
    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
    Option Explicit
     
    'START BUTTON
    Private Sub START_ALL_Click()
        Stop1 = False: Stop2 = False: Stop3 = False
        T1 = 0: T2 = 0: T3 = 0
        Call Timer1
        Call Timer2
        Call Timer3
    End Sub
     
    'STOP ALL BUTTON
    Private Sub STOP_ALL_Click()
        Stop1 = True: Stop2 = True: Stop3 = True
        T1 = 0: T2 = 0: T3 = 0
    End Sub
     
    'RESET BUTTONS
    Private Sub RESET_ONE_Click()
        T1 = 0
    End Sub
     
    Private Sub RESET_TWO_Click()
        T2 = 0
    End Sub
     
    Private Sub RESET_THREE_Click()
        T3 = 0
    End Sub
     
    'STOP BUTTONS WITHOUT RESET
    Private Sub STOP_ONE_Click()
        Stop1 = True
        T1 = 0
    End Sub
     
    Private Sub STOP_TWO_Click()
        Stop2 = True
        T2 = 0
    End Sub
     
    Private Sub STOP_THREE_Click()
        Stop3 = True
        T3 = 0
    End Sub

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut
    Bonjour pijaku et dysorthographie!

    Tout d'abord, merci pour vos réponses rapides!

    dysorthographie, je n'arrive pas trop à visualiser ce que tu m'as expliqué. En gros l'idée serait de faire compteur qui va me dire par exemple tant que je suis pas a 25h, j'incrémente et dès que j'atteins 25h il stoppe et m'alerte donc qu'il faut changer le filtre?

    pijaku, merci beaucoup! je vais tester et essayer de comprendre comment tu as fait!

  6. #6
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par d.loyer Voir le message
    dysorthographie, je n'arrive pas trop à visualiser ce que tu m'as expliqué
    C'est exactement ce que fait mon exemple.
    Pour arrêter un Timer on met une variable Booléenne à True. Pour le démarrer on la met à False.
    Le reset d'une cellule, sans arrêt du Timer se traduit par : remettre la cellule à 0...
    On utilise pour faire cela des variables publiques.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2017
    Messages : 8
    Par défaut
    Citation Envoyé par pijaku Voir le message
    C'est exactement ce que fait mon exemple.
    Pour arrêter un Timer on met une variable Booléenne à True. Pour le démarrer on la met à False.
    Le reset d'une cellule, sans arrêt du Timer se traduit par : remettre la cellule à 0...
    On utilise pour faire cela des variables publiques.
    Okkkk j'ai compris! Super! Ca fonctionne nickel! Dire que tu as fait ça en qqlq minutes et que moi je suis dessus depuis plusieurs jours.. lol
    Par contre quand je stoppe les timer et re appuie sur start tout se réinitialise. Il faudrait que quand je stoppe les timer et que je les relance ils reprennent là ou ils se sont arrêtés. Mais je vais essayer de faire le changement tout seul et si je n'y arrive pas je reviendrai vers vous!

    Et est ce que vous savez s'il est possible d'enregistrer le moment ou mes timer se sont arretés? C'est à dire si lorsque je vais arreter mes timer, enregistrer et fermer mon fichier, la prochaine fois ou je vais re ouvrir mon fichier, je vais pouvoir reprendre la ou j'avais stoppé mes timer?

    Merci encore!

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je vois pas l'intérêt de trois timer!

    Il n'en faut qu'un!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub Timer1()
    Cells(1, 1).Value = Cells(1, 1).Value + TimeValue("00:00:0" & abs(BoolTimer1))
    Cells(1, 2).Value = Cells(1, 2).Value + TimeValue("00:00:0" & abs(BoolTimer2))
     Cells(1, 3).Value = Cells(1, 3).Value + TimeValue("00:00:0" & abs(BoolTimer3))
     
    If BoolTimer1 + BoolTimer2 + BoolTimer3 then Application.OnTime Now + TimeValue("00:00:01"), "Timer1"
    End  Sub
    Dernière modification par Invité ; 07/07/2017 à 18h03.

  9. #9
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Pourquoi 3 timer?
    Parce qu'il veut réinitialiser un timer ou un autre en cours d'exécution.
    Effectivement, les 3 sont démarrés simultanément, mais la suite est différente par l'arrêt d'un timer.
    Du moins c'est comme ça que je l'ai perçu.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Il peut arrêter/reprendre de faire défiler un timer false/true quand il veut, c'est pas comme si Application.OnTime serait une précision au 1/1000!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub Timer1()
    Cells(1, 1).Value = Cells(1, 1).Value + TimeValue("00:00:0" & abs(BoolTimer1))
    Cells(1, 2).Value = Cells(1, 2).Value + TimeValue("00:00:0" & abs(BoolTimer2))
     Cells(1, 3).Value = Cells(1, 3).Value + TimeValue("00:00:0" & abs(BoolTimer3))
    *
    If BoolTimer1 + BoolTimer2 + BoolTimer3 then Application.OnTime Now + TimeValue("00:00:01"), "Timer1"
    End  Sub
    Moi si je devais utiliser 3 timer je perendrai des contrôles timer 1/1500 par seconde!

  11. #11
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Tu as raison.
    Depuis mon téléphone portable je n'avais pas vu ton astuce de
    Abs(booltimerX)

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

Discussions similaires

  1. requête de selection sur VBA?
    Par jessy212 dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 28/08/2006, 10h58
  2. [VBA-E] tri sur VBA pour Excel
    Par mariedrouin dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2006, 13h32
  3. Réponses: 3
    Dernier message: 09/04/2006, 09h10
  4. [Livre] Débuts sur VBA 6.3 pour EXCEL 2002
    Par thulvar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2005, 10h45
  5. Création DLL pour utilisation sur VBA
    Par Fbartolo dans le forum C++Builder
    Réponses: 1
    Dernier message: 21/11/2005, 20h44

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