Modification d'une macro VBA

Bonjour,

Je souhaiterais pouvoir verrouiller les cellules dans les colonnes A, B, C et D si la cellule en colonne E située sur la même ligne est différente de vide. Et tout ça à partir de la ligne 7.

J'ai trouvé la macro suivante qui marche bien mais je n'arrive pas à la modifier pour qu'elle s'applique à une plage de cellule au lieu d'une seule.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Range("B4"), Target) Is Nothing Then

Select Case Range("B4").Value

Case Is <> ""

ActiveSheet.Unprotect

Cells.Locked = False

Range("C4").Locked = True

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

Case Else

ActiveSheet.Unprotect

Cells.Locked = True

End Select

End If

End Sub

En gros j'aimerais remplacer :

  • B4 par E7:E106
  • C4 par A7:A106, B7:B106, C7:C106 et D7:D106

Merci d'avance,

Vivien

bonjour,

une proposition

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("E7:E106"), Target) Is Nothing Then
        If Target <> "" Then
            ActiveSheet.Unprotect
            Cells.Locked = False
            Range("A7:D106").Locked = True
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        Else
            ActiveSheet.Unprotect
            Cells.Locked = True
        End If
    End If
End Sub

Merci h2so4,

c'est un bon début mais le problème c'est que ça verrouille toute ma plage de données.

Ce que j'aimerais c'est que si la cellule en E7 est différente de vide ça ne verrouille que la plage A7:D7 et non A7:D106.

Merci,

Vivien

re-bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("E7:E106"), Target) Is Nothing Then
        If Target <> "" Then
            ActiveSheet.Unprotect
            Cells.Locked = False
             r=target.row
            Range("A" & r & ":D" & r).Locked = True
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        Else
            ActiveSheet.Unprotect
            Cells.Locked = True
        End If
    End If
End Sub

Alors merci c'est mieux, quand je rentre quelque chose en E7 ça ne verrouille bien que la plage A7:D7.

Le problème c'est que quand je rentre quelque chose en E10 par exemple, la plage A10:D10 est bien verrouillée mais plus celle de A7:D7!

re-bonjour,

essaie ceci

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("E7:E106"), Target) Is Nothing Then
        If Target <> "" Then
            ActiveSheet.Unprotect
            r = Target.Row
            Range("A" & r & ":D" & r).Locked = True
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        End If
    End If
End Sub

ça marche nickel!

Merci pour ta réactivité h2so4

Rechercher des sujets similaires à "modification macro vba"