Problème de fermeture de deux classeurs en vba
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" :
Code:
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 |
Mes questions:
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.