IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Philippe Tulliez

Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule

Noter ce billet
par , 13/08/2021 à 18h54 (7839 Affichages)
Préambule
Si les avantages d'utiliser les tableaux structurés ne sont plus à démontrer, il n'en reste pas moins qu'il y a à mon avis un inconvénient majeur c'est l'impossibilité qu'il y a de protéger les cellules contenant des formules sans perdre la création dynamique des lignes du tableau et la propagation des formules et autres fonctionnalités telles que Validation de données et Mise en forme conditionnelle
Il est dommage que les développeurs de Microsoft n'aient pas prévu un bouton d'option à cocher permettant de Verrouiller / déverrouiller l'accès aux cellules contenant des formules

Ayant dû à maintes reprises intervenir pour des clients ayant écrasé par mégarde une formule ou même la valeur d'une cellule des titres entrainant ainsi des erreurs lors des recherches sur ces tableaux, j'ai implanté il y a quelques années une procédure empêchant cette erreur de manipulation.

En mars 2019, j'avais déjà publié une contribution à ce sujet et titré Empêcher la sélection d'une cellule contenant une formule dans un ListObject mais je l'ai allégée en simulant simplement la touche Tab et en incluant la ligne des titres dans les cellules à verrouiller.

J'aurais donc pu titrer ce billet Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule OU une cellule de la ligne des titres

A signaler : Même si je le trouve mineur, il y a un inconvénient qui doit être mentionné.
Si une formule se trouve en dernière colonne et que nous sommes à la dernière ligne, le fait de simuler la touche Tab va activer la création d'une nouvelle ligne.

Code de la procédure
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Function BypassLockedCell(oTable As ListObject, Optional IsInTest As Boolean = True)
  ' Empèche la sélection des cellules contenant une formule ou un titre
  '   Emulation de la touche Tab pour les cellules contenant les formules et sélection de la première cellule des données (DataBodyRange)
  '   si la sélection se fait sur la ligne des titres
  '
  ' Author  : Philippe Tulliez (www.magicoffice.be)
  ' Version : 1.1
  ' Arguments
  '   oTable      (LisObject) Table à traiter
  '   [IsInTest]  (Boolean)   (d:True) si Vrai la procédure n'agit pas
  If Not IsInTest Then
    With oTable
      If Not Application.Intersect(Selection, .HeaderRowRange) Is Nothing Then
        .DataBodyRange.Cells(1, 1).Select
       Else
         If Selection.HasFormula Then Application.SendKeys "{TAB}"
      End If
    End With
  End If
End Function

Code de la procédure événementielle qui l'invoque
Afin que cette fonctionnalité soit accessible sur l'ensemble des tableaux du classeur, j'utilise la procédure événementielle Workbook_SheetSelectionChange présente dans le module ThisWorkbook

Le deuxième argument IsInTest sert à la maintenance du classeur.
Je l'ai alimenté ici par une constante de type booléen nommée InTest et déclarée en tête de module mais en production, j'utilise un propriété du classeur (membre de la collection CustomProperties).
Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Option Explicit
Const InTest As Boolean = False
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  Dim oList As ListObject
  Set oList = Target.ListObject
  If Not oList Is Nothing Then
     BypassLockedCell oList, IsInTest:=InTest
  End If
  Set oList = Nothing
End Sub

Envoyer le billet « Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule » dans le blog Viadeo Envoyer le billet « Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule » dans le blog Twitter Envoyer le billet « Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule » dans le blog Google Envoyer le billet « Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule » dans le blog Facebook Envoyer le billet « Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule » dans le blog Digg Envoyer le billet « Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule » dans le blog Delicious Envoyer le billet « Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule » dans le blog MySpace Envoyer le billet « Excel - VBA - Empêcher la sélection d'une cellule d'un tableau structuré qui contient une formule » dans le blog Yahoo

Mis à jour 16/05/2022 à 07h19 par Philippe Tulliez

Catégories
VBA Excel

Commentaires