Fermer une boucle VBA à la fermeture d'Excel

Fermé
lenes14 Messages postés 5 Date d'inscription lundi 18 juin 2018 Statut Membre Dernière intervention 19 juin 2018 - Modifié le 18 juin 2018 à 17:01
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 20 juin 2018 à 00:34
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 !


A voir également:

2 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 18 juin 2018 à 17:15
Bonjour,
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...


0
lenes14 Messages postés 5 Date d'inscription lundi 18 juin 2018 Statut Membre Dernière intervention 19 juin 2018
19 juin 2018 à 09:15
Bonjour Jordane,
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.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > lenes14 Messages postés 5 Date d'inscription lundi 18 juin 2018 Statut Membre Dernière intervention 19 juin 2018
19 juin 2018 à 10:14
Déjà... pour poster ton code sur le forum il faut le coller directement et pas nous en mettre une capture écran.
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.
0
lenes14 Messages postés 5 Date d'inscription lundi 18 juin 2018 Statut Membre Dernière intervention 19 juin 2018
19 juin 2018 à 09:35
J'ai aussi essayer un "Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)" mais ca ne fonctionne pas non plus, après la sauvegarde les formes n'ont pas disparues. Je pense que je ne mets pas ce qu'il faut entre le private sub et le end sub ou que je ne le mets pas au bon endroit, ou même peut être les deux ?
0
lenes14 Messages postés 5 Date d'inscription lundi 18 juin 2018 Statut Membre Dernière intervention 19 juin 2018
19 juin 2018 à 17:30
Ah je ne savais pas !.. Voilà ma macro, j'espère que le format convient...

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
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649 > lenes14 Messages postés 5 Date d'inscription lundi 18 juin 2018 Statut Membre Dernière intervention 19 juin 2018
19 juin 2018 à 21:50
Donc un truc du genre


'-----------------------------------------------
' 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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 18 juin 2018 à 22:37
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

0
lenes14 Messages postés 5 Date d'inscription lundi 18 juin 2018 Statut Membre Dernière intervention 19 juin 2018
19 juin 2018 à 09:17
Bonjour,
Cette solution pourrait aussi être une piste mais mon anti-virus bloque votre fichier pdf !
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
20 juin 2018 à 00:34
Changes d'antivirus !
0