Code arrêt macro à parfaire
Salut Lermite et le forum
Tu avais pu integrer un code dans ma macro dont l'objet était de pouvoir arrêter la macro lorsqu'elle est en cours d'exécution.
J'ai des soucis avec ce code et je ne sais pas si vous pouvez revoir.
Au cas ou quelqu'un d'autre aurait une solution, je suis prenable. (lire message ci-dessous)
Dans le code ci-dessous, avec la touche ESC, je peux arrêter la macro en cours d’exécution.
L'arrêt de la macro nécessite une confirmation par msgbox. Ce qui se déroule bien.
Le problème survient lorsque je relance à nouveau la macro après l'avoir arrêtée.
Dans ce cas, le msgbox réapparaît encore quand bien même j’ai pas demandé l’arrêt de la macro par la touche ESC.
Cet affichage anormale du msgbox entraine le non fonctionnement de la macro.
Ce qui remet en cause la qualité du travail qui a été réalisé donc je cherche une solution au problème du msgbox.
Qu’est ce qui entraine son apparition et quelle solution pourrait être trouvée?
Merci de me tirer de l'aubaine comme d'habitude svp.
NB: le 2è code est une suite logique du 1er code.
Option Explicit
Public Var
Declare Function GetKeyState Lib "user32" (ByVal nvirtkey As Long) As Integer
Dim noaction As Boolean
Sub activePack()
Dim I As Integer, MemJ8 As Integer
Var = 0
'On Error GoTo gestionerreur
If MsgBox("ASSUREZ-VOUS QUE VOTRE", vbYesNo, "Demande de confirmation") = vbYes Then
noaction = False
AppActivate "ICI NOM DU LOGICIEL"
'POSITIONNEZ-VOUS SUR LE MENU SIMPLIFIE IGOR SOUHAITE
For I = 3 To 6
SendKeys Cells(I, 10).Value, True
attendre 0.6
If noaction Then Exit Sub
SendKeys "~"
attendre 1
If noaction Then Exit Sub
Next
SendKeys "N" & Chr(13), True
attendre 0.6
If noaction Then Exit Sub
SendKeys "{LEFT}"
SendKeys "{ENTER}"
attendre 1
If noaction Then Exit Sub
For I = 7 To 45
'POSITIONNEZ-VOUS SUR LE MENU SIMPLIFIE IGOR SOUHAITE
'For I = 3 To 45
' Si I = 8 alor on mémorise la valeur de la cellule
If I = 8 Then MemJ8 = Range("J8").Value
' Si I = 17 ou 18
' si I = 7
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
attendre 0.6
If noaction Then Exit Sub
SendKeys "~"
attendre 1
If noaction Then Exit Sub
End If
Else
' Si I à une autre valeur que 16 ou 17
SendKeys Cells(I, 10).Value, True
attendre 0.6
If noaction Then Exit Sub
SendKeys "~"
attendre 1
If noaction Then Exit Sub
End If
Next
SendKeys "+{F3}"
attendre 1
If noaction Then Exit Sub
For I = 46 To 53
SendKeys Cells(I, 10).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 = 51 To 51
'SendKeys Cells(I, 10).Value, True
'attendre 0.6
'SendKeys "~"
attendre 1
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
Var = GetKeyState(27)
If Var > 0 Then
If MsgBox("Confirmation arrêt macro", vbOKCancel) Then
SendKeys Chr(27)
noaction = True
Var = 0
Exit Sub
End If
End If
Loop
End Sub
Dernière édition par zombe le 17 Juil 2012,Bonjour zombe le forum
essayes ainsi
a+
papou
tu remplaces comme suit tous les
If noaction Then Exit Subpar
If noaction Then noaction=0:Exit SubSalut Paritec et le forum
Merci pour votre proposition.
Je l'a testée mais ca ne marche pas.
Voici les constats:
Lorsque je fais ESC pour arrêter la macro, en voulant confirmer par la souris ou la touche ENTREE (OUI ou NON), je vois que ces commandes ne permettent pas la confirmation. Lorsque je click sur OUI, il colle valeur de la cellule dans la cellule active. si je click encore une 2è fois, il efface la valeur collée et ainsi de suite. Il en ait de même qu'en cliquant sur NON.
Finalement, je suis obligé d'utiliser la touche ESC ; ce qui continue le collage dans la cellule active.
Normalement en cliquant sur OUI avec la souris ou par la touche ENTREE, cela devrait arrêter la macro ou si je choisi de cliquer sur NON, cela devrait permettre à la macro de continuer de fonctionner sur le logiciel et non pas sur les cellules excel.
N.B : lorsque j'interrompt la macro par ESC, en voulant qu'elle continue de fonctionner(c'est à dire que je ne confirme pas l'arrêt) le remplissage ne se fait pas sur le logiciel mais sur les cellule excel.
Peut-on en tenir compte c'est à dire lorsqu'il y'a demande d'arrêt qui n'est pas confirmée, qu'en voulant continuer son cours de fonctionnement, que le logiciel soit automatiquement activé pour que le remplissage puisse s'y continuer.
Merci pour l'aide