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

protection feuille et macro ...

1 réponse
Avatar
j-pascal
Bonjour,

J'ai une macro qui fonctionne (presque) bien après usage de
UserInterfaceOnly ...
Elle fonctionne si dans "outils/protection", j'ai coché :
"Tri" et "Objet" (c'est sur ce point que j'avais des pb jusqu'à présent ...
a priori !).

Mais lorsque je rouvre le classeur, la feuille est toujours protégée mais
les cases "Tri" et "Objet" ne le sont plus, d'où problème de débogage !
J'imagine qu'il y a un truc qui ne s'enregistre pas à la fermeture du
classeur ?!!

Le code de ThisWorkbook est le suivant :

---------------------------------------------------------------
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim tst
If SaveAsUI Then
'MsgBox "Désolé " & Application.UserName & " on ne doit pas
enregistrer sous "
'MsgBox ("Désolé, vous ne pouvez pas enregistrer sous..., vbOKOnly,
option invalide")
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
vbExclamation, "choix possibles : Enregistrer ou Fermer"

Cancel = True

Else
tst = MsgBox("Voulez-vous enregistrer une copie sous la forme : " &
"Date Heure Fichier.xls" & " ?", vbYesNo)
'& vbCrLf &

With ThisWorkbook
ChDir .Path
If tst = 6 Then
'.SaveCopyAs Format(Now, "yyyymmmdd-hhnn") & .Name
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name

Else
Cancel = True
End If
End With
End If

'---------------- ajout LSteph

Dim sh As Worksheet
Application.EnableCancelKey = xlDisabled

Application.ScreenUpdating = False
'Feuil3.Visible = xlSheetVisible

For Each sh In ThisWorkbook.Sheets
sh.Protect userinterfaceonly:=True
'If sh.CodeName <> "Feuil3" Then
'sh.Visible = xlSheetVeryHidden
'End If
Next

'---------------- fin ajout LSteph
End Sub
--------------------------------------------------------------------------------

Merci pour vos lumières ;-)
--
Cordialement @+
JP

1 réponse

Avatar
LSteph
Bonjour,

1-Tu as mis call restitue, mais la sub restitue n'y est pas
et c'est elle qui remet tout à l'ouverture, si on a activé les macros
et avec userinterfaceonly en guise de protection.
A défaut le tri ne fonctionnera pas.
2-Pas sûr que le cumul de deux beforesave aille ainsi sans souci de
fermeture ou enregistrement.
Si ajout il y a , il doit avoir lieu avant enregistrement du classeur,
mais effectivement pas de la copie, sauf si'la copie, s'assortit
également des mêmes dispositions dans le workbook_open.
4-Attention j'avais utilisé Feuil3 (codename) en guise d'avertissement,
dans l'exemple en est-il ainsi dans le classeur.


(?) ...
Oui!


@+


Bonjour,

J'ai une macro qui fonctionne (presque) bien après usage de
UserInterfaceOnly ...
Elle fonctionne si dans "outils/protection", j'ai coché :
"Tri" et "Objet" (c'est sur ce point que j'avais des pb jusqu'à présent
... a priori !).

Mais lorsque je rouvre le classeur, la feuille est toujours protégée
mais les cases "Tri" et "Objet" ne le sont plus, d'où problème de
débogage !
J'imagine qu'il y a un truc qui ne s'enregistre pas à la fermeture du
classeur ?!!

Le code de ThisWorkbook est le suivant :

---------------------------------------------------------------
Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim tst
If SaveAsUI Then
'MsgBox "Désolé " & Application.UserName & " on ne doit pas
enregistrer sous "
'MsgBox ("Désolé, vous ne pouvez pas enregistrer sous...,
vbOKOnly, option invalide")
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
vbExclamation, "choix possibles : Enregistrer ou Fermer"

Cancel = True

Else
tst = MsgBox("Voulez-vous enregistrer une copie sous la forme : "
& "Date Heure Fichier.xls" & " ?", vbYesNo)
'& vbCrLf &

With ThisWorkbook
ChDir .Path
If tst = 6 Then
'.SaveCopyAs Format(Now, "yyyymmmdd-hhnn") & .Name
.SaveCopyAs Format(Now, "yyyymmmdd-hh""h""nn") & " " & .Name

Else
Cancel = True
End If
End With
End If

'---------------- ajout LSteph

Dim sh As Worksheet
Application.EnableCancelKey = xlDisabled

Application.ScreenUpdating = False
'Feuil3.Visible = xlSheetVisible

For Each sh In ThisWorkbook.Sheets
sh.Protect userinterfaceonly:=True
'If sh.CodeName <> "Feuil3" Then
'sh.Visible = xlSheetVeryHidden
'End If
Next

'---------------- fin ajout LSteph
End Sub
--------------------------------------------------------------------------------


Merci pour vos lumières ;-)