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


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+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.