Date: prev next · Thread: first prev next last
2016 Archives by date, by thread · List index


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

Context


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.