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
