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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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.
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