OVH Cloud OVH Cloud

procédure de "réinitialisation" de macro

3 réponses
Avatar
Céline
bonjour,
voici ma petite question d'aujourd'hui :p
A l'aide de toute une collection de macros, j'effectue un transfert
progressif de donn=E9es d'un classeur excel =E0 l'autre (assist=E9 par
l'utilisateur).
(il faut comprendre : un proc=E9dure principale qui dans un for each
wrksht appelle une sous-proc=E9dure a la fin de laquelle sont appel=E9es
plusieurs proc=E9dures. bref)
J'envisage d'afficher un userform modeless avec un bouton qui
permettrait =E0 l'utilisateur d'arreter le transfert (arret +
r=E9initaliser le code) si il voit que ca se passe mal.
Je sais que manuellement on peut interrompre l'execution par echap,
mais je n'ai aps r=E9ussi =E0 coder =E7a sous vba, est-il possible en plus
de "r=E9initaliser" le code (que le pgmme ne reste pas en mode arret, et
ne m'affiche pas la fenetre de d=E9bogage)
(dans l'=E9ventualit=E9 o=F9 ce n'est pas d=E9conseill=E9 d'appliquer de
telles m=E9thodes)

Merci beaucoup de vos conseils
C=E9line

3 réponses

Avatar
papou
Bonjour
Voici ce que tu pourrais faire :

On Error GoTo MaProcArret
Application.EnableCancelKey = xlErrorHandler
'ton code ici

Exit Sub

MaProcArret:
MsgBox "la macro a été interrompue" & vbLf & "j'arrête tout !",
vbInformation, "Touche echap"
'l'instruction End termine immédiatement l'execution
End

End Sub


Cordialement
Pascal

"Céline" a écrit dans le message de news:

bonjour,
voici ma petite question d'aujourd'hui :p
A l'aide de toute une collection de macros, j'effectue un transfert
progressif de données d'un classeur excel à l'autre (assisté par
l'utilisateur).
(il faut comprendre : un procédure principale qui dans un for each
wrksht appelle une sous-procédure a la fin de laquelle sont appelées
plusieurs procédures. bref)
J'envisage d'afficher un userform modeless avec un bouton qui
permettrait à l'utilisateur d'arreter le transfert (arret +
réinitaliser le code) si il voit que ca se passe mal.
Je sais que manuellement on peut interrompre l'execution par echap,
mais je n'ai aps réussi à coder ça sous vba, est-il possible en plus
de "réinitaliser" le code (que le pgmme ne reste pas en mode arret, et
ne m'affiche pas la fenetre de débogage)
(dans l'éventualité où ce n'est pas déconseillé d'appliquer de
telles méthodes)

Merci beaucoup de vos conseils
Céline
Avatar
Céline
bonjour Pascal, & merci de ta proposition !

Par contre, pour reprendre la structure de mon code si j'ai

sub Proc_princ
for each ... in...
Call Proc_1
Next...
end sub

sub Proc_1
action1
action2 ect.
Call Proc_suivante
End Sub

etc, etc....


Le code que tu m'as proposé doit-il être écrit uniquement dans
Proc_Princ ou faut-il le rajouter aussi dans chacune des
sous-procédures suivantes? (sachant que je ve pouvoir l'arreter
n'importe quand)
D'autre part, dans certaines de mes sous procédures (Proc_1, Proc_2)
ou fonctions appelées par mes sous-procédures j'utilise un
On error Resume Next
(indispensable vu que j'utilise un input box pour sélectionner des
cellules et en récupérer l'adresse)
Cela ne risque-t-il pas de rentrer en "conflit" avec On Error GoTo
MaProcArret ou le code d'erreur interceptable (18 pour la touche echap)
sera différent ?

Merci beaucoup
bonne journée
Céline
Avatar
papou
Bonjour
Si tu as des On Error Resume Next, il faut songer à réinitialiser la gestion
d'erreur avec On Error Goto 0.
Pour ce qui est du positionnement du code proposé, il faut l'intégrer dans
ta procédure de départ.

Cordialement
Pascal


"Céline" a écrit dans le message de news:

bonjour Pascal, & merci de ta proposition !

Par contre, pour reprendre la structure de mon code si j'ai

sub Proc_princ
for each ... in...
Call Proc_1
Next...
end sub

sub Proc_1
action1
action2 ect.
Call Proc_suivante
End Sub

etc, etc....


Le code que tu m'as proposé doit-il être écrit uniquement dans
Proc_Princ ou faut-il le rajouter aussi dans chacune des
sous-procédures suivantes? (sachant que je ve pouvoir l'arreter
n'importe quand)
D'autre part, dans certaines de mes sous procédures (Proc_1, Proc_2)
ou fonctions appelées par mes sous-procédures j'utilise un
On error Resume Next
(indispensable vu que j'utilise un input box pour sélectionner des
cellules et en récupérer l'adresse)
Cela ne risque-t-il pas de rentrer en "conflit" avec On Error GoTo
MaProcArret ou le code d'erreur interceptable (18 pour la touche echap)
sera différent ?

Merci beaucoup
bonne journée
Céline