Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vba - "Workbook_Open" ne fonctionne pas !

15 réponses
Avatar
j-pascal
Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

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

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change
rien, donc je suis un peu perdu !

Merci pour votre aide,

JP

10 réponses

1 2
Avatar
Papyjac
Bonjour J-pascal

Il faut que le niveau de sécurité macro sous moyen ou inférieure

Mets une instruction STOP dans la procédure pour voir si le code s'arrête
dessus
1. s'il s'arrête tu continue en pas à pas
2. s'il ne s'arrête pas c'est que les macro sous inactive

--
Papyjac


"j-pascal" a écrit :

Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

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

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change
rien, donc je suis un peu perdu !

Merci pour votre aide,

JP





Avatar
j-pascal
Re,

Je laisse le message me demandant d'activer ou pas les macros, en
"manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté" les
macros !
Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme juste le
classeur (en particulier avec un essai sur "enregistrer sous"),
l'ouverture suivante n'active pas le Workbook_open !!!

Suis perdu ;-(

JP

Bonjour J-pascal

Il faut que le niveau de sécurité macro sous moyen ou inférieure

Mets une instruction STOP dans la procédure pour voir si le code s'arrête
dessus
1. s'il s'arrête tu continue en pas à pas
2. s'il ne s'arrête pas c'est que les macro sous inactive

--
Papyjac


"j-pascal" a écrit :

Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

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

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change
rien, donc je suis un peu perdu !

Merci pour votre aide,

JP







Avatar
Papyjac
Bonjour J-pascal,

Je comprends qu'il y a 3 scénarios de tests :
1 ouvrir Excel en ouvrant le classeur
2. Ouvrir le classeur alors qu'Excel est déjà ouvert
3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé le classeur
précédent

Tu mets stop dans Workbook_Open, et tu regardes le comportement dans les 3 cas
J'ai comme l'impression que les évènements sont inhibés dans le 3ème cas

--
Papyjac


"j-pascal" a écrit :

Re,

Je laisse le message me demandant d'activer ou pas les macros, en
"manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté" les
macros !
Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme juste le
classeur (en particulier avec un essai sur "enregistrer sous"),
l'ouverture suivante n'active pas le Workbook_open !!!

Suis perdu ;-(

JP

> Bonjour J-pascal
>
> Il faut que le niveau de sécurité macro sous moyen ou inférieure
>
> Mets une instruction STOP dans la procédure pour voir si le code s'arrête
> dessus
> 1. s'il s'arrête tu continue en pas à pas
> 2. s'il ne s'arrête pas c'est que les macro sous inactive
>
> --
> Papyjac
>
>
> "j-pascal" a écrit :
>
>> Bonjour,
>>
>> Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
>> l'ouverture du classeur !
>>
>> '-------
>> Private Sub Workbook_Open()
>> Dim Sh As Worksheet
>>
>> Application.ScreenUpdating = False
>> Call ProchaineAlerte
>>
>> For Each Sh In ThisWorkbook.Sheets
>> Sh.Visible = xlSheetVisible
>> Next
>> etc.
>> '--------
>>
>> La sortie :
>>
>> '--------
>> Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
>> Boolean)
>>
>> etc.
>>
>> 'Application.EnableEvents = True
>> ThisWorkbook.Close True 'ajout 7/12
>> End Sub
>> '--------
>>
>> Ca fonctionne si je ferme Excel et que je rouvre le classeur !
>> L'ajout d'un "Application.EnableEvents = True" en sortie ne change
>> rien, donc je suis un peu perdu !
>>
>> Merci pour votre aide,
>>
>> JP
>>
>>
>>





Avatar
j-pascal
Bonsoir,

Je deviens fou avec ce : "Private Sub Workbook_BeforeSave(ByVal
SaveAsUI As Boolean, Cancel As Boolean)"

Je pense que le pb est là (à part moi, bien sûr !!)

Comment est-il possible de shunter l'option "Enregistrer sous" ?

Imaginons qu'il y ait certaines actions effectuées avant la fermeture
du classeur ... Si je mets un test conditionnel tel que : "If SaveAsUI
Then Cancel = True", mon classeur reste ouvert et je ne peux pas
"reboucler" vers la fermeture "classique" que j'avais prévu si
l'utilisateur n'avait pas eu la mauvaise idée de vouloir l'enregistrer
ailleurs que là où je voulais qu'il soit !!!

Je ne comprends pas qu'il ne soit pas plus aisé de shunter cette option
! Quoiqu'il en soit, je ne m'en sors pas et à l'heure qu'il est j'ai
plutôt envie de passer tout le classeur à "Eraser.exe"...

JP

PS : j'ai essayé les 3 cas de figures que tu proposes. Je n'ai rien vu
d'anormal. Je pense qu'il y a un mode de fermeture que je n'ai pas dû
reproduire ; l'ouverture est donc normale.

Bonjour J-pascal,

Je comprends qu'il y a 3 scénarios de tests :
1 ouvrir Excel en ouvrant le classeur
2. Ouvrir le classeur alors qu'Excel est déjà ouvert
3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé le classeur
précédent

Tu mets stop dans Workbook_Open, et tu regardes le comportement dans les 3
cas J'ai comme l'impression que les évènements sont inhibés dans le 3ème cas

--
Papyjac


"j-pascal" a écrit :

Re,

Je laisse le message me demandant d'activer ou pas les macros, en
"manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté" les
macros !
Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme juste le
classeur (en particulier avec un essai sur "enregistrer sous"),
l'ouverture suivante n'active pas le Workbook_open !!!

Suis perdu ;-(

JP

Bonjour J-pascal

Il faut que le niveau de sécurité macro sous moyen ou inférieure

Mets une instruction STOP dans la procédure pour voir si le code s'arrête
dessus
1. s'il s'arrête tu continue en pas à pas
2. s'il ne s'arrête pas c'est que les macro sous inactive

--
Papyjac


"j-pascal" a écrit :

Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

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

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change
rien, donc je suis un peu perdu !

Merci pour votre aide,

JP














Avatar
LSteph
Bonsoir,

( à part ceux qui contourneraient l'activation des macros)

comprend pas où est le pb?

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

If SaveAsUI Then Cancel = True: MsgBox "Désolé il faut enregistrer là où
c'est prévu à la fermeture"
End Sub


Ton fichier est enregistré à sa place,
si ton user le ferme après modif
il aura la question de savoir s'il veut enregistrer
Oui Non

si avant cela il veut enregistrer sous
il aura le message "Désolé ....

il n'aura plus qu'à revenir à la première alternative.
Fermer ou quitter et choisir Oui ou non

--
lSteph

j-pascal a écrit :
Bonsoir,

Je deviens fou avec ce : "Private Sub Workbook_BeforeSave(ByVal SaveAsUI
As Boolean, Cancel As Boolean)"

Je pense que le pb est là (à part moi, bien sûr !!)

Comment est-il possible de shunter l'option "Enregistrer sous" ?

Imaginons qu'il y ait certaines actions effectuées avant la fermeture du
classeur ... Si je mets un test conditionnel tel que : "If SaveAsUI
Then Cancel = True", mon classeur reste ouvert et je ne peux pas
"reboucler" vers la fermeture "classique" que j'avais prévu si
l'utilisateur n'avait pas eu la mauvaise idée de vouloir l'enregistrer
ailleurs que là où je voulais qu'il soit !!!

Je ne comprends pas qu'il ne soit pas plus aisé de shunter cette option
! Quoiqu'il en soit, je ne m'en sors pas et à l'heure qu'il est j'ai
plutôt envie de passer tout le classeur à "Eraser.exe"...

JP

PS : j'ai essayé les 3 cas de figures que tu proposes. Je n'ai rien vu
d'anormal. Je pense qu'il y a un mode de fermeture que je n'ai pas dû
reproduire ; l'ouverture est donc normale.

Bonjour J-pascal,

Je comprends qu'il y a 3 scénarios de tests :
1 ouvrir Excel en ouvrant le classeur 2. Ouvrir le classeur alors
qu'Excel est déjà ouvert
3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé le
classeur précédent

Tu mets stop dans Workbook_Open, et tu regardes le comportement dans
les 3 cas J'ai comme l'impression que les évènements sont inhibés dans
le 3ème cas

--
Papyjac


"j-pascal" a écrit :

Re,

Je laisse le message me demandant d'activer ou pas les macros, en
"manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté"
les macros !
Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme juste
le classeur (en particulier avec un essai sur "enregistrer sous"),
l'ouverture suivante n'active pas le Workbook_open !!!

Suis perdu ;-(

JP

Bonjour J-pascal

Il faut que le niveau de sécurité macro sous moyen ou inférieure

Mets une instruction STOP dans la procédure pour voir si le code
s'arrête dessus 1. s'il s'arrête tu continue en pas à pas
2. s'il ne s'arrête pas c'est que les macro sous inactive

--
Papyjac


"j-pascal" a écrit :

Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

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

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change
rien, donc je suis un peu perdu !

Merci pour votre aide,

JP


















Avatar
LSteph
..mais un enableevents reste de toutes façons possible

(..entre autres)..

--
lSteph

(aussi bien d'ailleurs pour qui veut déjouer ces inutiles tentatives de
sécurisation.)

j-pascal a écrit :
Bonsoir,

Je deviens fou avec ce : "Private Sub Workbook_BeforeSave(ByVal SaveAsUI
As Boolean, Cancel As Boolean)"

Je pense que le pb est là (à part moi, bien sûr !!)

Comment est-il possible de shunter l'option "Enregistrer sous" ?

Imaginons qu'il y ait certaines actions effectuées avant la fermeture du
classeur ... Si je mets un test conditionnel tel que : "If SaveAsUI
Then Cancel = True", mon classeur reste ouvert et je ne peux pas
"reboucler" vers la fermeture "classique" que j'avais prévu si
l'utilisateur n'avait pas eu la mauvaise idée de vouloir l'enregistrer
ailleurs que là où je voulais qu'il soit !!!

Je ne comprends pas qu'il ne soit pas plus aisé de shunter cette option
! Quoiqu'il en soit, je ne m'en sors pas et à l'heure qu'il est j'ai
plutôt envie de passer tout le classeur à "Eraser.exe"...

JP

PS : j'ai essayé les 3 cas de figures que tu proposes. Je n'ai rien vu
d'anormal. Je pense qu'il y a un mode de fermeture que je n'ai pas dû
reproduire ; l'ouverture est donc normale.

Bonjour J-pascal,

Je comprends qu'il y a 3 scénarios de tests :
1 ouvrir Excel en ouvrant le classeur 2. Ouvrir le classeur alors
qu'Excel est déjà ouvert
3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé le
classeur précédent

Tu mets stop dans Workbook_Open, et tu regardes le comportement dans
les 3 cas J'ai comme l'impression que les évènements sont inhibés dans
le 3ème cas

--
Papyjac


"j-pascal" a écrit :

Re,

Je laisse le message me demandant d'activer ou pas les macros, en
"manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté"
les macros !
Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme juste
le classeur (en particulier avec un essai sur "enregistrer sous"),
l'ouverture suivante n'active pas le Workbook_open !!!

Suis perdu ;-(

JP

Bonjour J-pascal

Il faut que le niveau de sécurité macro sous moyen ou inférieure

Mets une instruction STOP dans la procédure pour voir si le code
s'arrête dessus 1. s'il s'arrête tu continue en pas à pas
2. s'il ne s'arrête pas c'est que les macro sous inactive

--
Papyjac


"j-pascal" a écrit :

Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

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

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change
rien, donc je suis un peu perdu !

Merci pour votre aide,

JP


















Avatar
j-pascal
Bonsoir Stéphane,

Si je mets (ta proposition) :
'---
If SaveAsUI Then Cancel = True: MsgBox "Désolé il faut enregistrer là

c'est prévu à la fermeture"
End Sub
'---

Que fait le classeur si l'user ne clique pas sur "Enregistrer sous" ?

Si j'insère un "Else" après ton "End Sub", la fenêtre de débogage me
précise (ce qui ne m'étonne pas) que seuls des commentaires (...)
peuvent être insérés après "End Sub" ; donc comment traiter la
condition "Enregistrer Sous" ou "Enregistrer" ??

En un mot, comment insérer ton code dans "mon" code :

'----------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim Sh As Worksheet
Dim MaPlageDeSaisies
Dim PlageDeSaisies

On Error Resume Next
Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
Schedule:úlse

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
_
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
GoTo suite:
Else 'End If
suite:
With ThisWorkbook
ChDrive "C"
ChDir .Path

Application.ScreenUpdating = False

With Feuil2
.Unprotect
.[b3:i2000].Locked = False
End With

MaPlageDeSaisies = Range("B3:I" &
Application.CountA(Range("G:G"))).Address
With Range(MaPlageDeSaisies)
.Locked = True
.FormulaHidden = False
End With

With ActiveSheet
.Protect _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True
.EnableSelection = xlUnlockedCells
End With

Application.EnableEvents = False
With Feuil3
.Visible = True '[accueil] visible
.Activate
ActiveWindow.ScrollRow = 1
End With
Application.EnableEvents = True

For Each Sh In ThisWorkbook.Sheets
If Sh.CodeName <> "Feuil3" Then Sh.Visible =
xlSheetVeryHidden
Next
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
End If

End Sub
'----------------

@+ ?

JP

Bonsoir,

( à part ceux qui contourneraient l'activation des macros)

comprend pas où est le pb?

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

If SaveAsUI Then Cancel = True: MsgBox "Désolé il faut enregistrer là où
c'est prévu à la fermeture"
End Sub


Ton fichier est enregistré à sa place,
si ton user le ferme après modif
il aura la question de savoir s'il veut enregistrer
Oui Non

si avant cela il veut enregistrer sous
il aura le message "Désolé ....

il n'aura plus qu'à revenir à la première alternative.
Fermer ou quitter et choisir Oui ou non

--
lSteph

j-pascal a écrit :
Bonsoir,

Je deviens fou avec ce : "Private Sub Workbook_BeforeSave(ByVal SaveAsUI As
Boolean, Cancel As Boolean)"

Je pense que le pb est là (à part moi, bien sûr !!)

Comment est-il possible de shunter l'option "Enregistrer sous" ?

Imaginons qu'il y ait certaines actions effectuées avant la fermeture du
classeur ... Si je mets un test conditionnel tel que : "If SaveAsUI Then
Cancel = True", mon classeur reste ouvert et je ne peux pas "reboucler"
vers la fermeture "classique" que j'avais prévu si l'utilisateur n'avait
pas eu la mauvaise idée de vouloir l'enregistrer ailleurs que là où je
voulais qu'il soit !!!

Je ne comprends pas qu'il ne soit pas plus aisé de shunter cette option !
Quoiqu'il en soit, je ne m'en sors pas et à l'heure qu'il est j'ai plutôt
envie de passer tout le classeur à "Eraser.exe"...

JP

PS : j'ai essayé les 3 cas de figures que tu proposes. Je n'ai rien vu
d'anormal. Je pense qu'il y a un mode de fermeture que je n'ai pas dû
reproduire ; l'ouverture est donc normale.

Bonjour J-pascal,

Je comprends qu'il y a 3 scénarios de tests :
1 ouvrir Excel en ouvrant le classeur 2. Ouvrir le classeur alors qu'Excel
est déjà ouvert
3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé le
classeur précédent

Tu mets stop dans Workbook_Open, et tu regardes le comportement dans les 3
cas J'ai comme l'impression que les évènements sont inhibés dans le 3ème
cas

-- Papyjac


"j-pascal" a écrit :

Re,

Je laisse le message me demandant d'activer ou pas les macros, en
"manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté" les
macros !
Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme juste le
classeur (en particulier avec un essai sur "enregistrer sous"),
l'ouverture suivante n'active pas le Workbook_open !!!

Suis perdu ;-(

JP

Bonjour J-pascal

Il faut que le niveau de sécurité macro sous moyen ou inférieure

Mets une instruction STOP dans la procédure pour voir si le code
s'arrête dessus 1. s'il s'arrête tu continue en pas à pas
2. s'il ne s'arrête pas c'est que les macro sous inactive

-- Papyjac


"j-pascal" a écrit :

Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

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

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne change
rien, donc je suis un peu perdu !

Merci pour votre aide,

JP




















Avatar
LSteph
Bonjour,

1 -
> Si je mets (ta proposition) :
> Que fait le classeur si l'user ne clique pas sur "Enregistrer sous" ?

Il se comporte normalement, soit comme on doit bien finir par le fermer
ou quitter si des modifs ont été faites, la question d'enregistrer ou
non est posée par excel et il s'enregistre à sa place d'origine ou pas
selon le choix.

La question sera donc plutôt
.. Que fait le classeur si l'user clique sur "Enregistrer sous"

et bien c'est annulé,...et uniquement dans ce cas!

2 -
> Si j'insère un "Else" après ton "End Sub"

Ca n'est pas comme cela: on l'insère avant et on mettra un end if avant
le end sub

3 -
> En un mot, comment insérer ton code dans "mon" code :
normalement donc....mais d'abord règler ces questions:

a-
c'est quoi ce ontime en sortie ???!!!
> Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
il y a quoi dans la routine appelée?
Attention cela va rouvrir ton classeur à l'heure dite et selon le cas
t'es pas sorti si cela remodifie et doit requitter en se réactivant
le classeur sera à nouveau rappelé...etc...!

b-que cherches tu à faire?

c- Pourquoi mettre ces protect et unprotect c'estpas commode,
tu gagnerais à utiliser userinterfaceonly mais comme déjà expliqué
cela doit être intégré avec les autres options de protection
obligatoirement dans le Workbook_open

d_ Avantageusement aussi creer une mamacro à part pour tes traitements à
appliquer en sortie pour copies et masquages

de-shématiquement quand tu te seras acquitté de ces points critiques, on
doit revenir en dépit de tout cela à des choses bien simples:

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

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, " Veuillez utiliser fichier fermer ou quitter
vous aurez le choix d'enregistrer ou pas"
Cancel = True

Else
Call mamacro

end if

End Sub


'lSteph


j-pascal a écrit :
Bonsoir Stéphane,

Si je mets (ta proposition) :
'---
If SaveAsUI Then Cancel = True: MsgBox "Désolé il faut enregistrer là où
c'est prévu à la fermeture"
End Sub
'---

Que fait le classeur si l'user ne clique pas sur "Enregistrer sous" ?

Si j'insère un "Else" après ton "End Sub", la fenêtre de débogage me
précise (ce qui ne m'étonne pas) que seuls des commentaires (...)
peuvent être insérés après "End Sub" ; donc comment traiter la condition
"Enregistrer Sous" ou "Enregistrer" ??

En un mot, comment insérer ton code dans "mon" code :

'----------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim Sh As Worksheet
Dim MaPlageDeSaisies
Dim PlageDeSaisies

On Error Resume Next
Application.OnTime EarliestTime:=HeureAlerte, Procedure:="fin",
Schedule:úlse

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, "choix possibles : Enregistrer ou Fermer"
Cancel = True
GoTo suite:
Else 'End If
suite:
With ThisWorkbook
ChDrive "C"
ChDir .Path

Application.ScreenUpdating = False

With Feuil2
.Unprotect
.[b3:i2000].Locked = False
End With

MaPlageDeSaisies = Range("B3:I" &
Application.CountA(Range("G:G"))).Address
With Range(MaPlageDeSaisies)
.Locked = True
.FormulaHidden = False
End With

With ActiveSheet
.Protect _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True
.EnableSelection = xlUnlockedCells
End With

Application.EnableEvents = False
With Feuil3
.Visible = True '[accueil] visible
.Activate
ActiveWindow.ScrollRow = 1
End With
Application.EnableEvents = True

For Each Sh In ThisWorkbook.Sheets
If Sh.CodeName <> "Feuil3" Then Sh.Visible = xlSheetVeryHidden
Next
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
End If

End Sub
'----------------

@+ ?

JP

Bonsoir,

( à part ceux qui contourneraient l'activation des macros)

comprend pas où est le pb?

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

If SaveAsUI Then Cancel = True: MsgBox "Désolé il faut enregistrer là
où c'est prévu à la fermeture"
End Sub


Ton fichier est enregistré à sa place,
si ton user le ferme après modif
il aura la question de savoir s'il veut enregistrer
Oui Non

si avant cela il veut enregistrer sous
il aura le message "Désolé ....

il n'aura plus qu'à revenir à la première alternative.
Fermer ou quitter et choisir Oui ou non

--
lSteph

j-pascal a écrit :
Bonsoir,

Je deviens fou avec ce : "Private Sub Workbook_BeforeSave(ByVal
SaveAsUI As Boolean, Cancel As Boolean)"

Je pense que le pb est là (à part moi, bien sûr !!)

Comment est-il possible de shunter l'option "Enregistrer sous" ?

Imaginons qu'il y ait certaines actions effectuées avant la fermeture
du classeur ... Si je mets un test conditionnel tel que : "If
SaveAsUI Then Cancel = True", mon classeur reste ouvert et je ne peux
pas "reboucler" vers la fermeture "classique" que j'avais prévu si
l'utilisateur n'avait pas eu la mauvaise idée de vouloir
l'enregistrer ailleurs que là où je voulais qu'il soit !!!

Je ne comprends pas qu'il ne soit pas plus aisé de shunter cette
option ! Quoiqu'il en soit, je ne m'en sors pas et à l'heure qu'il
est j'ai plutôt envie de passer tout le classeur à "Eraser.exe"...

JP

PS : j'ai essayé les 3 cas de figures que tu proposes. Je n'ai rien
vu d'anormal. Je pense qu'il y a un mode de fermeture que je n'ai pas
dû reproduire ; l'ouverture est donc normale.

Bonjour J-pascal,

Je comprends qu'il y a 3 scénarios de tests :
1 ouvrir Excel en ouvrant le classeur 2. Ouvrir le classeur alors
qu'Excel est déjà ouvert
3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé le
classeur précédent

Tu mets stop dans Workbook_Open, et tu regardes le comportement dans
les 3 cas J'ai comme l'impression que les évènements sont inhibés
dans le 3ème cas

-- Papyjac


"j-pascal" a écrit :

Re,

Je laisse le message me demandant d'activer ou pas les macros, en
"manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté"
les macros !
Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme
juste le classeur (en particulier avec un essai sur "enregistrer
sous"), l'ouverture suivante n'active pas le Workbook_open !!!

Suis perdu ;-(

JP

Bonjour J-pascal

Il faut que le niveau de sécurité macro sous moyen ou inférieure

Mets une instruction STOP dans la procédure pour voir si le code
s'arrête dessus 1. s'il s'arrête tu continue en pas à pas
2. s'il ne s'arrête pas c'est que les macro sous inactive

-- Papyjac


"j-pascal" a écrit :

Bonjour,

Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
l'ouverture du classeur !

'-------
Private Sub Workbook_Open()
Dim Sh As Worksheet

Application.ScreenUpdating = False
Call ProchaineAlerte

For Each Sh In ThisWorkbook.Sheets
Sh.Visible = xlSheetVisible
Next
etc.
'--------

La sortie :

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

etc.

'Application.EnableEvents = True
ThisWorkbook.Close True 'ajout 7/12
End Sub
'--------

Ca fonctionne si je ferme Excel et que je rouvre le classeur !
L'ajout d'un "Application.EnableEvents = True" en sortie ne
change rien, donc je suis un peu perdu !

Merci pour votre aide,

JP
























Avatar
LSteph
.. et j'oublie de réinsister pour dire que tout cela c'est de
l'e....age de mouches car

Sub AucunPb()
application.enableeventsúlse
Activeworkbook.saveas "c:oujeveuxmachin.xls"
application.enableevents=true
end sub


'LSteph
Avatar
Papyjac
Bonjour Lsteph et J-pascal

restons courtois et sereins

Effectivement, J-pascal est coincé, mais il faut débuter un jour, bref, il
veut interdire aux utilisateurs de faire telle ou telle chose. les frustrer...

Moi je dis que l'utilisateur doit resté libre d'utiliser Excel comme il
l'entend

J'ai débuté en truffant les classeurs de procédure événements, ouvrir,
fermer, enregistrer, sélection... et j'ai eu des problèmes comme lui avec les
ENEANBLEEVENTS.

Bref, désormais, quand je donne un classeur en saisie à l'utilisateur, je le
laisse libre. Il doit seulement respecter les consignes. Il peut même
bricoler s'il le veut, sous réserve que ça ne plante pas le processus

De toute manière si ça plante, il te téléphonera pour dire "ca ne marche
pas" et tu iras lui sauver le vie, tu lui passe un savon s'il à trop bricolé.
et tu renforces un peu ton code... naturellement, il est indispensable que
ton code ne soit pas dans le classeur lui-même, car tu auras un gros problème
de déploiement. mais c'est une autre histoire trop longue ce matin

Bon courage j-Pascal et soi plus cool avec les utilisateurs

--
Papyjac


"LSteph" a écrit :

...mais un enableevents reste de toutes façons possible

(..entre autres)..

--
lSteph

(aussi bien d'ailleurs pour qui veut déjouer ces inutiles tentatives de
sécurisation.)

j-pascal a écrit :
> Bonsoir,
>
> Je deviens fou avec ce : "Private Sub Workbook_BeforeSave(ByVal SaveAsUI
> As Boolean, Cancel As Boolean)"
>
> Je pense que le pb est là (à part moi, bien sûr !!)
>
> Comment est-il possible de shunter l'option "Enregistrer sous" ?
>
> Imaginons qu'il y ait certaines actions effectuées avant la fermeture du
> classeur ... Si je mets un test conditionnel tel que : "If SaveAsUI
> Then Cancel = True", mon classeur reste ouvert et je ne peux pas
> "reboucler" vers la fermeture "classique" que j'avais prévu si
> l'utilisateur n'avait pas eu la mauvaise idée de vouloir l'enregistrer
> ailleurs que là où je voulais qu'il soit !!!
>
> Je ne comprends pas qu'il ne soit pas plus aisé de shunter cette option
> ! Quoiqu'il en soit, je ne m'en sors pas et à l'heure qu'il est j'ai
> plutôt envie de passer tout le classeur à "Eraser.exe"...
>
> JP
>
> PS : j'ai essayé les 3 cas de figures que tu proposes. Je n'ai rien vu
> d'anormal. Je pense qu'il y a un mode de fermeture que je n'ai pas dû
> reproduire ; l'ouverture est donc normale.
>
>> Bonjour J-pascal,
>>
>> Je comprends qu'il y a 3 scénarios de tests :
>> 1 ouvrir Excel en ouvrant le classeur 2. Ouvrir le classeur alors
>> qu'Excel est déjà ouvert
>> 3. Ouvrir le classeur alors qu'Excel est ouvert et qu'on a fermé le
>> classeur précédent
>>
>> Tu mets stop dans Workbook_Open, et tu regardes le comportement dans
>> les 3 cas J'ai comme l'impression que les évènements sont inhibés dans
>> le 3ème cas
>>
>> --
>> Papyjac
>>
>>
>> "j-pascal" a écrit :
>>
>>> Re,
>>>
>>> Je laisse le message me demandant d'activer ou pas les macros, en
>>> "manuel". Dans le cas que j'ai décrit, j'ai bien entendu "accepté"
>>> les macros !
>>> Le pb c'est que si je ferme Excel, ça fonctionne ; si je ferme juste
>>> le classeur (en particulier avec un essai sur "enregistrer sous"),
>>> l'ouverture suivante n'active pas le Workbook_open !!!
>>>
>>> Suis perdu ;-(
>>>
>>> JP
>>>
>>>> Bonjour J-pascal
>>>>
>>>> Il faut que le niveau de sécurité macro sous moyen ou inférieure
>>>>
>>>> Mets une instruction STOP dans la procédure pour voir si le code
>>>> s'arrête dessus 1. s'il s'arrête tu continue en pas à pas
>>>> 2. s'il ne s'arrête pas c'est que les macro sous inactive
>>>>
>>>> --
>>>> Papyjac
>>>>
>>>>
>>>> "j-pascal" a écrit :
>>>>
>>>>> Bonjour,
>>>>>
>>>>> Pour une raison que j'ignore, Workbook_Open () ne se lance pas à
>>>>> l'ouverture du classeur !
>>>>>
>>>>> '-------
>>>>> Private Sub Workbook_Open()
>>>>> Dim Sh As Worksheet
>>>>>
>>>>> Application.ScreenUpdating = False
>>>>> Call ProchaineAlerte
>>>>>
>>>>> For Each Sh In ThisWorkbook.Sheets
>>>>> Sh.Visible = xlSheetVisible
>>>>> Next
>>>>> etc.
>>>>> '--------
>>>>>
>>>>> La sortie :
>>>>>
>>>>> '--------
>>>>> Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel
>>>>> As Boolean)
>>>>>
>>>>> etc.
>>>>>
>>>>> 'Application.EnableEvents = True
>>>>> ThisWorkbook.Close True 'ajout 7/12
>>>>> End Sub
>>>>> '--------
>>>>>
>>>>> Ca fonctionne si je ferme Excel et que je rouvre le classeur !
>>>>> L'ajout d'un "Application.EnableEvents = True" en sortie ne change
>>>>> rien, donc je suis un peu perdu !
>>>>>
>>>>> Merci pour votre aide,
>>>>>
>>>>> JP
>>>>>
>>>>>
>>>>>
>>>
>>>
>>>
>
>



1 2