Annuler une macro et conserver le contrôle (Microsoft Excel)
Lorsque vous développez une macro pour d’autres à utiliser, vous souhaiterez peut-être ajouter une méthode pour que l’utilisateur quitte votre macro avant qu’elle ne se termine et conserve toujours le contrôle de ce que fait la macro. Ctrl + Break arrêtera une macro, mais elle ne se ferme pas correctement, car elle permet à l’utilisateur d’afficher le code dans l’éditeur VBA.
Il existe plusieurs façons d’aborder ce problème. La première consiste à créer une invite «Voulez-vous quitter» dans votre macro, puis à afficher l’invite périodiquement par la macro. Par exemple, considérez le code suivant:
Do ... ' your code goes here Counter = Counter + 1 If Counter Mod 25 = 0 Then If MsgBox("Stop Macro?", vbYesNo) = vbYes Then End End If Loop
La construction de la macro est basée sur le principe que vous avez une série d’étapes que vous voulez répéter encore et encore, grâce à l’utilisation d’une structure Do … Loop. À chaque fois dans la boucle, la valeur de Counter est incrémentée. Toutes les 25 fois dans la boucle, le « stop macro? » s’affiche et l’utilisateur a la possibilité de quitter.
Cette approche est facile à mettre en œuvre et peut très bien fonctionner à certaines fins. Le plus gros inconvénient de cette approche, cependant, est qu’elle ne permet pas l’immédiateté – l’utilisateur doit attendre pour quitter la macro jusqu’à ce qu’au moins 25 itérations se soient produites.
Une autre approche consiste à « cacher » le code VBA et à lui appliquer un mot de passe.
Pour ce faire, suivez ces étapes depuis l’éditeur VBA:
-
Choisissez l’option Propriétés VBAProject dans le menu Outils. L’éditeur affiche la boîte de dialogue Propriétés du projet.
-
Assurez-vous que l’onglet Protection est affiché. (Voir la figure 1.)
-
Cochez la case Verrouiller le projet pour l’affichage.
-
Dans la zone Mot de passe, entrez un mot de passe que vous souhaitez utiliser pour protéger la macro.
-
Dans la zone Confirmer le mot de passe, entrez le même mot de passe une deuxième fois.
-
Cliquez sur OK.
Fermez l’éditeur VBA, puis enregistrez le classeur. Avec le projet VBA protégé, l’utilisateur peut toujours cliquer sur Ctrl + Break pour arrêter la macro, mais il ne pourra pas accéder au code du programme réel. Ils ne pourront choisir que parmi les boutons Continuer ou Fin, qui protègent tous deux votre code. Comme avantage supplémentaire, cette approche empêche également l’utilisateur d’afficher votre code à l’aide des choix de menu, de barre d’outils ou de ruban.
La meilleure approche, cependant, est peut-être de créer un gestionnaire d’erreurs qui prendra essentiellement en charge chaque fois que l’utilisateur appuie sur Echap ou Ctrl + Pause. Le gestionnaire qui est exécuté peut alors demander à l’utilisateur s’il souhaite vraiment quitter, puis s’arrêter correctement s’il le fait. Voici un exemple de code qui montre comment procéder:
Sub Looptest() Application.EnableCancelKey = xlErrorHandler On Error GoTo ErrHandler Dim x As Long Dim y As Long Dim lContinue As Long y = 100000000 For x = 1 To y Step 1 Next Application.EnableCancelKey = xlInterrupt Exit Sub ErrHandler: If Err.Number = 18 Then lContinue = MsgBox(prompt:=Format(x / y, "0.0%") & _ " complete" & vbCrLf & _ "Do you want to Continue (YES)?" & vbCrLf & _ "Do you want to QUIT? [Click NO]", _ Buttons:=vbYesNo) If lContinue = vbYes Then Resume Else Application.EnableCancelKey = xlInterrupt MsgBox ("Program ended at your request") Exit Sub End If End If Application.EnableCancelKey = xlInterrupt End Sub
Notez que cet exemple utilise la méthode EnableCancelKey, en lui attribuant le nom de l’étiquette à laquelle sauter si la touche d’annulation (Echap ou Ctrl + Pause) est enfoncée. Dans ce cas, ErrHandler est accédé à, et l’utilisateur est invité à quoi faire. Si l’utilisateur choisit de quitter, la macro s’arrête normalement.
Notez que la première chose effectuée après l’étiquette ErrHandler consiste à vérifier si la propriété Number de l’objet Err est égale à 18. Si c’est le cas, vous savez qu’une touche d’annulation a été enfoncée. Si ce n’est pas le cas, un autre type d’erreur s’est produit et doit être traité de la manière appropriée à votre macro.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (3021) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:
link: / excelribbon-Aborting_a_Macro_and_Retaining_Control [Abandon d’une macro et conservation du contrôle]
.