Comment arrêter une macro dejà exécutée

Salut le forum

Je cherche à intégrer dans ma macro ci-dessous, un code qui permet d'arrêter son cours.

En effet, j'ai remarqué que lorsque j'exécute la macro il m'ai impossible par la touche ESC de l'arrêter.

Pourtant il le faut sans quoi cela remettra en cause l'objectif recherché.

Sub activation()
'On Error GoTo gestionerreur
If MsgBox("ASSUREZ-VOUS QUE VOTRE", vbYesNo, "Demande de confirmation") = vbYes Then

AppActivate "NOM DU LOGICIEL ICI"

For I = 3 To 43
    SendKeys Cells(I, 10).Value, True
    attendre 0.6
    SendKeys "~"
    attendre 1

Next
    SendKeys "+{F3}"
    attendre 1
For I = 44 To 51
    SendKeys Cells(I, 10).Value, True
    attendre 0.6
    SendKeys "~"
    attendre 1

Next
    SendKeys "+{F6}"
    attendre 1

For I = 52 To 52
    SendKeys Cells(I, 10).Value, True
    attendre 0.6
    SendKeys "~"
    attendre 1
Next
Exit Sub
gestionerreur:
MsgBox "fichier non ouvert ou réduit dans la barre des tâches : abandon"
End If
End Sub

Sub attendre(sec%)
Dim deb&, fin&
deb = Timer
fin = deb + sec%
Do Until Timer >= fin
DoEvents
Loop
End Sub

Bonjour,

Et tu veux arrêter où et quand ?

Et c'est quoi qui lance la sub ?

Et ce ne serrait pas plutôt "Une macro en cour d'exécution"

A+

Bonjour,

ESC n'a jamais interrompu la moindre macro

Essaye Ctrl+Pause

A+

galopin01 a écrit :

Bonjour,

ESC n'a jamais interrompu la moindre macro

Essaye Ctrl+Pause

A+

Bo njour galopin01,

Sauf si ont programme en ce sens

A+

Salut à tous

Merci pour vos réactions.

Je veux pouvoir arrêter la macro à tout moment.

Puisque c'est une macro qui prend des informations à partir d'excel pour les coller dans mon logiciel.

Si entre temps je constate que qqch c'est mal deroulé, je dois pouvoir arrêter le traitement.

Actuellement c'est pas le cas. je suis obliger de laisser l'opération se terminer avant de pouvoir faire ce que je veux.

Si par programmation on peut dire que lorsque j'active sur la touche ESC, que cela arrête la macro.

Cdlt

galopin01 a écrit :

ESC n'a jamais interrompu la moindre macro

lermite a écrit :

Sauf si on programme en ce sens

Je serais curieux de voir ça ! .

Re,

Voire avec cette solution.

-> Galopin, Tu a raison d'être curieux et de mettre tes lunettes, c'est ainsi qu'ont apprend

A+

177stop-escape.xlsm (14.33 Ko)

Salut Lermite

Je n'arrive pas à exécuter la macro.

Quand je l'exécute, ca signale variable non définie.

A quoi correspond le user32?

Aussi quelle touche dois-je taper pour l'arrêt de la macro?

Ci-dessous le code et le fichier joint pour tester vous :

pour le teste, vous créer un document word nommé essai.

Option Explicit

Declare Function GetKeyState Lib "user32" ( _
                 ByVal nVirtKey As Long) As Integer
Dim NoAction As Boolean

Sub activation()
    'On Error GoTo gestionerreur
    If MsgBox("ASSUREZ-VOUS QUE VOTRE", vbYesNo, "Demande de confirmation") = vbYes Then
        NoAction = False
        AppActivate "essai"

        For I = 3 To 43
            SendKeys Cells(I, 4).Value, True
            attendre 0.6
            If NoAction Then Exit Sub
            SendKeys "~"
            attendre 1
            If NoAction Then Exit Sub

        Next
            SendKeys "+{F3}"
            attendre 1
            If NoAction Then Exit Sub
        For I = 44 To 51
            SendKeys Cells(I, 4).Value, True
            attendre 0.6
            If NoAction Then Exit Sub
            SendKeys "~"
            attendre 1
            If NoAction Then Exit Sub

        Next
            SendKeys "+{F6}"
            attendre 1
            If NoAction Then Exit Sub

        For I = 52 To 52
            SendKeys Cells(I, 4).Value, True
            attendre 0.6
            If NoAction Then Exit Sub
            SendKeys "~"
            attendre 1
            If NoAction Then Exit Sub
        Next
    End If

Exit Sub
gestionerreur:
    MsgBox "fichier non ouvert ou réduit dans la barre des tâches : abandon"
End Sub

Sub attendre(sec%)
Dim deb&, fin&
    deb = Timer
    fin = deb + sec%
    Do Until Timer >= fin
        DoEvents
        If GetKeyState(27) > 0 Then
             If MsgBox("Confirmation arrêt macro", vbOKCancel + vbQuestion) = vbOK Then
                SendKeys Chr(27)
                NoAction = True
                Exit Sub
             End If
             SendKeys Chr(27)
         End If
    Loop
End Sub

Salut Zombe

Cela ne vient pas de la déclaration de l'API Windows

Quand tu as "Option Explicit" en début de module, c'est très bien cela permet d'accélérer le code

mais cela t'oblige également à déclarer tout tes variables

Et le problème est pour ta boucle

For I

"I" est une variable à déclarer en Integer

Ensuite tu vas dans ton menu "Débogage" -> Compiler VBAProject

Cela t'indique si tu as d'autres variables à déclarer

A+

Re,

Merci Bruno pour la précision..

Aussi quelle touche dois-je taper pour l'arrêt de la macro?

Beh.. tu a demandé la touche ESC non ?

Tu veux une autre ?

"User32" est une librairie de Windows, en d'autre terme.. une dll

A+

Salut,

Tu peux programmer un code pour arreter ton script via les events (event keyboard...).

Mais pour que cela fonctionne, selon moi, il faut en plus rajouter dans ton code : DoEvents

Exemple :

i = 1
While i < 10
Wend

Si tu lances ce code : tu seras obligé de killer Excel via le taskmanager de windows

i = 1
While i < 10
    DoEvents
Wend

Ici tu pourras arreter la boucle infini via le bouton Stop de la Macro (ou tout autre event que tu auras programmé)

MAIS, ne pas abuser des DoEvents : Très consommateur en temps....

Dites moi si j'ai faux..

++

Damien

Salut à tous

Merci pour vos solutions.

Ca marche bien.

je vous remercie infiniment.

Rechercher des sujets similaires à "comment arreter macro deja executee"