Fermeture classeur sans enregistrer

1 réponse
Avatar
Daniel
Bonjour à toutes et à tous,

J'ai un classeur avec un USF1 qui permet de choisir soit de rentrer des
données avec un USF2, soit de consulter seulement les données présentes.

Lorsque c'est la consultation qui est choisie, il est demandé sur quel
onglet elle doit porter (en fait sur quel exercice). A la suite de quoi,
seul l'onglet concerné est visible avec des filtres pour faciliter la
consultation et la feuille est protégée en écriture (bon ok, la
protection pourrait être contournée facilement mais c'est juste pour
éviter une frappe malencontreuse).
Ce que je souhaiterai, c'est que l'utilisateur dans cette configuration
soit obligé de fermer le fichier sans pouvoir l'enregistrer (puisqu'il
est censé n'avoir rien modifié). Cela permettrait aussi de ne pas
conserverait la protection, ni les filtres et de laisser tous les
onglets visibles comme ils étaient initialement.

Et c'est là que je bloque.
J'ai bien mis le code suivant dans le ThisWorkbook, qui testerait
lorsqu'un enregistrement est demandé si la feuille active est protégée
(ce qui signifierait que l'on est en mode consultation), et dans ce cas
il fermerait simplement le classeur sans l'enregistrer et sans autre
message...

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

If ActiveSheet.Protect = True Then
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
End If

End Sub

Mais en fait lorsque je clique sur l’icône de la disquette, non
seulement il enregistre quand même le classeur mais en plus il protège
la feuille active même lorsque l'on quitte le mode "saisie" (où à aucun
moment il n'y a de protection de mise dans cette configuration).

Je ne suis pas certain d'avoir été clair dans ma présentation...

Daniel

1 réponse

Avatar
News.aioe.org
Bonjour,
Évidemment, je ne suis pas sûr d'avoir tout compris, mais...
A ) Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,
Cancel As Boolean)
Cette procédure événementielle se produit JUSTE AVANT l'enregistrement. Elle
n'empêche pas l'enregistrement par lui-même du fichier.
Pour ce faire, tu dois insérer cette ligne de code, elle cancelle
l'événement "Enregistrement du classeur".
CANCEL = TRUE dans l'exécution de la procédure.
À un autre niveau, si tu veux empêcher l'enregistrement du fichier à la
fermeture, tu as ceci :
'------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Cette ligne de code dit à Excel que le fichier n'a pas "été modifié" ou
qu'il n'a pas à être enregistré. Par conséquent, le fichier se fermera sans
demander de l'enregistrer à l'usager.
'je préfère ThisWorkbook à ActiveWorkbook car cela est spécifique au
classeur où elle est inscrite.
ThisWorkbook.Saved = True
End Sub
'------------------------------------
Au besoin, ces 2 lignes de code peuvent être assujetties à une ou des
conditions spécifiques pour leur exécution.
MichD