Merci Jean-François,

C'est très intéressant tout ça !

Cordialement,
Michel

> -----Message d'origine-----
> De : Jean-Francois Nifenecker [mailto:jean-
> [email protected]]
> Envoyé : lundi 7 mars 2016 07:27
> À : [email protected]
> Objet : [fr-users] Re: [fr-users] Re: Protection par macro d'une feuille
> Calc avec désélection des autorisations
> 
> 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


-- 
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 à