Bonjour,
Je suis confronté à un problème lors de la fermeture de deux classeurs en vba.
En effet lorsque je ferme les classeurs par la croix ou le menu Fichier/Fermer il reste une application Excel.
Je vous explique les tests que j'ai effectués.
Pour cela deux fichiers sont nécessaires. Je les mets en pièce jointe pour éviter de retaper le code.
Un classeur nommé "Classeur4.xlsm" qui ouvre un fichier "Classeur5.xlsx" à la demande.
Une Forme dans le classeur "Classeur4.xlsm" permet d'enregistrer et fermer le "Classeur5.xlsx" puis le "Classeur4.xlsm".
Test avec les deux classeurs ouvert.
Test_1: Fermeture par la Forme(Quitter) dans la Feuil1 -> la fermeture des deux classeurs est OK plus d'application Excel en cours.
Test_2: Fermeture par le menu Fichier/Quitter -> la fermeture des deux classeurs est OK plus d'application Excel en cours.
Test_3: Fermeture par le menu Fichier/Fermer ou la croix -> la fermeture des deux classeurs est OK mais il reste une application Excel.
Test avec uniquement le classeur "Classeur4.xlsm" ouvert.
Dans ce cas tout fonctionne. je n'est aucune application Excel en cours.
Code du classeur "Classeur4.xlsm" :
Mes questions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 Option Explicit Private objClasseur2 As Workbook Private prvBeforeClose As Boolean Private Const CLASSEUR2 As String = "Classeur5.xlsx" Private Sub Workbook_BeforeClose(Cancel As Boolean) '*****************************************************************************************************************' ' Gestion de la fermeture du classeur principal par la croix ou le menu Fichier/Quitter ou le menu Fichier/Fermer ' '*****************************************************************************************************************' 'Flag de passage par l'événement "BeforeClose" prvBeforeClose = True 'Appel de la procédure de fermeture des classeurs Quitter End Sub Public Sub Quitter() '********************************************' ' Gestion de la fermeture des deux classeurs ' '********************************************' With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False End With 'Enregistrement et Fermeture du deuxième classeur si il est ouvert If Not objClasseur2 Is Nothing Then objClasseur2.Close True 'Enregistrement du classeur principal ThisWorkbook.Save 'Gestion si il y a plusieurs classeurs Excel ouvert If Application.Workbooks.Count = 1 Then 'Gestion si la demande de fermeture proviens de l'événement "BeforeClose" If prvBeforeClose = False Then Application.Quit Else 'On ferme le classeur principal sans quitter l'application ThisWorkbook.Close End If End Sub Private Sub Workbook_Open() '**********************************************' ' Gestion de l'ouverture du classeur principal ' '**********************************************' 'Gestion de l'ouverture du deuxième classeur If MsgBox("Voulez-vous ouvrir le classeur '" & CLASSEUR2 & "'?", vbYesNo, "Deuxième Classeur") = vbYes Then 'Ouverture du second fichier Set objClasseur2 = Workbooks.Open(ThisWorkbook.Path & "\" & CLASSEUR2) 'Passage au premier plan du classeur principal ThisWorkbook.Activate End If End Sub
1 Est-ce un fonctionnement normal?
2 L'événement "Beforeclose" est bien déclenché par la croix ou le menu Fichier/Fermer ou le menu Fichier/Quitter mais se comporte différemment.
3 Après plusieurs heures de recherche je n'ai pas la solution pour fermer totalement l'application Excel par la croix ou le menu Fichier/Fermer dans le cas de deux classeurs.
Pourriez-vous regarder ce problème car je suis coincé pour avancer dans le développement de deux classeurs pour mon travail.
Merci d'avance du temps que vous pourriez me consacrer.
Partager