OVH Cloud OVH Cloud

Activer macros BeforeClose BeforeSave

14 réponses
Avatar
LSteph
Bonjour à tous,

Cela fait un moment que je tourne autour de cette question,
comment gèrer conjointement fermeture et BeforeSave? - dans le cas suivant:

Le but est pour un classeur déterminé d'obliger l'utilisateur à activer les
macros, ainsi
une feuille d'avertissement visible et les autres feuilles sont
xlveryhidden
le Workbook_open fera le nécessaire si les macros sont activées sinon seul
l'avertissement restera affiché.
Quand on tente plus tard de fermer le classeur le before save entre en
action pour remasquer ce qui doit l'être.
Comment gèrer un peu mieux les possibilités de sauvegarde et fermeture
sachant que si l'utilisateur sauvegarde sans fermer
le classeur reste ouvert mais avec seulement la feuille d'avertissement.

Merci d'avance

Voici le code que j'utilise:

'****
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

Dim sh As Worksheet

With Application
.ScreenUpdating = False

Worksheets("Avertissement").Visible = True
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Avertissement" Then sh.Visible = xlVeryHidden
Next

.ScreenUpdating = True
End With


End Sub

Private Sub Workbook_Open()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Sheets
sh.Visible = True
Next
Worksheets("Avertissement").Visible = xlVeryHidden

End Sub
'****
'lSteph

10 réponses

1 2
Avatar
LSteph
(précision:)
sachant que si l'utilisateur sauvegarde sans fermer
(contrairement à ce qui serait souhaité dans ce cas uniquement )

le classeur reste (bien) ouvert mais (évidemment et hélas) avec seulement
la feuille d'avertissement


Merci .


"LSteph" a écrit dans le message de news:

Bonjour à tous,

Cela fait un moment que je tourne autour de cette question,
comment gèrer conjointement fermeture et BeforeSave? - dans le cas
suivant:

Le but est pour un classeur déterminé d'obliger l'utilisateur à activer
les macros, ainsi
une feuille d'avertissement visible et les autres feuilles sont
xlveryhidden
le Workbook_open fera le nécessaire si les macros sont activées sinon seul
l'avertissement restera affiché.
Quand on tente plus tard de fermer le classeur le before save entre en
action pour remasquer ce qui doit l'être.
Comment gèrer un peu mieux les possibilités de sauvegarde et fermeture
sachant que si l'utilisateur sauvegarde sans fermer
le classeur reste ouvert mais avec seulement la feuille d'avertissement.

Merci d'avance

Voici le code que j'utilise:

'****
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

Dim sh As Worksheet

With Application
.ScreenUpdating = False

Worksheets("Avertissement").Visible = True
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Avertissement" Then sh.Visible = xlVeryHidden
Next

.ScreenUpdating = True
End With


End Sub

Private Sub Workbook_Open()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Sheets
sh.Visible = True
Next
Worksheets("Avertissement").Visible = xlVeryHidden

End Sub
'****
'lSteph




Avatar
michdenis
Bonjour LSteph,


Va voir là : http://cjoint.com/?ipaDedcyhr

Enfin quelque chose qui fonctionne ! ;-)


Salutations!



"LSteph" a écrit dans le message de news:
Bonjour à tous,

Cela fait un moment que je tourne autour de cette question,
comment gèrer conjointement fermeture et BeforeSave? - dans le cas suivant:

Le but est pour un classeur déterminé d'obliger l'utilisateur à activer les
macros, ainsi
une feuille d'avertissement visible et les autres feuilles sont
xlveryhidden
le Workbook_open fera le nécessaire si les macros sont activées sinon seul
l'avertissement restera affiché.
Quand on tente plus tard de fermer le classeur le before save entre en
action pour remasquer ce qui doit l'être.
Comment gèrer un peu mieux les possibilités de sauvegarde et fermeture
sachant que si l'utilisateur sauvegarde sans fermer
le classeur reste ouvert mais avec seulement la feuille d'avertissement.

Merci d'avance

Voici le code que j'utilise:

'****
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

Dim sh As Worksheet

With Application
.ScreenUpdating = False

Worksheets("Avertissement").Visible = True
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Avertissement" Then sh.Visible = xlVeryHidden
Next

.ScreenUpdating = True
End With


End Sub

Private Sub Workbook_Open()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Sheets
sh.Visible = True
Next
Worksheets("Avertissement").Visible = xlVeryHidden

End Sub
'****
'lSteph
Avatar
LSteph
Merci de ton aide Michdenis ,

c'est bien cela que je cherche à faire
et j'avais commencer à me tricoter les méninges entre
les évènnements et à coups de if me.saved et cancel
mais sans succes ,
reste juste un souci , le enregistrer sous ...là
il fonctionne lorsqu'on a désactivé les macros seulement
or outre vouloir qu'il utilise le code , le classeur ouvert par
l'utilisateur doit pouvoir être
enregistré où il veut.

En attendant je regarde déjà demain comment tu as fait en détail et comment
gèrer saveasui..

Encore Merci

Bonne nuit

lSteph







"michdenis" a écrit dans le message de news:
Oq%23$
Bonjour LSteph,


Va voir là : http://cjoint.com/?ipaDedcyhr

Enfin quelque chose qui fonctionne ! ;-)


Salutations!



"LSteph" a écrit dans le message de news:

Bonjour à tous,

Cela fait un moment que je tourne autour de cette question,
comment gèrer conjointement fermeture et BeforeSave? - dans le cas
suivant:

Le but est pour un classeur déterminé d'obliger l'utilisateur à activer
les
macros, ainsi
une feuille d'avertissement visible et les autres feuilles sont
xlveryhidden
le Workbook_open fera le nécessaire si les macros sont activées sinon seul
l'avertissement restera affiché.
Quand on tente plus tard de fermer le classeur le before save entre en
action pour remasquer ce qui doit l'être.
Comment gèrer un peu mieux les possibilités de sauvegarde et fermeture
sachant que si l'utilisateur sauvegarde sans fermer
le classeur reste ouvert mais avec seulement la feuille d'avertissement.

Merci d'avance

Voici le code que j'utilise:

'****
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

Dim sh As Worksheet

With Application
.ScreenUpdating = False

Worksheets("Avertissement").Visible = True
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Avertissement" Then sh.Visible = xlVeryHidden
Next

.ScreenUpdating = True
End With


End Sub

Private Sub Workbook_Open()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Sheets
sh.Visible = True
Next
Worksheets("Avertissement").Visible = xlVeryHidden

End Sub
'****
'lSteph





Avatar
michdenis
Bonjour LSteph,

Qu'est-ce que la commande "Enregistrer sous" vient faire dans ce que tu demandes ? Quels sont tes objectifs ? Empêcher de reproduire
ton fichier ?


Salutations!



"LSteph" a écrit dans le message de news:
Merci de ton aide Michdenis ,

c'est bien cela que je cherche à faire
et j'avais commencer à me tricoter les méninges entre
les évènnements et à coups de if me.saved et cancel
mais sans succes ,
reste juste un souci , le enregistrer sous ...là
il fonctionne lorsqu'on a désactivé les macros seulement
or outre vouloir qu'il utilise le code , le classeur ouvert par
l'utilisateur doit pouvoir être
enregistré où il veut.

En attendant je regarde déjà demain comment tu as fait en détail et comment
gèrer saveasui..

Encore Merci

Bonne nuit

lSteph







"michdenis" a écrit dans le message de news:
Oq%23$
Bonjour LSteph,


Va voir là : http://cjoint.com/?ipaDedcyhr

Enfin quelque chose qui fonctionne ! ;-)


Salutations!



"LSteph" a écrit dans le message de news:

Bonjour à tous,

Cela fait un moment que je tourne autour de cette question,
comment gèrer conjointement fermeture et BeforeSave? - dans le cas
suivant:

Le but est pour un classeur déterminé d'obliger l'utilisateur à activer
les
macros, ainsi
une feuille d'avertissement visible et les autres feuilles sont
xlveryhidden
le Workbook_open fera le nécessaire si les macros sont activées sinon seul
l'avertissement restera affiché.
Quand on tente plus tard de fermer le classeur le before save entre en
action pour remasquer ce qui doit l'être.
Comment gèrer un peu mieux les possibilités de sauvegarde et fermeture
sachant que si l'utilisateur sauvegarde sans fermer
le classeur reste ouvert mais avec seulement la feuille d'avertissement.

Merci d'avance

Voici le code que j'utilise:

'****
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

Dim sh As Worksheet

With Application
.ScreenUpdating = False

Worksheets("Avertissement").Visible = True
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Avertissement" Then sh.Visible = xlVeryHidden
Next

.ScreenUpdating = True
End With


End Sub

Private Sub Workbook_Open()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Sheets
sh.Visible = True
Next
Worksheets("Avertissement").Visible = xlVeryHidden

End Sub
'****
'lSteph





Avatar
LSteph
Bonjour Michdenis,

oui
Le but est bien pour un fichier destiné à être reproduit,
aussi bien sûr, le fichier doit pouvoir être enregistré sous.
Or en l'état il se retrouve enregistré là d'où il est
ouvert sans ouverture de la boite enregistrer sous.


Merci

"michdenis" a écrit dans le message de news:
%234zTY$
Bonjour LSteph,

Qu'est-ce que la commande "Enregistrer sous" vient faire dans ce que tu
demandes ? Quels sont tes objectifs ? Empêcher de reproduire
ton fichier ?


Salutations!



"LSteph" a écrit dans le message de news:

Merci de ton aide Michdenis ,

c'est bien cela que je cherche à faire
et j'avais commencer à me tricoter les méninges entre
les évènnements et à coups de if me.saved et cancel
mais sans succes ,
reste juste un souci , le enregistrer sous ...là
il fonctionne lorsqu'on a désactivé les macros seulement
or outre vouloir qu'il utilise le code , le classeur ouvert par
l'utilisateur doit pouvoir être
enregistré où il veut.

En attendant je regarde déjà demain comment tu as fait en détail et
comment
gèrer saveasui..

Encore Merci

Bonne nuit

lSteph







"michdenis" a écrit dans le message de news:
Oq%23$
Bonjour LSteph,


Va voir là : http://cjoint.com/?ipaDedcyhr

Enfin quelque chose qui fonctionne ! ;-)


Salutations!



"LSteph" a écrit dans le message de news:

Bonjour à tous,

Cela fait un moment que je tourne autour de cette question,
comment gèrer conjointement fermeture et BeforeSave? - dans le cas
suivant:

Le but est pour un classeur déterminé d'obliger l'utilisateur à activer
les
macros, ainsi
une feuille d'avertissement visible et les autres feuilles sont
xlveryhidden
le Workbook_open fera le nécessaire si les macros sont activées sinon
seul
l'avertissement restera affiché.
Quand on tente plus tard de fermer le classeur le before save entre en
action pour remasquer ce qui doit l'être.
Comment gèrer un peu mieux les possibilités de sauvegarde et fermeture
sachant que si l'utilisateur sauvegarde sans fermer
le classeur reste ouvert mais avec seulement la feuille d'avertissement.

Merci d'avance

Voici le code que j'utilise:

'****
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

Dim sh As Worksheet

With Application
.ScreenUpdating = False

Worksheets("Avertissement").Visible = True
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Avertissement" Then sh.Visible = xlVeryHidden
Next

.ScreenUpdating = True
End With


End Sub

Private Sub Workbook_Open()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Sheets
sh.Visible = True
Next
Worksheets("Avertissement").Visible = xlVeryHidden

End Sub
'****
'lSteph










Avatar
LSteph
Re, bonjour,

le truc qui clochait est résolu
je ne sais si c'est optimal mais voici ainsi, ce que j'ai modifié
indiqué ' ' ' ici
principalement dans le beforeSave
Juste une question pas compris :
If Me.Saved = False Or Me.Saved = True

Encore un grand Merci pour ton aide très précieuse
m'en sortais pas!

Bonne journée

lSteph



Private Sub Workbook_Activate()

Application.EnableEvents = True

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayAlerts = False
If ThisWorkbook.Saved = False Then
res = MsgBox("Désirez-vous enregistrer les modifications apportées au
classeur " & _
ThisWorkbook.Name & " ?", vbInformation + vbYesNoCancel)
Select Case res
Case vbYes
Application.EnableEvents = False '''
Me.Save
Application.EnableEvents = True '''
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)


Dim A As String
Dim S As String
Dim SavN '''ici
S = Application.EnableCancelKey
Application.EnableCancelKey = xlDisabled


If Me.Saved = False Or Me.Saved = True Then
Application.ScreenUpdating = False
A = ActiveSheet.Name

With Feuil1
.Visible = True
.Select
End With

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = xlVeryHidden
End If
Next

Application.EnableEvents = False
If SaveAsUI Then ''' d'ici
SavN = Application.GetSaveAsFilename
If SavN <> False Then
Me.SaveAs SavN
End If
Else
Me.Save
End If ''à là
Application.EnableEvents = True

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Sheets(A).Select
Feuil1.Visible = xlVeryHidden
Application.EnableCancelKey = S
Me.Saved = True
End If
Cancel = True

End Sub

Private Sub Workbook_Open()


For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Feuil1.Visible = xlVeryHidden
ThisWorkbook.Saved = True

End Sub
Avatar
michdenis
Bonjour LSteph,


Voici une version améliorer à cette adresse : http://cjoint.com/?ipn6VyvlvR
Le seul exemplaire que j'ai vu qui fonctionne réellement !!! ;-)


ça, je ne comprends pas... est-ce vraiment important ?
*-------------------
j'ai modifié
indiqué ' ' ' ici

*-------------------


Salutations!


"LSteph" a écrit dans le message de news:
Re, bonjour,

le truc qui clochait est résolu
je ne sais si c'est optimal mais voici ainsi, ce queprincipalement dans le beforeSave
Juste une question pas compris :
If Me.Saved = False Or Me.Saved = True

Encore un grand Merci pour ton aide très précieuse
m'en sortais pas!

Bonne journée

lSteph



Private Sub Workbook_Activate()

Application.EnableEvents = True

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayAlerts = False
If ThisWorkbook.Saved = False Then
res = MsgBox("Désirez-vous enregistrer les modifications apportées au
classeur " & _
ThisWorkbook.Name & " ?", vbInformation + vbYesNoCancel)
Select Case res
Case vbYes
Application.EnableEvents = False '''
Me.Save
Application.EnableEvents = True '''
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)


Dim A As String
Dim S As String
Dim SavN '''ici
S = Application.EnableCancelKey
Application.EnableCancelKey = xlDisabled


If Me.Saved = False Or Me.Saved = True Then
Application.ScreenUpdating = False
A = ActiveSheet.Name

With Feuil1
.Visible = True
.Select
End With

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = xlVeryHidden
End If
Next

Application.EnableEvents = False
If SaveAsUI Then ''' d'ici
SavN = Application.GetSaveAsFilename
If SavN <> False Then
Me.SaveAs SavN
End If
Else
Me.Save
End If ''à là
Application.EnableEvents = True

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Sheets(A).Select
Feuil1.Visible = xlVeryHidden
Application.EnableCancelKey = S
Me.Saved = True
End If
Cancel = True

End Sub

Private Sub Workbook_Open()


For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Feuil1.Visible = xlVeryHidden
ThisWorkbook.Saved = True

End Sub
Avatar
michdenis
La version précédente désactivait les événements à la fermeture du classeur. Certains n'apprécient guère !

En quelques minutes une seconde version améliorée ...Wow ! ;-)

http://cjoint.com/?ipoOwrciQ0

La prochaine virgule que je modifie dans ce classeur...ce dernier deviendra payant !

;-)


Salutations!





"LSteph" a écrit dans le message de news:
Re, bonjour,

le truc qui clochait est résolu
je ne sais si c'est optimal mais voici ainsi, ce que j'ai modifié
indiqué ' ' ' ici
principalement dans le beforeSave
Juste une question pas compris :
If Me.Saved = False Or Me.Saved = True

Encore un grand Merci pour ton aide très précieuse
m'en sortais pas!

Bonne journée

lSteph



Private Sub Workbook_Activate()

Application.EnableEvents = True

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayAlerts = False
If ThisWorkbook.Saved = False Then
res = MsgBox("Désirez-vous enregistrer les modifications apportées au
classeur " & _
ThisWorkbook.Name & " ?", vbInformation + vbYesNoCancel)
Select Case res
Case vbYes
Application.EnableEvents = False '''
Me.Save
Application.EnableEvents = True '''
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)


Dim A As String
Dim S As String
Dim SavN '''ici
S = Application.EnableCancelKey
Application.EnableCancelKey = xlDisabled


If Me.Saved = False Or Me.Saved = True Then
Application.ScreenUpdating = False
A = ActiveSheet.Name

With Feuil1
.Visible = True
.Select
End With

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = xlVeryHidden
End If
Next

Application.EnableEvents = False
If SaveAsUI Then ''' d'ici
SavN = Application.GetSaveAsFilename
If SavN <> False Then
Me.SaveAs SavN
End If
Else
Me.Save
End If ''à là
Application.EnableEvents = True

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Sheets(A).Select
Feuil1.Visible = xlVeryHidden
Application.EnableCancelKey = S
Me.Saved = True
End If
Cancel = True

End Sub

Private Sub Workbook_Open()


For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Feuil1.Visible = xlVeryHidden
ThisWorkbook.Saved = True

End Sub
Avatar
LSteph
Re, bonjour,
:o)

ça, je ne comprends pas... est-ce vraiment important ?
Oui, c'est primordial outre la question posée, la réponse obtenue

est un support à la réflexion surtout compte tenu de la qualité de tes
contributions.
Pour exemple, je retiens que:
- l'utilisateur pourrait provoquer un break .enablecancelkey
-renommer la feuille > If sh.Name <> Feuil1.Name Then
...etc...
ou bien :
Si tu parles du If .saved true or false , juste que j'ai pas pigé le but ,
sans doute des tests consécutifs ont laissé ceci en l'état,
mais peut être si c'est sur le précédent code que tu m'as proposé et qui
résolvait pourtant déjà beaucoup de choses
il subsistait que par le Menu Fichier Fermer on déclanchait le message
"voulez vous ..? mais n'enregistrait pas
Application.EnableEvents = False avant le me.save du beforeclose a résolu ce
pb
de même le enregistrer sous ne s'affichait pas , le fait d'ajouter le cas de
saveasui a résolu cela aussi.

Sinon (ou encore) tu me questionnais sur le but::
Pouvoir distribuer tout classeur sécurisé contenant des macros, à des
utilisateurs peu expérimentés
qui risquent de ne pas activer des macros et fonctions nécessaires au
classeur pour fonctionner parce que le message raconte les risques ....

En tout cas merci beaucoup pour ton aide efficace et pédagogique, j'ai enfin
compris comment utiliser cancel et saveasui.

Voici une version améliorer à cette adresse :
http://cjoint.com/?ipn6VyvlvR
Le seul exemplaire que j'ai vu qui fonctionne réellement !!! ;-)
....depuis le précédent


:o))
tu fais bien d'ajouter réellement car je m'en vais étudier pourquoi celui
que je proposais
ne l'est pas autant.
Mais cela aussi, c'est pour me faire avancer ...

Encore Merci !

lSteph


"michdenis" a écrit dans le message de news:
%
Bonjour LSteph,


Voici une version améliorer à cette adresse :
http://cjoint.com/?ipn6VyvlvR
Le seul exemplaire que j'ai vu qui fonctionne réellement !!! ;-)


ça, je ne comprends pas... est-ce vraiment important ?
*-------------------
j'ai modifié
indiqué ' ' ' ici

*-------------------


Salutations!


"LSteph" a écrit dans le message de news:

Re, bonjour,

le truc qui clochait est résolu
je ne sais si c'est optimal mais voici ainsi, ce queprincipalement dans
le beforeSave
Juste une question pas compris :
If Me.Saved = False Or Me.Saved = True

Encore un grand Merci pour ton aide très précieuse
m'en sortais pas!

Bonne journée

lSteph



Private Sub Workbook_Activate()

Application.EnableEvents = True

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayAlerts = False
If ThisWorkbook.Saved = False Then
res = MsgBox("Désirez-vous enregistrer les modifications apportées au
classeur " & _
ThisWorkbook.Name & " ?", vbInformation + vbYesNoCancel)
Select Case res
Case vbYes
Application.EnableEvents = False '''
Me.Save
Application.EnableEvents = True '''
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)


Dim A As String
Dim S As String
Dim SavN '''ici
S = Application.EnableCancelKey
Application.EnableCancelKey = xlDisabled


If Me.Saved = False Or Me.Saved = True Then
Application.ScreenUpdating = False
A = ActiveSheet.Name

With Feuil1
.Visible = True
.Select
End With

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = xlVeryHidden
End If
Next

Application.EnableEvents = False
If SaveAsUI Then ''' d'ici
SavN = Application.GetSaveAsFilename
If SavN <> False Then
Me.SaveAs SavN
End If
Else
Me.Save
End If ''à là
Application.EnableEvents = True

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Sheets(A).Select
Feuil1.Visible = xlVeryHidden
Application.EnableCancelKey = S
Me.Saved = True
End If
Cancel = True

End Sub

Private Sub Workbook_Open()


For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Feuil1.Visible = xlVeryHidden
ThisWorkbook.Saved = True

End Sub






Avatar
LSteph
En quelques minutes une seconde version améliorée ...Wow ! ;-)


;o))))
j'y cours
La prochaine virgule que je modifie dans ce classeur...ce dernier
deviendra payant !

;-)


Oui, Jean Paul doit être dans le coin, il parait que tu aimes aussi le
beaujolais , cela devrait s'arranger,
à l'oeuil j'entends bien!

Merci.................................

lSteph

"michdenis" a écrit dans le message de news:

La version précédente désactivait les événements à la fermeture du
classeur. Certains n'apprécient guère !

En quelques minutes une seconde version améliorée ...Wow ! ;-)

http://cjoint.com/?ipoOwrciQ0

La prochaine virgule que je modifie dans ce classeur...ce dernier
deviendra payant !

;-)


Salutations!





"LSteph" a écrit dans le message de news:

Re, bonjour,

le truc qui clochait est résolu
je ne sais si c'est optimal mais voici ainsi, ce que j'ai modifié
indiqué ' ' ' ici
principalement dans le beforeSave
Juste une question pas compris :
If Me.Saved = False Or Me.Saved = True

Encore un grand Merci pour ton aide très précieuse
m'en sortais pas!

Bonne journée

lSteph



Private Sub Workbook_Activate()

Application.EnableEvents = True

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.DisplayAlerts = False
If ThisWorkbook.Saved = False Then
res = MsgBox("Désirez-vous enregistrer les modifications apportées au
classeur " & _
ThisWorkbook.Name & " ?", vbInformation + vbYesNoCancel)
Select Case res
Case vbYes
Application.EnableEvents = False '''
Me.Save
Application.EnableEvents = True '''
Case vbNo
Me.Saved = True
Case vbCancel
Cancel = True
End Select
End If

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)


Dim A As String
Dim S As String
Dim SavN '''ici
S = Application.EnableCancelKey
Application.EnableCancelKey = xlDisabled


If Me.Saved = False Or Me.Saved = True Then
Application.ScreenUpdating = False
A = ActiveSheet.Name

With Feuil1
.Visible = True
.Select
End With

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = xlVeryHidden
End If
Next

Application.EnableEvents = False
If SaveAsUI Then ''' d'ici
SavN = Application.GetSaveAsFilename
If SavN <> False Then
Me.SaveAs SavN
End If
Else
Me.Save
End If ''à là
Application.EnableEvents = True

For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Sheets(A).Select
Feuil1.Visible = xlVeryHidden
Application.EnableCancelKey = S
Me.Saved = True
End If
Cancel = True

End Sub

Private Sub Workbook_Open()


For Each sh In Worksheets
If sh.Name <> Feuil1.Name Then
sh.Visible = True
End If
Next
Feuil1.Visible = xlVeryHidden
ThisWorkbook.Saved = True

End Sub






1 2