Pb d'utilisation de l'événement WorkbookBeforeClose

C

Carpe

Guest
Salut forum

Je n'arrive pas à déclencher l'événement :
exemple de la rubrique aide :

Private Sub App_WorkbookBeforeClose(ByVal Wb as Workbook, Cancel as Boolean)
a = MsgBox("Do you really want to close the workbook?", vbYesNo)
If a = vbNo Then Cancel = True
End Sub

mais quand ce déclenche t'il donc !


Bonne fete à tous
 
C

Carpe

Guest
En faite g trouvé la solution :

il fallais creer un module de classe :
EventClassModule

mettre à l'interieur :
Public WithEvents App As Application
Public Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
If FeuiliSaisieIndex.FileClassOuvert = Wb.FullName Then
If Wb.ReadOnly = False Then
'On remmet le fichier en fichier caché + lecture seule
SetAttr Wb.FullName, vbHidden + vbReadOnly
End If
End If
End Sub

dans un module classique:
Dim AvantFermeClass As New EventClassModule
Sub InitializeApp()
Set AvantFermeClass.App = Application
End Sub

Et enfin on active le tous dans ThisWorkbook dans l'événement open:
Private Sub Workbook_Open()
InitializeApp
End Sub


Tchao et noyeux joel !!!!!!!!!!!!!!!!!!!!!!!
 
@

@+Thierry

Guest
Bonjour le Forum, Carpe, Celedan, Dan

Quand j'ai fait une visite la semaine dernière, j'avais remarqué cette question mais je devais déjà repartir. Aujourd'hui je repasse par ici et je vois que Carpe a de la suite dans les idées, ce qui est très bien (et même indispensable) pour progresser en programmation.

Cependant au regard de la question initiale et afin d'éviter à des futures lecteurs/lectrices de s'égarer sur les voies sombres et délicates des Modules de Classe pour faire quelque chose de très simple, à savoir : Une Alerte de Fermeture (ce qui, ceci dit en passant, ne doit plus être ce que Carpe cherche à faire au vue de "ReadOnly ") ? voici simplement ce qu'il faut faire :

Dans : Private Module de ThisWorkBook (du classeur en question)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Message As Byte
Message = MsgBox("Do you really want to close the workbook?", vbYesNo)
If Message = vbNo Then Cancel = True
End Sub

Une variante si l'on veut que le User ne sauve pas les changement en répondant Oui à l'alerte d'Excel :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Message As Byte
Message = MsgBox("Do you really want to close the workbook without saving any change ?", vbYesNo)
If Message = vbNo Then Cancel = True Else: ThisWorkbook.Saved = True
End Sub

Et la variante si l'on veut, au contraire, que le User sauve le classeur :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Message As Byte
Message = MsgBox("Do you really want to close the workbook without saving any change ?", vbYesNo)
If Message = vbNo Then Cancel = True Else: ThisWorkbook.Save
End Sub

Enfin ce genre d'alerte à la fermeture ne nécessite donc pas de Module de Classe.

Pour Dan et la proposition "Auto_close ", il y a plus d'un an nous en avions discuté ici même avec Ti, et nous avions été d'accord pour confirmer à tout le Forum de Ne Plus Utiliser ces Macros "Auto_Close" ou "Auto_Open" qui remontent au premiers Modules VBA d'Excel 5 et qui ne seront plus gérées tôt ou tard par MS dans les versions futures (recommandation Microsoft).
Et puis, aujourd'hui, les macros évènementielles offrent bien plus de possibliltés et sont plus simples à utiliser de toute manière.

Enfin voilà un post qui, comme à mon habitude est long (lol) et en plus, qui ne sert plus à grand chose pour Carpe, vu qu'il semble chercher plus compliqué, mais à toutes fins utiles pour les consultations futures sur XLD.

Sur ce, j'espère que vous avez tous et toutes passé un Bon Noël et je vous souhaite de terminer cette année 2003 en beauté.

Bien à Vous
@+Thierry
 
D

Dan

Guest
Salut Thierry et le forum,

Hihi ...Celedan ! c'est celeda (pas Celada, Thierry !....) qui va pas apprécier cela, lol!.

Pour Thierry : Macro Auto_close et Auto_open : J'avais déjà vu cette recommandation il y a quelques temps, notamment lorsque tu avais dit que les macros événementielles seraient de plus en plus utilisées.
Tu as raison et puisque que j'ai découvert récemment les macros Private Sub Workbook_Open() à placer dans "This workbooks", ces macros seront oubliées à tout jamais !!
Merci encore Thierry !

Bon Salut et bonnes fêtes de fin d'année.

Dan
 

Discussions similaires