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 :

Comment sortir d'une boucle si évènement extérieur à la macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 120
    Par défaut Comment sortir d'une boucle si évènement extérieur à la macro
    Bonjour,

    objectif :
    une personne doit réaliser une tâche en 15 secondes maximum
    Au départ de la tâche on clique sur un bouton pour faire démarrer le chronomètre
    Quand la tâche est terminée (avant les 15 secondes) il faut arrêter le chronomètre.

    méthode retenue :

    une "macro_A" qui affiche une page dans laquelle il y a 2 choses :
    - un bouton pour démarrer le chronomètre affichant les secondes restantes quand on a constaté le démarrage de la tâche
    - un grand espace pour afficher en très gros le nombre de secondes restantes

    J'ai bien pensé mettre un autre bouton d'arrêt ou faire la même chose en cliquant sur une cellule contrôlée par "Intersect" mais dans les deux cas l'intervention n'est effective qu'au bout de l'itération de 15, au sortir de la macro.

    Merci de votre aide

  2. #2
    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,

    Mais quel est donc le code de ce chronomètre?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    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
    46
    47
    48
    49
    Sub TIMER_1()
    '
    '   -----------------------------
    '   On est dans la feuille Pilote
    '   -----------------------------
    '
    '   -------------------
    '   Effacement du Timer
    '   -------------------
        Range("B6").Value = ""
    '
    '   ----------------
    '   Le chrono tourne
    '   ----------------
    '
    '   c'est là, durant la boucle For, qu'il faudrait  que l'on puisse
    '   intervenir pour stopper quand la tâche est terminée
    '
    ‘
        p = 16
        For n = 1 To 15
            p = p - 1
            Range("B6").Value = p
            Sleep 1000
        Next
    '
        Range("B6").Value = "0"
    '
    '   -------------------------------------
    '   On a épuisé le capital de 15 secondes
    '   -------------------------------------
        If n = 16 Then
            Delta = 15                                     ' la tâche a été faite en 15 s ou plus
        Else
            Delta = n
        End If
    '
        Range("DB9").Value = Range("DB9").Value + Delta
        Tot = Range("DB9").Value
    '
        Range("B4").Value = Delta & """"                   ' Affichage du temps pour le dernier coup
    '
        Min = Int(Tot / 60)
    '
        Sec = Tot Mod 60
    '
        Range("Y4").Value = Min & "' " & Sec & """"
    '
    End Sub
    Cordialement

  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
    Ah oui, le Sleep...
    Pas bon ça pour arrêter.

    Regarde cette discussion, tu devrais trouver le chrono de tes rêves...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 120
    Par défaut
    Bonjour Pijaku,

    merci pour le lien. En le déroulant, j'ai presque trouvé mon bonheur . . . avec ce lien ci : https://excel.developpez.com/telecha...7/Chronometres

    La solution Chrono 02 me conviendrait parfaitement si je pouvais ne conserver que les secondes, mais dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub Chrono()
    Dim T As Double
        T = TimeValue(UserForm2.LblTemps.Caption) + TimeSerial(0, 0, 1)
        UserForm2.LblTemps.Caption = Format(T, "hh:mm:ss")
    End Sub
     
    Sub TimerOff()
        KillTimer 0, TimerID
    End Sub
     
    Sub TimerOn(Interval As Long)
        TimerID = SetTimer(0, 0, Interval, AddressOf Chrono)
    End Sub
    Il semble que TimeSerial exige les 3 valeurs hh, mm, ss et je ne sais comment ne garder que les secondes.

    Pourriez-vous m'expliquer comment je dois m'y prendre, si c'est possible ?

    Cordialement

  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
    Bonjour,

    Regarde ce code, peut être plus simple :
    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
    Option Explicit
     
    Sub Main()
        Range("B1") = 15
        Application.OnTime Now + TimeSerial(0, 0, 1), "Chrono"
    End Sub
     
    Sub Chrono(Optional sertarien As Boolean)
        If Range("A1") = 321 Then
            MsgBox "gagné"
            Exit Sub ' ta condition pour arrêter le décompte
        End If
        If Range("B1") > 0 Then
            Range("B1") = Range("B1") - 1
            Application.OnTime Now + TimeSerial(0, 0, 1), "Chrono"
        Else
            MsgBox "Jack Bauer a échoué!"
        End If
    End Sub

Discussions similaires

  1. Debug - comment sortir d'une boucle
    Par mafanta dans le forum Eclipse Java
    Réponses: 16
    Dernier message: 19/12/2011, 15h26
  2. Réponses: 4
    Dernier message: 26/11/2011, 12h42
  3. [PHP 5.3] Comment sortir d'une boucle for en PHP ?
    Par beegees dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2009, 20h36
  4. comment sortir d'une boucle while d'un Iterator
    Par solawe dans le forum Langage
    Réponses: 6
    Dernier message: 18/03/2008, 13h46

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