XL 2019 Macro protection ligne tableau

PIERRO1234

XLDnaute Nouveau
Bonjour,
Ci-joint un fichier "personnel"
Est il possible d'avoir une macro du style:
Si la cellule de la colonne [STATUT] est "V" alors, la ligne n'est pas modifiable.
Merci
 

Pièces jointes

  • Personnel.xlsx
    9.6 KB · Affichages: 9
Solution
Bonjour le fil, bonjour le forum,

Une autre proposition. J'ai commencé par déverrouiller toutes les cellules du tableau structuré Tableau1. Ensuite le code :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TS As ListObject 'déclare la variable TS (Tableau Structuré)
Dim LR As Integer 'déclare la variable LR (Ligne de Référence)

If Target.Count > 1 Then Exit Sub 'si plusieurs cellules sélectionnées, sort de la procédure
If Target.ListObject Is Nothing Then Exit Sub 'si la cellule modifiée n'est pas dans un tableau structuré, sort de la procédure
Set TS = Target.ListObject 'définit le tableau structuré TS
Me.Unprotect "1234" 'déprotège l'onglet avec mot de passe = "1234"
'Si le changement a lieu ailleurs que...

Pounet95

XLDnaute Occasionnel
Re, et Bonjour Robert ( tu viens d'apparaître au moment où j'écrivais. Ce n'est pas la 1ère fois et ça m'énerve un chouïa )

Dans son code, Robert avait oublié de reprotéger la feuille avant de quitter la procédure évènementielle. J'ai légèrement modifié et ça fonctionne. Il faut que la feuille soit protégée pour que la ligne du tableau le soit ! Donc mot de passe même "blanc" !!!!
Donc, dans ton classeur tu remplaces le code par celui joint
Pourquoi avoir mis Résolu ????
Claude alias Pounet95
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim TS  As ListObject    'déclare la variable TS (Tableau Structuré)
    Dim LR  As Integer       'déclare la variable LR (Ligne de Référence)

    If Target.Count > 1 Then Exit Sub 'si plusieurs cellules sélectionnées, sort de la procédure
    If Target.ListObject Is Nothing Then Exit Sub 'si la cellule modifiée n'est pas dans un tableau structuré, sort de la procédure
    Set TS = Target.ListObject 'définit le tableau structuré TS

    Me.Unprotect "1234" 'déprotège l'onglet avec mot de passe = "1234"
    'Si le changement a lieu ailleurs que dans la colonne "STATUT". sort de la procédure
    If Application.Intersect(Target, TS.ListColumns("STATUT").Range) Is Nothing Then
        Me.Protect "1234"
        Exit Sub
    End If
    Application.EnableEvents = False 'empêche les événementielles (pour éviter de boucler)
    Target.Value = UCase(Target.Value) 'remplace v par V le cas échéant (relance l'événementielle)
    Application.EnableEvents = True 'autorise les événementielles
    
    LR = Target.Row - TS.HeaderRowRange.Row     'définit la ligne de référence LR
    TS.ListRows(LR).Range.Locked = IIf(Target.Value = "V", True, False) 'vérouille la ligne de référence LR si "V"
    
    Me.Protect "1234" 'protège l'onglet avec mot de passe "1234"
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 189
Messages
2 086 033
Membres
103 102
dernier inscrit
nath34490