Monsieur Excel
Pour tout savoir faire sur Excel !

05 octobre 2010

Protection d’une feuille de calcul

Pour protéger des cellules dans une feuille de calcul Excel, il faut agir un peu à l’envers : il faut préalablement indiquer ce que l’on ne veut pas protéger, puis lancer la procédure de protection…

Nous devons d’abord sélectionner les cellules modifiables par l’utilisateur (ici, B2:E4), puis utiliser la commande « Format de cellule » du bloc « Cellules » de l’onglet « Accueil » (ou faire un clic droit), activer l’onglet « Protection », et désactiver l’option « Verrouillée », comme ci-dessous :

Il faut ensuite utiliser la commande « Protéger la feuille », onglet « Révision », pour protéger la feuille, en ayant bien soin de désactiver la toute première commande, « Sélectionner les cellules verrouillées », comme dans la copie de dialogue ci-dessous :

Excel vous demande de confirmer le mot de passe après la validation de cette fenêtre. Ensuite, la feuille est protégée et seules les cellules déverrouillées sont alors accessibles.

Remarque 1 – Je ne sais pas pourquoi le titre de mon premier dialogue est
« Liste pers. ». Cela n’a aucun rapport… Est-ce un bug dans Excel 2007 ?

Remarque 2 – Pour se déplacer d’une cellule non protégée à la suivante, il suffit d’utiliser la touche [Tab] ; vous pouvez aussi utiliser [Maj]-[Tab] pour aller à la précédente.

Remarque 3 – On peut regretter qu’il n’y ait pas de moyen simple et rapide pour sélectionner d’un coup toutes les cellules non verrouillées et voir ainsi où elles se trouvent. Pour cela, on est obligé d’en « faire le tour » via la touche [Tab]

2 Commentaire(s):

  • Pour la remarque 3, je suppose que vous parlez d'un moyen simple par un quelconque raccourci clavier ou menu ?

    Parce qu'avec une petite macro, rien de plus simple. Un exemple fait à l'arrache :

    'Définition des variables
    Dim Cellule As Range
    Dim ListeCellule As String

    'Initialisation des variables
    ListeCellule = ""

    'Boucle de contrôle
    For Each Cellule In Range("A1:H50")
    If Cellule.AllowEdit = True Then
    ListeCellule = ListeCellule & Cellule.Address & ","
    End If
    Next Cellule

    If Len(ListeCellule) > 0 Then
    ListeCellule = Left(ListeCellule, Len(ListeCellule) - 1)
    End If

    'Sélection des cellules non verrouillées
    Range(ListeCellule).Select

    Plus qu'à régler la plage sur laquelle on cherche les cellules. Bien entendu, ça aussi peut être automatisé. Ou mettre Cells en guise de plage, mais là, c'est un peu plus long :)


    Il y a aussi moyen de 'amuser avec la fonction Recherche d'Excel, mais c'est moins pratique à mon sens :
    Application.FindFormat.Locked = False
    MsgBox Cells.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=True).Address

    A partir de là, même logique, faut constituer une boucle "tant que" Suivant remonte une adresse...

    Molenn

    By Anonymous Anonyme, sur 2:49 PM  

  • Une macro encore plus petite pour suivre l'idée de Molenn de balayer les cellules (uniquement celles du UsedRange, histoire de minimiser la boucle...) :
    Sub Select_Saisies()
    Dim rngSaisies As Range
    Dim rngCellule As Range
    Set rngSaisies = ActiveCell
    For Each rngCellule In ActiveSheet.UsedRange.Cells
    If rngCellule.AllowEdit Then Set rngSaisies = Application.Union(rngSaisies, rngCellule)
    Next rngCellule
    rngSaisies.Select
    End Sub


    A noter l'utilisation de "Union" qui permet de travailler uniquement avec des objets "Range" sans passer par les adresses de cellules.

    By Anonymous cduigou, sur 10:07 PM  

Enregistrer un commentaire

<< Accueil