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

Répondre à