Protection par macro d'une feuille Calc avec désélection des autorisations :
Voici le rapport de bug - dernière mise à jour le 04/02/2014 - qui
semble dire que cela n'est pas possible :
https://bugs.documentfoundation.org/show_bug.cgi?id=55969&redirected_from=fdo
Mailing
Mais peut-être du nouveau depuis ?
Cordialement
Le 07/03/2016 07:27, Jean-Francois Nifenecker a écrit :
Bonjour Michel,
Le 06/03/2016 22:58, Michel Rudelle a écrit :
C'est très simple, il s'agit de faire par macro les choix que l'on peut
faire manuellement quand on protège une feuille, c-a-d autoriser ou non
l'utilisateur à sélectionner certains types de cellules :
<http://nabble.documentfoundation.org/file/n4177789/ScreenShot761.jpg>
Par défaut toutes les sélections sont autorisées, et je veux les
interdire.
en résumé, que le classeur puisse se trouver alternativement dans deux
modes : un mode "développement" (tout est permis) et un mode
"production" (on restreint/masque selon les besoins) ?
J'ai également rencontré le même besoin, cela va sans dire.
Voici ce je que j'utilise :
Je crée une feuille "Gestion" qui comporte des infos sur les feuilles
mais -- surtout -- deux boutons : "Mode développement" et "Mode
production". Ces deux boutons basculent d'un mode à l'autre en
appelant deux macros correspondantes (et sensiblement de même
structure). L'une active (mode développement), l'autre
désactive/cache/etc. (mode production).
Voici ces deux macros (PrepareDev et PrepareDev), qui -- elles-mêmes
-- appellent deux macros de travail (PrepareForDev et PrepareForProd).
Ces macros sont listées ci-dessous.
PW_SPREAD et PW_SHEETS sont les constantes qui contiennent les mots de
passe de protextion,
"accueil" est le nom de la feuille à afficher à l'entrée dans le
classeur (feuille active),
Array() liste les feuilles qui doivent être masquées/affichées
8< ---------------------------------------------
Sub PrepareDev()
PrepareForDev(PWD_SPREAD, PWD_SHEETS, "accueil",
Array("cote_p_calculs", "heures", "bonifs", "artt", "artt2", "rh", "à
reporter", "ref", "gestion"))
End Sub 'PrepareDev
Sub PrepareProd()
PrepareForProd(PWD_SPREAD, PWD_SHEETS, "accueil",
Array("cote_p_calculs", "heures", "bonifs", "artt", "artt2", "rh", "à
reporter", "ref", "gestion"))
End Sub 'PrepareProd
'et les sous-programmes "utiles" :
Sub PrepareForDev(ByRef pDocPwd As String, pSheetPwd As String,
pActiveSheet As String, pHiddenSheets())
'prepare the spreadsheet for development: unprotect sheets, etc.
Dim oDoc As Object
Dim oCtrl As Object
Dim oSheet As Object
Dim i As Long
oDoc = ThisComponent
'document setup
oCtrl = oDoc.CurrentController
oCtrl.HasColumnRowHeaders = True
ShowInputLine(True)
'show sheets
For i = 0 To UBound(pHiddenSheets)
ShowSheet(pHiddenSheets(i), True)
Next
'unprotect sheets
For i = 0 To oDoc.Sheets.Count - 1
oSheet = oDoc.Sheets(i)
ProtectSheet(oSheet.Name, pSheetPwd, False)
Next
'set active sheet
SetActiveSheet(pActiveSheet)
'unprotect document
If IsMissing(pDocPwd) Then pDocPwd = ""
oDoc.unprotect(pDocPwd)
End Sub 'PrepareForDev
Sub PrepareForProd(ByRef pDocPwd As String, pSheetPwd As String,
pActiveSheet As String, ByRef pHiddenSheets())
'prepare the spreadsheet for production: protect sheets, etc.
Dim oDoc As Object
Dim oCtrl As Object
Dim oSheet As Object
Dim l_Zoom As String
Dim i As Long
oDoc = ThisComponent
'document setup
oCtrl = oDoc.CurrentController
oCtrl.HasColumnRowHeaders = False 'hide column and row headers
l_Zoom = GetNamedCellString(SHEET_GESTION, CELL_ZOOM)
If (l_Zoom <> "") Then
SetZoomValue(CInt(l_Zoom))
End If
ShowInputLine(False) 'hide input line
'hide sheets
For i = 0 To UBound(pHiddenSheets)
ShowSheet(pHiddenSheets(i), False)
Next
'protect sheets using the same pwd
For i = 0 To oDoc.Sheets.Count - 1
oSheet = oDoc.Sheets(i)
ProtectSheet(oSheet.Name, pSheetPwd, True)
Next
'set active sheet
SetActiveSheet(pActiveSheet)
'protect document
oDoc.protect(pDocPwd)
End Sub 'PrepareForProd
--------------------------------------------- >8
La seule chose à faire manuellement pour passer du mode "production"
au mode "développement" est l'affichage de la feuille "Gestion" pour
rendre les boutons accessibles. Il y aurait possibilité de lui
associer un raccourci clavier mais pour l'instant je fonctionne comme ça.
En espérant que ça aidera.
Amitiés,
--
Envoyez un mail à users+unsubscr...@fr.libreoffice.org pour savoir comment vous
désinscrire
Les archives de la liste sont disponibles à
http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne
pourront pas être supprimés