ZAZ StopMacro - Bouton interrupteur externe
Présentation
Hello, Hello,
J'ai créé une micro-application en .Net : ZAZ StopMacro, pouvant servir avec vos macros V.B.A..
Il s'agit d'une application servant de bouton externe d'arrêt de macro, l'application se place dans votre barre de notification et comporte un bouton, lançant une action spécifique, qui si votre code est paramétré pour la comprendre, réalise l'action d'arrêt.
Principe :
Le fonctionnement est simple, une fois lancé une boucle macro, Excel sera occupé tant que la macro ne sera pas terminée, or si vous avez besoin de reprendre la main sur l'application, soit vous avez prévu une action de sortie, soit vous réussissez à afficher le Debugger, soit vous l'arrêtez par le gestionnaire de tâches et vous perdez tout le travail déjà réalisé.
Ainsi, au lieu de pratiquer comme cela, vous pouvez lancer une action STOP, à l'aide de l'application, votre code V.B.A étant codé pour interpréter cette action, réalisera l'arrêt et Excel sera libéré et vous pourrez y reprendre la main, sans pertes. 8)
Voilà, au lieu de planter l'application comme souvent, maintenant on zaz la macro
Vous trouverez le principe de fonctionnement en détails dans l'image ci-dessous.

[size=85]Freeware, avec codes ouverts et archivés dans le ZIP, ainsi qu'un fichier pour tester le principe.
Compatible toute version Excel.
Poids : <1mo[/size]
Lien de téléchargement :
https://www.excel-pratique.com/fr/telechargements/utilitaires/zaz-stopmacro-no213.php
Errata, Masterclass ZAZ STOPMACRO :
Pour l'exemple, le fichier de Test, se contente de sortir de la macro Boucle_Fin (remarquerez que la boucle ne comporte qu'une ligne de code) :
If Not Dir(ZAZ_STOPMACRO, vbDirectory) = "" Then End 'Si fichier STOP.txt existe => FIN MACRO
Mais vous pouvez bien sûr modifier cette ligne de code, tout est paramétrable, la seule chose nécessaire, c'est qu'au fur et à mesure de son avancement, votre macro, vérifie l'existence de l'événement STOP, lancé à l'aide de l'application, pour libérer Excel.
Voici quelques exemples de modifications, pour effectuer des zaz de traitement V.B.A. :
1. Arrêt directement des traitements Macros
2. Sortie de la procédure ou de la fonction en cours
3. Arrêt Traitements macros avec process de sortie
4. Arrêt traitement macro avec clignotement fenêtre dans barre des taches
'1. Arrêt directement des traitements Macros
If Not Dir(ZAZ_STOPMACRO, vbDirectory) = "" Then End 'Si fichier STOP.txt existe => FIN MACRO
'2. Sortie de la procédure ou de la fonction en cours
If Not Dir(ZAZ_STOPMACRO, vbDirectory) = "" Then Exit Sub 'Ou exit function
'3. Arrêt Traitements macros avec process de sortie
If Not Dir(ZAZ_STOPMACRO, vbDirectory) = "" Then
MsgBox "Arrêt par utilisateur, suite à ZAZ STOPMACRO", vbInformation, "ARRET UTILISATEUR" 'message
Kill ZAZ_STOPMACRO 'Suppression fichier STOP.txt, pour éviter arrêt macro non voulu, si relance
End 'FIN MACRO
End If
'4. Arrêt traitement macro avec clignotement fenêtre dans barre des taches
'Déclaration variable ZAZ_STOPMACRO comme chaine texte
Dim ZAZ_STOPMACRO As String
'Définition variable ZAZ_STOPMACRO du chemin+nom fichier STOP.txt
ZAZ_STOPMACRO = "C:\Users\waard\Desktop\STOP.txt"
'Cache l'application Excel durant le traitement macro '<<<<<<<<<<<<<<<<<<<<
Windows.Application.Visible = False '<<<<<<<<<<<<<<<<<<<<
'Boucle sans fin, Color cellule A1 en Vert > Puis Rouge, Tant que cellule A1 vide
Do While IsEmpty(ThisWorkbook.Worksheets(2).Range("A1"))
Range("A1").Interior.ColorIndex = 9
If Not Dir(ZAZ_STOPMACRO, vbDirectory) = "" Then
Windows.Application.Visible = True '<<<<<<<<<<<<<<<<<<<< Réaffichage application Excel, fait clignoter la fenêtre dans la barre des tâches
Kill ZAZ_STOPMACRO 'Suppression fichier STOP.txt, pour éviter arrêt macro non voulu, si relance
End 'FIN MACRO
End If
Range("A1").Interior.ColorIndex = 10
Loop
Les seuls paramètres à prendre en compte :
> Est le fait que l'application ZAZ StopMacro, crée bien un fichier .txt, du nom de STOP.txt, sur votre bureau utilisateur.
> Que votre code V.B.A. vérifie bien sur votre bureau utilisateur, l'existence du fichier STOP.txt, afin d'être raccord avec ZAZ.
> D'éviter de créer des fichier .txt, au nom de "STOP", mais cela doit être très rare...
> D'éviter de lancer la macro, si le fichier STOP est toujours présent sur votre bureau, d'où l'intérêt de prévoir sa suppression dans votre code, une fois l'application arrêtée par ZAZ.
Masterclass avancé :
1. Evénements d'ouverture de classeur
2. Utilisation de ZAZ dans un classeur où une image tourne à l'infinie
1. Evénements d'ouverture de classeur
Ensuite, vous pouvez aussi prévoir à l'ouverture de votre classeur de lancer l'application automatiquement.
'Private Sub Workbook_Open()
'A chaque ouverture lancer l'application
'0. Gestion erreur, si erreur passe, application non lancée ou déjà ouverte
On Error Resume Next
'1. Déclaration variable PATH_LANCEMENT_ZAZ_STOPMACRO de chemin d'accès à application comme étant du texte
Dim PATH_LANCEMENT_ZAZ_STOPMACRO As String
'2. Définition du chemin d'accès de l'application, casse majuscule pris en compte, sinon erreur
PATH_LANCEMENT_ZAZ_STOPMACRO = "C:\Users\waard\Desktop\ZAZ STOPMACRO\ZAZ STOPMACRO.exe"
'3. Lancement de l'application, visible dans barre de notification
Shell PATH_LANCEMENT_ZAZ_STOPMACRO
End Sub
Dans cet événement, vous pouvez aussi prévoir de vérifier l'existence du fichier STOP est le supprimer de manière automatique... Tout est possible, tout dépendra de votre imagination ou de vos besoins.
2. Utilisation de ZAZ dans un classeur où une image tourne à l'infinie
Exemple d'utilisation de ZAZ StopMacro, vous trouverez ci-joint, ci-dessous le fichier "Smiley tourne tourne", où vous trouverez les explications, pour faire tourner un smiley dans une boite, qui à chaque tour change de couleur 8) , tout en gardant la main sur le classeur pour y faire des opérations et découvrir la consommation en ressources matériels d'un tel fichier.
Sub ROTATION_INFINIE_SMILEY()
'Déclaration variable ZAZ_STOPMACRO comme chaine texte
Dim ZAZ_STOPMACRO As String
'Déclaration variable DEGREE_ROTATION comme valeur double.
Dim DEGREE_ROTATION As Double
'Définition variable ZAZ_STOPMACRO du chemin+nom fichier STOP.txt
ZAZ_STOPMACRO = "C:\Users\waard\Desktop\STOP.txt" '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Remplacez C:\Users\waard\Desktop, par votre propre chemin
'Définition du degré de rotation de départ du smiley dans la boite à 0 degrés
DEGREE_ROTATION = 0
On Error Resume Next 'Gestion des erreur par si erreur passer et continuer
'---------------------------------------------------------------------------------------------------------
'Boucle sans fin DO WHILE ... > LOOP, Rotation infinie du smiley avec changement de couleur, Tant que cellule A1 vide (mais ça c'est un secret)
Do While IsEmpty(ThisWorkbook.Worksheets(2).Range("A1"))
DoEvents 'Raffraichir l'application pour y garder la main
'_____________________________________________________________________________
'Process de retour à zéro quand tour complet réalisé avec changement de couleur en même temps
If DEGREE_ROTATION >= 350 Then
'Retour à zéro quand tour complet fait
DEGREE_ROTATION = 0
'Changement de couleur Vert > Rouge > Vert > etc
If ThisWorkbook.Worksheets(1).Shapes.Range(Array("Smiley Face 3")).Fill.ForeColor.RGB = RGB(0, 176, 80) Then '= RGB(0, 176, 80) 'Vert
'Si vert passe en rouge
ThisWorkbook.Worksheets(1).Shapes.Range(Array("Smiley Face 3")).Fill.ForeColor.RGB = RGB(255, 0, 0) 'Rouge
Else
'Si rouge passe en vert
ThisWorkbook.Worksheets(1).Shapes.Range(Array("Smiley Face 3")).Fill.ForeColor.RGB = RGB(0, 176, 80) 'Vert
End If
End If
'_____________________________________________________________________________
'Rotation du smiley à la valeur DEGREE_ROTATION
ThisWorkbook.Worksheets(1).Shapes.Range(Array("Smiley Face 3")).ThreeD.RotationX = DEGREE_ROTATION
'Ajout +10 degrés à DEGREE_ROTATION pour la prochaine rotation
DEGREE_ROTATION = DEGREE_ROTATION + 10
'Process de sortie par ZAZ STOPMACRO
If Not Dir(ZAZ_STOPMACRO, vbDirectory) = "" Then 'Si fichier STOP.txt existe => FIN MACRO
Kill ZAZ_STOPMACRO 'Supprimer le fichier ZAZ_STOPMACRO
End 'FIN MACRO
End If
Loop
'---------------------------------------------------------------------------------------------------------
End Sub
Voilà 2/3 bidoullages qui devraient vous aider, bon tests de l'application et faites des zaz, plutôt que des plantages.
Tentative d'explications en anglais, avec mon mauvais anglais de maudit français.
So! I using my very bad english language for my external commandbutton.
Application VB.Net language : ZAZ StopMacro, it's external commandbutton for stop macro, that's insert in your notification bar and has 2 options :
"Stop Macro" for launch action STOP
"Quit" for closing ZAZ
Concept Model Data :
User's launching macro that's turning in endless loop, with control line If file:"stop.txt" on user desktop exist
> Excel's freezing while endless loop
> If user click:"Stop Macro" on external commandbutton, then ZAZ's created file:"STOP.Txt" on user desktop
In endless loop macro, to control if file's:"STOP.txt" exist on user desktop :
1. Return:"No exist" file:"stop.txt", loop continue
2. Return:"Yes" file:"stop.txt", end loop/macro
=> Excel freezing liberate, you have manual control return.
Yes, communication VB.Net with VBA by file .txt 8)

ZAZ Create at your demand > File's desktop:"Stop.txt" < VBA Code to control if file exist
To instal :
Control1: ZAZ should have create file's:"stop.txt" on your user desktop, after you have push external commandbutton:"Stop Macro"
Control2: In your VBA code, you must write file's control IF is existing on your user desktop.
Made with Visual 2010

Tschüss