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 :

Pouvoir interrompre ma macro en action


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Par défaut Pouvoir interrompre ma macro en action
    Salut le forum
    J'ai presque fini la conception de mon logiciel mais un soucis subsiste.
    Le code ci-dessous me permet par la fonction Sendkey, renseigner le logiciel de la société des informations d'une plage excel.
    Comme vous le savez tous, la fonction sendkey n'est pas sûr à 100% donc il arrive souvent que l'on constate des disfonctionnement lorsque la macro est en action.
    Ce que je souhaite est de pouvoir interrompre la macro en cours d'action et pouvoir le relancer.
    Actuellement je suis obligé de laisser le disfonctionnement continuer jusqu'à la fin avant de reprendre le tout.
    Cela me fais perdre du termps et s'il y'avait une solution permettant d'arrêter la macro à n'importe quelle étape de son cours, je gagnerai du temps car il me suffira de taper sur la touche ESC pour tout interrompre l'action de ma macro et la relancer.
    Je vous demande de m'aider comme d'habitude afin que mon logiciel puisse avoir du succès.
    N.B : je ne suis pas figé dans mes demandes d'aide donc suis favorable à d'autres meilleures solutions de votre part.
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    Sub activePack()
    Dim i As Integer, MemJ8 As Integer
     
    'On Error GoTo gestionerreur
    If MsgBox("Avant de confirmer la saisie automatique, assurez-vous que :" & Chr(10) & Chr(10) & "- Les observations du client issues de la vérification des informations ont été prises en compte," & Chr(10) & "- Vous êtes bien positionné sur le menu ouverture simplifié - Nouveau Client Pack ... .", vbYesNo, "Demande de confirmation") = vbYes Then
     
    AppActivate "NOM DU LOGICIEL DE MA SOCIETE ICI"
    attendre 0.6
     
    Sheets("RECUP").Select
    'POSITIONNEZ-VOUS SUR LE MENU SIMPLIFIE HANGAR SOUHAITE
    For i = 4 To 4
    attendre 0.5
    SendKeys Range("j4").Value & Chr(13), True
    attendre 0.6
     
    Next
     
    For i = 5 To 5
    attendre 0.5
    SendKeys Range("j5").Value & Chr(13), True
    attendre 0.6
     
    Next
    For i = 6 To 6
    attendre 0.5
    SendKeys Cells(i, 10).Value, True
    attendre 0.6
    Next
    For i = 7 To 7
    attendre 0.5
    SendKeys "" & Chr(13), True
    attendre 0.6
     
    Next
        SendKeys "N" & Chr(13), True
        attendre 0.8
     
        SendKeys "{LEFT}"
        SendKeys "{ENTER}"
        attendre 0.7
     
        SendKeys "~"
    attendre 0.8
     
     
    For i = 8 To 25
    ' Si I = 8 alor on mémorise la valeur de la cellule
    If i = 8 Then MemJ8 = Range("J8").Value
    ' Si I = 16 ou 17
    If i = 17 Or i = 18 Then
    ' Si la veleur mémorisée est 3
    If MemJ8 = 3 Then
    ' On inscrit le nom et le prénom du mari
    SendKeys Cells(i, 10).Value, True
     
    SendKeys "~"
    attendre 0.7
     
    End If
    Else
    ' Si I à une autre valeur que 16 ou 17
    SendKeys Cells(i, 10).Value, True
    attendre 0.7
     
    SendKeys "~"
    attendre 0.6
    End If
     
    Next
    For i = 26 To 45
    SendKeys Cells(i, 10).Value, True
    attendre 0.5
    SendKeys "~"
    attendre 0.7
     
     
    Next
    SendKeys "+{F3}"
    attendre 0.7
     
     
    For i = 46 To 53
    SendKeys Cells(i, 10).Value, True
    attendre 0.5
    SendKeys "~"
    attendre 0.7
     
    Next
    SendKeys "+{F6}"
    attendre 0.7
     
     
    For i = 54 To 54
    SendKeys Cells(i, 10).Value, True
    attendre 0.7
     
     
    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

  2. #2
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonjour,

    Dans le code de ThisWorkBook:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_Open() 
    'Ajoute à Esc > TaMacroSusp
    Call Application.OnKey("{ESC}", "TaMacroSusp") 
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    'Donne à ESC sa fonction habituelle
    Call Application.OnKey("{ESC}") 
    End Sub
    Dans un module (on utilise souvent Ctrl+Pause[Break] pour arrêter une macro), mais tu peux créer ta macro avec Timer et DoEvents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub TaMacroSusp() 
    ...
    End Sub

  3. #3
    Membre éclairé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Par défaut
    Salut Questvba et le forum
    Merci pour votre intervention.
    Desolé mais après un test je constate que ca ne marche pas.
    Il faut noter que lorsque la macro est exécutée, on est plus dans l'environnement EXCEL mais sur un autre applicatif. c'est cet application qui devient actif est non mon fichier excel.
    Je pense qu'il faut passer certainement par un API windows pour réaliser ce que je demande mais je m'y connais pas trop.
    Je souhaite pouvoir interrompre la macro depuis l'applicatif actif (logiciel de la société).
    Merci à tous

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu dois arrêter l'exécution du programme lors du développement.
    Soit Ctrl+Breack, soit tu places un arrêt à chaque ligne de code où tu le souhaites (Touche F9).
    Soit Debug.Assert
    Voir le menu Debogage
    [EDIT]
    Petite explication pour l'utilisation de la métode Assert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
      Dim r As Long
      For r = 2 To 10
       Cells(r, 1) = "Test " & r
       Debug.Assert (r <> 5) ' L'exécution sera suspendue dès que R=5 
      Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre éclairé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Par défaut
    Salut Corona et le forum
    Merci pour votre contribution.
    Sincèrement j'ai pas pu tester votre macro car j'ai pas bien compris.
    Pouvez-vous l'intégrer dans mon code afin que je puisse bien le tester?
    En rappel, lorsque j'exécute ma macro initiale, elle active le logiciel de notre societé et comme c'est la fonction sendkey qui est utilisée, elle colle les données de la plage excel dans les champs de notre logiciel.
    Du coup, c'est le logiciel de la société qui est actif.
    Pensez-vous que votre solution puisse arrêter l'action de la macro étant donné que mon fichier excel n'est pas actif?
    Merci pour le soutien

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonsoir,

    Désolé mais je crois que ma contribution ne correspond pas à ce que tu cherches.
    Je pensais que tu voulais interrompre pendant la phase de programmation et le petit programme que j'ai diffusé n'était là que pour donner un exemple de l'utilisation de la méthode Assert qui permets l'interruption d'un programme lors de son exécution s'il répond aux critères définis.
    Cela n'est utile que pendant la phase de débogage.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre éclairé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Par défaut
    Salut Fring et le forum
    Je pense avoir compris maintenant.
    J’ai respecté la logique de fonctionnement de ton exemple et en m’y inspirant, j’ai pu reproduire ton exemple dans mon cas réel et ca marche.
    Voici comment je procède :
    1) La macro est en cours de fonctionnement,
    2) Pour l’arrêter, je réduit mon logiciel sur lequel les données d’excel sont entrain d’être collées,
    3) Je click sur le bouton STOP
    4) Pour savoir que ca marché (c'est-à-dire qu’il y’a arrêt), j’active à nouveau le logiciel et je constate que y’a plus de collage.
    Mais un dernier point subsiste.
    Vous convenez avec moi que pour arrêter ma macro je dois respecter les 4 étapes.
    Je souhaite pouvoir arrêter la macro depuis le logiciel actif. Comment réaliser cela ?
    Encore un grand merci à toi Fring pour ce que t’a déjà fait et si t’as encore une solution pour mon dernier cas, je serai encore plus enchanté.

  8. #8
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par capi81 Voir le message
    Vous convenez avec moi que pour arrêter ma macro je dois respecter les 4 étapes.
    Non 2 étapes, la 2 et la 3

    Citation Envoyé par capi81 Voir le message
    Je souhaite pouvoir arrêter la macro depuis le logiciel actif. Comment réaliser cela ?
    Je ne pense pas que cela soit réalisable.

  9. #9
    Membre éclairé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Par défaut
    Salut Fring
    Merci pour le feedback.
    J'ai trouvé un API window et selon les explications, il permet de pouvoir arrêter une macro depuis un autre logiciel ou fichier actif.
    J'ai pas pu l'adapter à votre code du post #10.
    Je vous le soumet pour appréciation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
    Declare Function getkeystate Lib "user32" (ByVal nvirtkey As Long) As Integer
    Public stp As Boolean
    If getkeystate(27) > 0 Then
    If MsgBox("Confirmation arrêt macro", vbOKCancel + vbQuestion) = vbOK Then
    SendKeys Chr(27)
    stp = True
    Exit Sub
    End If
    SendKeys Chr(27)
    End If
    Loop
    End Sub

Discussions similaires

  1. Interrompre une macro
    Par djoumusic dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/11/2009, 00h15
  2. interrompre une macro
    Par Nyck0las dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/02/2008, 15h43
  3. Lancement Macro par action sur colonne
    Par primax dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/02/2008, 16h52
  4. Macro sup action touche entrer en fin ligne
    Par rico63 dans le forum VBA Word
    Réponses: 2
    Dernier message: 30/08/2007, 13h32
  5. Réponses: 2
    Dernier message: 11/04/2007, 23h52

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