Fermer une boucle VBA à la fermeture d'Excel
lenes14
Messages postés
5
Statut
Membre
-
Patrice33740 Messages postés 8930 Statut Membre -
Patrice33740 Messages postés 8930 Statut Membre -
Bonjour,
J'aimerais obtenir votre aide en programmation VBA.
Je replace le contexte, j'ai crée plusieurs macros qui me permettent de :
- dès que je clique sur un rectangle 1, une série de formes s'affichent
- dès que je clique une nouvelle fois sur ce rectangle 1, la série de formes disparait
Une boucle est ainsi créée, jusqu'ici pas de souci.
Le problème est que, si je ne reclique pas sur le rectangle 1 avant de fermer/d'enregistrer le fichier excel, les formes sont toujours présentes lorsque je ré-ouvre mon fichier. Ainsi quand je clique sur le rectangle 1, les formes apparaissent sur les formes déjà apparentes.
J'aimerais ainsi pouvoir fermer la boucle (que les formes ne soient plus apparentes) automatiquement à la fermeture/sauvegarde de mon fichier excel (d'autres personnes que moi vont utiliser ce fichier et c'est pourquoi j'ai besoin d'une automatisation). En espérant avoir été clair ! Je précise que je débute vraiment en VBA et que je ne connais pas le langage.
Pourriez-vous m'aider ? :D Merci pour vos réponses !
J'aimerais obtenir votre aide en programmation VBA.
Je replace le contexte, j'ai crée plusieurs macros qui me permettent de :
- dès que je clique sur un rectangle 1, une série de formes s'affichent
- dès que je clique une nouvelle fois sur ce rectangle 1, la série de formes disparait
Une boucle est ainsi créée, jusqu'ici pas de souci.
Le problème est que, si je ne reclique pas sur le rectangle 1 avant de fermer/d'enregistrer le fichier excel, les formes sont toujours présentes lorsque je ré-ouvre mon fichier. Ainsi quand je clique sur le rectangle 1, les formes apparaissent sur les formes déjà apparentes.
J'aimerais ainsi pouvoir fermer la boucle (que les formes ne soient plus apparentes) automatiquement à la fermeture/sauvegarde de mon fichier excel (d'autres personnes que moi vont utiliser ce fichier et c'est pourquoi j'ai besoin d'une automatisation). En espérant avoir été clair ! Je précise que je débute vraiment en VBA et que je ne connais pas le langage.
Pourriez-vous m'aider ? :D Merci pour vos réponses !
A voir également:
- Fermer une boucle VBA à la fermeture d'Excel
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Word et excel gratuit - Guide
- Comment calculer la moyenne sur excel - Guide
- Aller à la ligne excel - Guide
2 réponses
Bonjour,
Tu peux toujours essayer de lancer ta macro depuis un
L'autre solution serait de stocker une variable (dans une cellule cachée par exemple) l'état de ton "rectangle".
Si il est ouvert ( la cellule vaut 1 par exemple), lorsque tu ouvres le classeur... ça le referme automatiquement.
Dans ce cas, ce controle est à mettre dans le
Ou encore mieux... un mixte des deux.
Comme ça tu es sûr que c'est correctement géré .... même si le classeur se ferme par erreur ou que le processus plante...
Tu peux toujours essayer de lancer ta macro depuis un
Private Sub Workbook_BeforeClose(Cancel as Boolean)
L'autre solution serait de stocker une variable (dans une cellule cachée par exemple) l'état de ton "rectangle".
Si il est ouvert ( la cellule vaut 1 par exemple), lorsque tu ouvres le classeur... ça le referme automatiquement.
Dans ce cas, ce controle est à mettre dans le
Private Sub Workbook_Open()
Ou encore mieux... un mixte des deux.
Comme ça tu es sûr que c'est correctement géré .... même si le classeur se ferme par erreur ou que le processus plante...
Bonjour,
Une autre solution est de commencer par nettoyer la feuille avant d'ajouter les nouvelles formes, c'est à dire supprimer les anciennes formes.
Ici, un excellent cours VBA gratuit pour débutant :
ftp://ftp-developpez.com/bidou/Cours/VBA/formationVBA.pdf
Une autre solution est de commencer par nettoyer la feuille avant d'ajouter les nouvelles formes, c'est à dire supprimer les anciennes formes.
Ici, un excellent cours VBA gratuit pour débutant :
ftp://ftp-developpez.com/bidou/Cours/VBA/formationVBA.pdf
La solution du beforeclose me semble abordable :
Voici où j'ai mis le "Private Sub Workbook_BeforeClose(Cancel as Boolean)" mais ça ne fonctionne pas, les formes restent là quand je ré-ouvre le fichier. Pourtant je l'ai mis dans le même module que ma macro. Une suggestion ?
Pour le stockage de la variable, je suis encore trop débutant pour comprendre ou surtout pour savoir comment faire mais merci.
Voir ici comment faire : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Ensuite... il ne suffit pas de mettre les variables à true ou false....
Il faut appeler le code qui retire tes rectangles...
Mais sans avoir ton code entier (et collé correctement)... impossible de t'en dire plus.
Public Clic1 As Boolean Public Clic2 As Boolean Private Sub Workbook_Open() Clic1 = False Clic2 = False End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Clic1 = False Clic2 = False End Sub Sub RectCLA() If Clic1 = False Then ActiveSheet.Shapes.AddShape(msoShapeOval, 132, 588, 32.5, 32.5). Select Selection.ShapeRange.Height = 36.2834645669 Selection.ShapeRange.Width = 36.2834645669 Selection.Name = "rond_CLA" Selection.OnAction = "touscla" Clic1 = True Clic2 = False Exit Sub ElseIf Clic2 = False Then ActiveSheet.Shapes.Range(Array("trait_CLA")).Select Selection.Delete Clic1 = False Clic2 = True Exit Sub End If End Sub'----------------------------------------------- ' se code se trouve dans l'objet thisWorkbook '----------------------------------------------- Private Sub Workbook_Open() Clic1 = False Clic2 = False End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Call clear_trait_CLA End Sub'----------------------------------------------- 'Cette partie du code se situe dans un MODULE '----------------------------------------------- Public Clic1 As Boolean Public Clic2 As Boolean Sub clear_trait_CLA() If Clic2 = False Then ActiveSheet.Shapes.Range(Array("trait_CLA")).Select Selection.Delete Clic1 = False Clic2 = True End If End Sub Sub RectCLA() If Clic1 = False Then ActiveSheet.Shapes.AddShape(msoShapeOval, 132, 588, 32.5, 32.5).Select Selection.ShapeRange.Height = 36.2834645669 Selection.ShapeRange.Width = 36.2834645669 Selection.Name = "rond_CLA" Selection.OnAction = "touscla" Clic1 = True Clic2 = False Else Call clear_trait_CLA End If End Sub