Protection feuille par une macro

Bonjour,

Je voudrais savoir si l'un d'entre vous connait une macro ou VBA afin de pouvoir verrouiller une feuille tout en conservant les menus déroulants et la fonction Grouper / Dégrouper (+ dans les marges haute et à gauche) de cette même feuille. Attention, je ne parle pas du classeur entier mais bien d'un seul onglet.

L'onglet est "Base périscolaire". Le code secret serait: pop

Je vous joins le tableau.

Cordialement

10base.xlsx (98.97 Ko)

Bonjour Julien,

En activant certaines options

Sub ProtetionBase()
  Sheets("BASE PERISCOLAIRE").Protect Password:="pop", DrawingObjects:=False, Contents:=True, _
    Scenarios:=False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
    AllowSorting:=True, AllowFiltering:=True
End Sub

A+

Bonjour,

Ce code VBA permet effectivement d'utiliser les menus déroulant quand la feuille est verrouillée. En revanche, la fonction "grouper / dégrouper" ne fonctionne pas. Dois-je faire une manipulation ou autre ?

Je vous remets le fichier avec le VBA et la feuille verrouillée. le code est toujours pop

cordialement

image
7base.xlsm (102.96 Ko)

Bonjour,

si c'est pour protéger tes formules, cette macro force la sélection de la 1ère cellule à droite sans formule.
Ne pas protéger la feuille

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim c As Range
    For Each c In Target
        If c.HasFormula Then
            Do
                Set c = c.Offset(, 1)
            Loop Until Not c.HasFormula
            c.Select
        End If
    Next c
End Sub
11base.xlsm (101.23 Ko)

eric

Eric,

Je te remercie pour ce VBA.

Dernière question, Il y a des lignes ou colonnes permettant de matérialisé les tableaux y a t-il une solution pour empêcher toute écriture. J'avais pensé pour tricher un menu déroulant mais de avec des lignes où il n'y rien 'écrit.

Merci

Au plaisir de te lire.

Bonjour,

une version qui se base sur les cellules protégées.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim c As Range
    For Each c In Target
        If c.Locked Then
            Do
                Set c = c.Offset(, 1)
            Loop Until Not c.Locked Or Intersect(c, c.Parent.UsedRange) Is Nothing
            Application.EnableEvents = False
            c.Select
            Application.EnableEvents = True
        End If
    Next c
End Sub

Le pb c'est que je sais pas si tu peux être amené à remplir manuellement les entêtes de lignes des tableaux et/ou si on peut arrêter le décalage sur une cellule vide.
J'ai donc fait le choix d'arrêter en fin de zone utilisée pour éviter l'erreur en dernière colonne de la feuille.
Il faudra ajouter un système si certaines saisies doivent être possibles dans ce cas (sur double-clic par exemple ?) ou que tu inhibes la macro le temps d'une mise à jour.
eric

Rechercher des sujets similaires à "protection feuille macro"