Verrouiller colonne/ligne dans une table laissée modifiable

Bonjour! J'ai cherché et essayé plusieurs options dont une formule déjà proposée sur le forum pour le problème de quelqu'un d'autre:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Range("COLUMNS ET ROWS-CIBLÉES DANS MON TABLEAU"), Target) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Target.Offset(0, 1).Select
    End If
End Sub

Mais malheureusement elle ne fonctionne pas lorsque je l'entre dans mon document: comme je suis très nouvelle au VBA et que j'utilise habituellement des formules Excel, est-ce que quelqu'un pourrait m'aider et m'expliquer comment comprendre ce que contient ce code?

Dans ma feuille, je dois protéger/empêcher la modification de la ligne 1 (les titres des colonnes de ma table) et la colonne D (formule). Comme c'est dans une table de milliers de données, où des lignes sont ajoutées régulièrement, je ne peux verrouiller la feuille et les autres cellules doivent rester sélectionnables/modifiables.

Merci beaucoup!

Bonsoir,

Tu peux uniquement verrouiller les cellules où tu ne souhaites aucune modification et déverrouiller le reste du tableau. Et dans la protection de feuille, il te suffit de ne pas cocher " Sélectionner les cellules verrouillées"

Ou alors j'ai mal compris..

Bonne soirée,

Rebonjour,

Merci mais malheureusement, comme c'est écrit dans ma publication, c'est une table, qui doit rester modifiable et je ne peux donc pas "verrouiller la feuille" puisque ça bloque le dynamisme de la table (les nouvelles lignes ne s'ajoutent plus au tableau, même si je peux cliquer/sélectionner toutes les cellules. J'ai coché tout ce que je pouvais dans format de cellule pour déverrouiller et la table reste tout de même statique).

En effet, un tableau ne s'agrandit pas quand la feuille est verrouillée.

Pouvez-vous envoyer un fichier histoire de voir à quoi ressemble votre tableau, sans données délicates bien sûr.

Bonjour,

Une piste à étudier.
Cdlt.

2mariebleduc.xlsm (17.04 Ko)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lo As ListObject
    Set lo = Range("Data").ListObject
    If Not Intersect(Target, lo.HeaderRowRange) Is Nothing Then Target.Offset(-1).Select
    If Target.HasFormula Then Target.Offset(, -1).Select
End Sub

Bonjour Jean-Éric!

Merci pour cet essai, je me demandais toutefois comment remplacer "Data" par la colonne D et la ligne 1? "Colums (D):Rows (1)" ne semblait pas fonctionner. C'est certain qu'il y a quelque chose que je ne fais pas correctement! Merci!

Bonjour Thrrybo!

Voici un exemple : je cherche à ce que la colonne D et la ligne 1 (titres de colonnes) soient non-sélectionnables/modifiables

Merci beaucoup!

Bonjour,

Tu travailles avec un tableau (structuré). Un tableau structuré n'est pas une plage de cellules !
Ce que tu souhaites n'est pas évident à mettre en place, et il faut s'assurer qu'il n'y aura pas de bug à l'utilisation.

La procédure empêche la sélection d'une cellule d'en-tête du tableau (ou qu'il soit placé dans la feuille de calcul).
On ne peut pas sélectionner une cellule comportant une formule (on ne peut pas la modifier !).

Il faut aussi gérer les autres sélections possibles (colonnes ou lignes entières, multi sélection dans la plage de valeurs, etc...).

Teste et redis moi...

A te relire.
Cdlt.

Option Explicit

Dim flag As Boolean

Private Sub chkModification_Click()
    flag = Me.chkModification
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Déclaration des variables
Dim lo As ListObject
    '--------------------------------------------------------------------
    If flag = True Then Exit Sub
    '--------------------------------------------------------------------
    'initialisation variables
    Set lo = Range("Tableau1").ListObject
    '--------------------------------------------------------------------
    'ligne en-têtes tableau
    If Not Intersect(Target, lo.HeaderRowRange) Is Nothing Then
        Target.Cells(1).Offset(1).Select
    End If
    '--------------------------------------------------------------------
    'plage de valeurs du tableau
    If Not Intersect(Target, lo.DataBodyRange) Is Nothing Then
        If Target.Rows.Count >= 1 And Target.Columns.Count >= 1 Then
            Target.Cells(1).Select
        End If
    End If
    '--------------------------------------------------------------------
    'formules (protection !)
    If Not Intersect(Target, lo.DataBodyRange) Is Nothing Then
        If Target.HasFormula Then
            Target.Offset(, -1).Select
        End If
    End If
End Sub

Wowww!! Super ça, merci Jean-Eric!

Seul petit bug que je vois est qu'il est impossible de sélectionner la ligne (par exemple, si une personne se trompe et doit supprimer ou insérer une ligne). Mais sinon c'est A1! Ça me montre très bien comment le processus fonctionne, merci!

Rechercher des sujets similaires à "verrouiller colonne ligne table laissee modifiable"