-----Message d'origine-----
De : Jean-Francois Nifenecker [mailto:jean-
francois.nifenecker@laposte.net]
Envoyé : lundi 7 mars 2016 07:27
À : users@fr.libreoffice.org
Objet : [fr-users] Re: [fr-users] Re: Protection par macro d'une feuille
Calc avec désélection des autorisations
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,
--
Jean-Francois Nifenecker, Bordeaux
--
Envoyez un mail à users+unsubscribe@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
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.