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
Bonjour,
Comme ceci ?
Claude alias Pounet95

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim oList       As ListObject
    
    Set oList = Target.ListObject
    If Not oList Is Nothing And Target.Count = 1 Then
        '------------------------------------------------------------------------
        ' Attention le numéro de ligne de la cible n'est pas celui du tableau !
        '------------------------------------------------------------------------
        lig = Target.Row - 4
         If oList.Range(lig, 5) = "V" Then
            MsgBox "Pas touche !!!", vbExclamation
         End If
    End If
    Set oList = Nothing
End Sub
 

PIERRO1234

XLDnaute Nouveau
Bonjour et merci,
J'ai remplacé
MsgBox "Pas touche !!!", vbExclamation
par
Target.Offset(, -1).Select

Car on peut modifier les cellules avec MsgBox "Pas touche !!!", vbExclamation

Pour approfondir, est il possible qu'il demande un code "1234" par exemple pour modifier la ligne?
Vous comprenez mon idée?
Merci
 

Pounet95

XLDnaute Occasionnel
Re,
Je ne comprends pas ! Quand on écrit des macros en VBA, il me semble basique de connaître la structure d'un classeur ?
"je ne sais pas comment faire svppppp???? " Quoi ? Aller dans l'éditeur VBA ? Mettre le mot en surbrillance en le sélectionnant ? Tapez sur la touche F1 ?
 

Robert

XLDnaute Barbatruc
Repose en paix
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 dans la colonne "STATUT". sort de la procédure
If Application.Intersect(Target, TS.ListColumns("STATUT").Range) Is Nothing Then Exit Sub
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

Le fichier :
 

Pièces jointes

  • Pierro_ED_v01.xlsm
    17.3 KB · Affichages: 4

PIERRO1234

XLDnaute Nouveau
Bonjour,
Comme ceci ?
Claude alias Pounet95

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim oList       As ListObject
   
    Set oList = Target.ListObject
    If Not oList Is Nothing And Target.Count = 1 Then
        '------------------------------------------------------------------------
        ' Attention le numéro de ligne de la cible n'est pas celui du tableau !
        '------------------------------------------------------------------------
        lig = Target.Row - 4
         If oList.Range(lig, 5) = "V" Then
            MsgBox "Pas touche !!!", vbExclamation
         End If
    End If
    Set oList = Nothing
End Sub
Bonjour Pounet,
Comment obtenir le meme resultat par rapport au tableau et non à la position du tableau dont les titres doivent etre en cinquième ligne. ( lig = Target.Row - 4)????
je ne sais pas si j'ai bien posé le problème!!
Merci
 

PIERRO1234

XLDnaute Nouveau
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim oList As ListObject Set oList = Target.ListObject If Not oList Is Nothing And Target.Count = 1 Then '------------------------------------------------------------------------ ' Attention le numéro de ligne de la cible n'est pas celui du tableau ! '------------------------------------------------------------------------ lig = Target.Row - 4 If oList.Range(lig, 5) = "V" Then MsgBox "Pas touche !!!", vbExclamation End If End If Set oList = Nothing End Sub
Rebonjour Pounet,
Si je peux avoir s'il te plait ta macro en prenant en compte le tableau structuré (pas besoin de protéger avec le mot de passe )
Merci (désolé mais je en sonnais pas VBA)!!!!
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Je ne comprends pas Pierro ! Il marque le sujet comme résolu puis revient dessus. C'est à se la prendre, se la couper et se la poser derrière l'oreille pour la fumer plus tard... (San Antonio...)
 

Discussions similaires