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 :

arreter une macro en cours d'execution.


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut arreter une macro en cours d'execution.
    bonjour
    Voila, j'aimerais arreter l'execution d'une macro en appuyant sur la touche echap.
    C'est une macro servant a exporter des donnees excel vers access.
    Ma macro est pilotée depuis access par l'intermediaire d'un prog vba.

    Cependant je n'arrive pas a l'interompre malgré tous mes efforts.
    Quelqu'un aurait-il une idée du code a placer dans ma macro pour que dès que j'appuie sur echap celle-ci s'arrete.

    Merci
    Amicalement Scons

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 549
    Points : 556
    Points
    556
    Par défaut
    Bonjou,r
    je ne pense pas que cela soit possible
    Pour arrêter ta marco, faut faire Ctrl + Pause ou Shift + Pause

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    Merci d'avoir repondu, meme si ca ne m'avance pas beaucoup.
    Je continu a chercher.
    Il doit bien avoir un moyen de stoper une macro.
    Amicalement Scons

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 549
    Points : 556
    Points
    556
    Par défaut
    la macro est un code linéaire
    tu ne peux donc pas faire (à ma connaissance) un bout de code qui arrreterait celle-ci selon tes désirs.....

    Je t'assure que Ctrl + Pause ou Shift + Pause fonctionne... mais c'est util pour un développeur pas pour un utilsiateur f... je te l'accorde

    Bon courage

    PS : si tu trouves, çà m'interesse aussi

  5. #5
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    C'est parfaitement possible.

    Voici comment je procède personnellement.

    Je déclare une variable booléenne, appelons-la bStop.

    Je crée un petit formulaire avec un message "Patientez..." et, cerise sur le gâteau, un label qui pourra recevoir des informations sur la progression de la procédure.
    Sur ce formulaire, un bouton pour arrêter.
    Je mets la propriété Cancel de ce bouton à True pour pouvoir utiliser la touche Escape.
    Le clic sur ce bouton ne fait que positionner bStop à True.
    C'est dans le formulaire que, dans son événement _Load, je mets l'appel à la procédure de traitement (ton export).

    Pour lancer la procédure de traitement, j'appelle le formulaire.

    Il ne reste plus qu'à gérer l'état de bStop dans la boucle de traitement pour en sortir proprement et de placer quelques DoEvents pour que le clic sur le bouton d'arrêt puisse être pris en compte.

    J'ai plein de (longues) routines qui peuvent ainsi être arrêtées correctement par l'utilisateur.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 153
    Points : 86
    Points
    86
    Par défaut
    ok, merci pour tes precisions.
    J'essaierais de voir si je peu mettre en place cette histoire de formulaire, je vous tiendrais au courant de l'aancement.
    Merci encore
    Amicalement Scons

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    merci beaucoup à AlainTech pour ses explications, ça m'a servi aussi.

    Petite précision, le DoEvents, perso je le mets avecmes instructions récursives dans la boucle.

    Un peu comme ça:
    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
     While Not Liste_Article.EOF And Arret_Boucle = False
            'On laisse la possibilité d'interrompre la boucle
            DoEvents
     
            num_lig = num_lig + 1
            ThisWorkbook.Sheets("Articles").Range("A" & num_lig).Value = Liste_Article(0)
            ThisWorkbook.Sheets("Articles").Range("B" & num_lig).Value = Liste_Article(1)
            ThisWorkbook.Sheets("Articles").Range("C" & num_lig).Value = Liste_Article(2)
            ThisWorkbook.Sheets("Articles").Range("D" & num_lig).Value = Liste_Article(3)
            ThisWorkbook.Sheets("Articles").Range("E" & num_lig).Value = Liste_Article(4)
            'On rafraichit la barre de progression
            progression = Int(num_lig / nb_enreg * 100)
            Call MaJ_Barre_Progression(progression)
     
            Liste_Article.MoveNext
        Wend
    Voilà, voilà...

  8. #8
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Précisions
    Bonjour,

    Je déterre le sujet, mais ce qui est expliqué ici est absoluement ce que je recherchais : J'avais un formulaire "Patientez" avec une barre d'avancement... Et mon idée était de rajouter le fameux bouton.

    Par contre je coince à cette étape :
    Citation Envoyé par AlainTech Voir le message
    Il ne reste plus qu'à gérer l'état de bStop dans la boucle de traitement pour en sortir proprement et de placer quelques DoEvents pour que le clic sur le bouton d'arrêt puisse être pris en compte.
    Serait-il possible de m'expliquer qu'est ce que "gérer l'état de bStop dans la boucle de traitement" s'ignifie ?
    Ma prodédure de traitement est le remplissage d'un fichier Excel depuis Access (parfois bien trop long, d'où LE bouton), il n'y a pas de "boucle".

    Et ce que sont les "DoEvents" (ainsi que leur utilité dans ce cas) ?
    J'ai regardé dans l'aide Office : http://office.microsoft.com/fr-fr/ac...001228827.aspx ; mais j'ai pas compris (oui, je débute). --'

    Merci


    Contexte :
    - pour mon stage j'améliore et corrige une BD crée par plusieurs autres avant moi
    - je ne suis pas autorisée à diffuser le code de la BD > j'essaie quand même d'être la plus précise possible.


  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    c'est intégré par défaut dans Excel et sujet déjà traité sur ce forum, avec une p'tite recherche …

    Il suffit au sein de la boucle de placer l'instruction DoEvents, parfois nécessaire d'insister sur la touche;
    sert à laisser la main temporairement au système d'exploitation …

    Voir aussi du côté de la propriété CalculationInterruptKey.

    A noter aussi qu'une « barre d'avancement » via un UserForm ralentit considérablement un processus !

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Membre à l'essai
    Femme Profil pro
    Stagiaire
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Stagiaire
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Points : 23
    Points
    23
    Par défaut Réponses à mes questions
    Pour les prochains novices comme moi, qui aiment bien avoir l'explication des choses :

    DoEvents :
    rend la main au process de gestion des messages de l'OS. Si dans sa pile de messages en attente il voit un événement type "clic sur bouton", alors il le traite plutôt que de continuer la suite son traitement. Si aucun message n'est en attente, il continue son traitement (après le DoEvents).
    (merci à tegu sur un autre forum)

    Gérer l'état de bStop :
    - derrière le bouton quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CancelButton_Click()
    'bStop est une variable publique définie dans un module indépendant
    bStop = True
    End Sub
    - dans la prodédure à arrêter :
    initialiser bStop à False au début
    juste avant un Loop (par exemple) on pose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DoEvents
    If bStop = True Then
     bStop = False
            Call Cancel 'Fonction pour arrêter proprement la procédure (enregistrer et fermer le fichier en cours d'écriture par exemple)
            Exit Sub
    End If
    Il faut faire attention quand la fonction principale "Call" une autre fonction impliquant elle-même une boucle : bStop = False et Call Cancel ne sont pas forcement pertinents.

    Voilà, Bon courage à tous !
    Lire aussi les cours et tutoriels pour apprendre Excel.
    Et merci à tous ceux qui répondent, quelle que soit leur réponse, d'entretenir le dynamisme de ce forum.

Discussions similaires

  1. [XL-2007] Stopper une macro en cours d'execution avec un boutton
    Par pastis.vi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/07/2013, 15h20
  2. Réponses: 4
    Dernier message: 07/11/2006, 11h28
  3. Arreter Un Programme En Cours D'execution
    Par chakcc dans le forum Visual C++
    Réponses: 4
    Dernier message: 26/10/2006, 15h00
  4. [NetBeans] Arreter un programme en cours d'execution
    Par vallica dans le forum NetBeans
    Réponses: 3
    Dernier message: 08/12/2005, 12h24
  5. Compacter une appli en cours d'execution.
    Par valentin4949 dans le forum Access
    Réponses: 4
    Dernier message: 26/11/2004, 10h00

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