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 à [email protected] 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 à