Bonjour Michel,
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,