Bonsoir Michel,

Le 06/03/2016 18:08, Michel Rudelle a écrit :

Pour protéger une feuille Calc par macro, l’instruction suivante marche très
bien : oFeuille.protect("motDePasse")

Mais je ne trouve pas comment désélectionner les autorisations :

   - Sélectionner les cellules protégées

   - Sélectionner les cellules non protégées


Je ne sais pas ce que tu veux accomplir précisément. Alors voici qq idées, en vrac.


Ce bout de code qui parcourt une feuille ne pourrait-il pas te servir de base ? (trouvé ici : [1])


Sub LockCells(oRange As Object)
   Dim Doc As Object
   Dim oSheet As Object
   Dim oCell As Object
   Dim p As New com.sun.star.util.CellProtection
   Dim col As Long
   Dim row As Long

   Doc = ThisComponent
   oSheet = Doc.Sheets(oRange.RangeAddress.Sheet)
   oSheet.unprotect("Password")

   For col = 0 to oRange.Columns.Count - 1
      For row = 0 to oRange.Rows.Count - 1
         oCell = oRange.getCellByPosition(col,row)
         p = oCell.CellProtection
If oCell.getType() <> com.sun.star.table.CellContentType.EMPTY and not p.IsLocked Then
            p.Islocked = True
            oCell.CellProtection = p
         End If
      Next Row
   Next col

   oSheet.protect("Password")

End Sub

En le combinant avec :
1. La création d'un range sur les cellules (non)protégées trouvées
2. La sélection du range ensuite

Mieux (?) mais je n'ai jamais essayé dans ce type d'usage : utiliser queryContentCells(CellFlags)
avec CellFlags à : com.sun.star.sheet.CellFlags.HARDATTR (ou STYLES)
Plus d'infos dans OOME par Andrew Pitonyak [2]


Tu trouveras sans doute aussi dans la bible par saints Marcelly et Godard, édition 2011, des idées à combiner. Voir au chapitre 9 les rubriques :
-- Protéger une cellule (p.423)
-- Énumérer les cellules d'une zone (p.448)


[1] https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=34393
[2] http://www.pitonyak.org/OOME_3_0.pdf

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

Répondre à