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


Merci Jean-François,

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

Cordialement,
Michel

-----Message d'origine-----
De : Jean-Francois Nifenecker [mailto:jean-
francois.nifenecker@laposte.net]
Envoyé : lundi 7 mars 2016 07:27
À : users@fr.libreoffice.org
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 à 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


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