OVH Cloud OVH Cloud

Evènement BeforeSave

4 réponses
Avatar
Yann
Bonjour,
Je suis en plein développement Excel avec VBA (macros), en vu d'une
utilisation auprès de différents utilisateurs.
Pour les faire accepter les macro, j'ai inséré une page protégée vérouillant
entièrement l'application et invitant l'utilisateur a changer lui-même son
niveau de sécurité d'Excel et à accepter les macros.

Pour ce faire, j'ai écrit une procédure dans l'évènement BeforeSave qui
fonctionne très bien lorsque j'appuie sur le boutton enregistrer (ou Ctrl+S)
ou même lorsque je veux quitter Excel sans avoir enregistré, et qu'il me pose
la question "voulez-vous enregistrer le fichier ?", mais qui ne fonctionne
pas lorsque, avec Application.EnableEvents = True, je fais
ActiveWorkbook.Save !!!
Le code s'exécute bien, mais les actions de cacher les feuilles s'exécutent,
mais il n'y a aucune concéquence !!! En clair, je souhaite cacher toutes les
feuilles sauf la page d'accueil, mais il passe sur le code sans changer la
propriété visible de chaque feuille comme demandé...

Le mieux est encore d'avoir le code...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Ne rien montrer à l'utilisateur
With Application
.EnableEvents = False
.Interactive = False
.ScreenUpdating = False
.DisplayAlerts = False
End With
' Rendre visible la feuille d'accueil et masquer toutes les autres
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVisible
For Each Lobj_Sheet In Sheets
With Lobj_Sheet
If .Name <> Cstr_WelcomeSheetName Then .Visible = xlSheetVeryHidden
End With
Next Lobj_Sheet
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Enregistrer en montrant à l'utilisateur l'enregistrement en cours (bar de
progression)
With Application
.DisplayStatusBar = True
ActiveWorkbook.Save
.DisplayStatusBar = False
End With
' Annuler la demande d'enregistrement qui a permis d'entrer dans cet
évènement car le fichier vien d'être enregistré...
Cancel = True
' Rendre visible toutes les feuilles et masquer la feuille d'accueil
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
For Each Lobj_Sheet In Sheets
Lobj_Sheet.Visible = xlSheetVisible
Next Lobj_Sheet
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVeryHidden
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Redonner la main à l'utilisateur
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Interactive = True
.EnableEvents = True
End With
End Sub

Quelqu'un peut-il m'aider ?

--
Bye
Yann

4 réponses

Avatar
PMO
Bonjour,

Peut-être une piste.
Changez le passage suivant de votre code

With Application
.DisplayStatusBar = True
ActiveWorkbook.Save
.DisplayStatusBar = False
End With


par

With Application
.DisplayStatusBar = True
.ScreenUpdating = True
ActiveWorkbook.Save
.ScreenUpdating = False
.DisplayStatusBar = False
End With

Est-ce que ça apporte l'amélioration souhaitée ?

PMO
Patrick Morange





Bonjour,
Je suis en plein développement Excel avec VBA (macros), en vu d'une
utilisation auprès de différents utilisateurs.
Pour les faire accepter les macro, j'ai inséré une page protégée vérouillant
entièrement l'application et invitant l'utilisateur a changer lui-même son
niveau de sécurité d'Excel et à accepter les macros.

Pour ce faire, j'ai écrit une procédure dans l'évènement BeforeSave qui
fonctionne très bien lorsque j'appuie sur le boutton enregistrer (ou Ctrl+S)
ou même lorsque je veux quitter Excel sans avoir enregistré, et qu'il me pose
la question "voulez-vous enregistrer le fichier ?", mais qui ne fonctionne
pas lorsque, avec Application.EnableEvents = True, je fais
ActiveWorkbook.Save !!!
Le code s'exécute bien, mais les actions de cacher les feuilles s'exécutent,
mais il n'y a aucune concéquence !!! En clair, je souhaite cacher toutes les
feuilles sauf la page d'accueil, mais il passe sur le code sans changer la
propriété visible de chaque feuille comme demandé...

Le mieux est encore d'avoir le code...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Ne rien montrer à l'utilisateur
With Application
.EnableEvents = False
.Interactive = False
.ScreenUpdating = False
.DisplayAlerts = False
End With
' Rendre visible la feuille d'accueil et masquer toutes les autres
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVisible
For Each Lobj_Sheet In Sheets
With Lobj_Sheet
If .Name <> Cstr_WelcomeSheetName Then .Visible = xlSheetVeryHidden
End With
Next Lobj_Sheet
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Enregistrer en montrant à l'utilisateur l'enregistrement en cours (bar de
progression)
With Application
.DisplayStatusBar = True
ActiveWorkbook.Save
.DisplayStatusBar = False
End With
' Annuler la demande d'enregistrement qui a permis d'entrer dans cet
évènement car le fichier vien d'être enregistré...
Cancel = True
' Rendre visible toutes les feuilles et masquer la feuille d'accueil
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
For Each Lobj_Sheet In Sheets
Lobj_Sheet.Visible = xlSheetVisible
Next Lobj_Sheet
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVeryHidden
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Redonner la main à l'utilisateur
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Interactive = True
.EnableEvents = True
End With
End Sub

Quelqu'un peut-il m'aider ?

--
Bye
Yann


Avatar
Yann
Malheureusement non :o(


Bonjour,

Peut-être une piste.
Changez le passage suivant de votre code

With Application
.DisplayStatusBar = True
ActiveWorkbook.Save
.DisplayStatusBar = False
End With


par

With Application
.DisplayStatusBar = True
.ScreenUpdating = True
ActiveWorkbook.Save
.ScreenUpdating = False
.DisplayStatusBar = False
End With

Est-ce que ça apporte l'amélioration souhaitée ?

PMO
Patrick Morange





Bonjour,
Je suis en plein développement Excel avec VBA (macros), en vu d'une
utilisation auprès de différents utilisateurs.
Pour les faire accepter les macro, j'ai inséré une page protégée vérouillant
entièrement l'application et invitant l'utilisateur a changer lui-même son
niveau de sécurité d'Excel et à accepter les macros.

Pour ce faire, j'ai écrit une procédure dans l'évènement BeforeSave qui
fonctionne très bien lorsque j'appuie sur le boutton enregistrer (ou Ctrl+S)
ou même lorsque je veux quitter Excel sans avoir enregistré, et qu'il me pose
la question "voulez-vous enregistrer le fichier ?", mais qui ne fonctionne
pas lorsque, avec Application.EnableEvents = True, je fais
ActiveWorkbook.Save !!!
Le code s'exécute bien, mais les actions de cacher les feuilles s'exécutent,
mais il n'y a aucune concéquence !!! En clair, je souhaite cacher toutes les
feuilles sauf la page d'accueil, mais il passe sur le code sans changer la
propriété visible de chaque feuille comme demandé...

Le mieux est encore d'avoir le code...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Ne rien montrer à l'utilisateur
With Application
.EnableEvents = False
.Interactive = False
.ScreenUpdating = False
.DisplayAlerts = False
End With
' Rendre visible la feuille d'accueil et masquer toutes les autres
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVisible
For Each Lobj_Sheet In Sheets
With Lobj_Sheet
If .Name <> Cstr_WelcomeSheetName Then .Visible = xlSheetVeryHidden
End With
Next Lobj_Sheet
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Enregistrer en montrant à l'utilisateur l'enregistrement en cours (bar de
progression)
With Application
.DisplayStatusBar = True
ActiveWorkbook.Save
.DisplayStatusBar = False
End With
' Annuler la demande d'enregistrement qui a permis d'entrer dans cet
évènement car le fichier vien d'être enregistré...
Cancel = True
' Rendre visible toutes les feuilles et masquer la feuille d'accueil
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
For Each Lobj_Sheet In Sheets
Lobj_Sheet.Visible = xlSheetVisible
Next Lobj_Sheet
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVeryHidden
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Redonner la main à l'utilisateur
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Interactive = True
.EnableEvents = True
End With
End Sub

Quelqu'un peut-il m'aider ?

--
Bye
Yann




Avatar
Pounet95
Bonjour,
Qu'est-ce que Cstr_WelcomeSheetName ?
Une variable contenant le nom de la feuille ? Le nom de la feuille ?


--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/

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

Bonjour,
Je suis en plein développement Excel avec VBA (macros), en vu d'une
utilisation auprès de différents utilisateurs.
Pour les faire accepter les macro, j'ai inséré une page protégée
vérouillant
entièrement l'application et invitant l'utilisateur a changer lui-même son
niveau de sécurité d'Excel et à accepter les macros.

Pour ce faire, j'ai écrit une procédure dans l'évènement BeforeSave qui
fonctionne très bien lorsque j'appuie sur le boutton enregistrer (ou
Ctrl+S)
ou même lorsque je veux quitter Excel sans avoir enregistré, et qu'il me
pose
la question "voulez-vous enregistrer le fichier ?", mais qui ne fonctionne
pas lorsque, avec Application.EnableEvents = True, je fais
ActiveWorkbook.Save !!!
Le code s'exécute bien, mais les actions de cacher les feuilles
s'exécutent,
mais il n'y a aucune concéquence !!! En clair, je souhaite cacher toutes
les
feuilles sauf la page d'accueil, mais il passe sur le code sans changer la
propriété visible de chaque feuille comme demandé...

Le mieux est encore d'avoir le code...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
' Ne rien montrer à l'utilisateur
With Application
.EnableEvents = False
.Interactive = False
.ScreenUpdating = False
.DisplayAlerts = False
End With
' Rendre visible la feuille d'accueil et masquer toutes les autres
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVisible
For Each Lobj_Sheet In Sheets
With Lobj_Sheet
If .Name <> Cstr_WelcomeSheetName Then .Visible = xlSheetVeryHidden
End With
Next Lobj_Sheet
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Enregistrer en montrant à l'utilisateur l'enregistrement en cours (bar
de
progression)
With Application
.DisplayStatusBar = True
ActiveWorkbook.Save
.DisplayStatusBar = False
End With
' Annuler la demande d'enregistrement qui a permis d'entrer dans cet
évènement car le fichier vien d'être enregistré...
Cancel = True
' Rendre visible toutes les feuilles et masquer la feuille d'accueil
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
For Each Lobj_Sheet In Sheets
Lobj_Sheet.Visible = xlSheetVisible
Next Lobj_Sheet
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVeryHidden
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Redonner la main à l'utilisateur
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Interactive = True
.EnableEvents = True
End With
End Sub

Quelqu'un peut-il m'aider ?

--
Bye
Yann


Avatar
Yann
C'est bien la constante contenant le nom de la page d'accueil.

"Pounet95" wrote:

Bonjour,
Qu'est-ce que Cstr_WelcomeSheetName ?
Une variable contenant le nom de la feuille ? Le nom de la feuille ?


--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/

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

Bonjour,
Je suis en plein développement Excel avec VBA (macros), en vu d'une
utilisation auprès de différents utilisateurs.
Pour les faire accepter les macro, j'ai inséré une page protégée
vérouillant
entièrement l'application et invitant l'utilisateur a changer lui-même son
niveau de sécurité d'Excel et à accepter les macros.

Pour ce faire, j'ai écrit une procédure dans l'évènement BeforeSave qui
fonctionne très bien lorsque j'appuie sur le boutton enregistrer (ou
Ctrl+S)
ou même lorsque je veux quitter Excel sans avoir enregistré, et qu'il me
pose
la question "voulez-vous enregistrer le fichier ?", mais qui ne fonctionne
pas lorsque, avec Application.EnableEvents = True, je fais
ActiveWorkbook.Save !!!
Le code s'exécute bien, mais les actions de cacher les feuilles
s'exécutent,
mais il n'y a aucune concéquence !!! En clair, je souhaite cacher toutes
les
feuilles sauf la page d'accueil, mais il passe sur le code sans changer la
propriété visible de chaque feuille comme demandé...

Le mieux est encore d'avoir le code...

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
' Ne rien montrer à l'utilisateur
With Application
.EnableEvents = False
.Interactive = False
.ScreenUpdating = False
.DisplayAlerts = False
End With
' Rendre visible la feuille d'accueil et masquer toutes les autres
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVisible
For Each Lobj_Sheet In Sheets
With Lobj_Sheet
If .Name <> Cstr_WelcomeSheetName Then .Visible = xlSheetVeryHidden
End With
Next Lobj_Sheet
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Enregistrer en montrant à l'utilisateur l'enregistrement en cours (bar
de
progression)
With Application
.DisplayStatusBar = True
ActiveWorkbook.Save
.DisplayStatusBar = False
End With
' Annuler la demande d'enregistrement qui a permis d'entrer dans cet
évènement car le fichier vien d'être enregistré...
Cancel = True
' Rendre visible toutes les feuilles et masquer la feuille d'accueil
ActiveWorkbook.Unprotect Password:=Cstr_Pwd
For Each Lobj_Sheet In Sheets
Lobj_Sheet.Visible = xlSheetVisible
Next Lobj_Sheet
Sheets(Cstr_WelcomeSheetName).Visible = xlSheetVeryHidden
ActiveWorkbook.Protect Password:=Cstr_Pwd, Structure:=True
' Redonner la main à l'utilisateur
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Interactive = True
.EnableEvents = True
End With
End Sub

Quelqu'un peut-il m'aider ?

--
Bye
Yann