Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Effacer cellule avec feuille protégé

3 réponses
Avatar
Arno
Salut =E0 tous,

Voile je suis entrain de faire une feuille excel. Suivant le contenu
des premi=E8res celulles de ma ligne, je vais vider certaines celulles,
y changer la couleut et les bloquer pour que l'on ne puisse pas les
modifier.

J'utilise la macro VBA suivante :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target.Column =3D 2 Or Target.Column =3D 3 Or Target.Column =3D 4 Th=
en
If (Cells(Target.Row, 1).Value <> "TOTAL") And Target.Row >=3D 2
Then
If (Cells(Target.Row, 2).Value <> "DIF") And
(Cells(Target.Row, 3).Value =3D "E") Then
With Range("G" & Target.Row & ":G" & Target.Row)
.Locked =3D False
.Interior.ColorIndex =3D 15
.ClearContents
.Locked =3D True
End With
End If
End If
End If
ActiveSheet.Protect
ActiveSheet.EnableSelection =3D xlUnlockedCells
End Sub

Si j'enl=E8ve tout syst=E8me de protection, ma macro fonctionne
parfaitement. Par contre si je prot=E8ge ma feuille, il me bloque
toujours juste apr=E8s le ClearContents. Si j'enl=E8ve le ClearContents
tout fonctionne hormis que le contenu de ma cellule est toujours l=E0.

Si quelqu'un peut m'aider.

Merci d'avance.

3 réponses

Avatar
LSteph
Bonjour Arno,

Si tu vides tu changes donc puisque c'est un Worksheet_change
désactiver les évennements et les réactiver ensuite
...

Application.enableeventsúlse
'
.clearcontents
'
Application.enableevents=true

...

lSteph

"Arno" a écrit dans le message de news:

Salut à tous,

Voile je suis entrain de faire une feuille excel. Suivant le contenu
des premières celulles de ma ligne, je vais vider certaines celulles,
y changer la couleut et les bloquer pour que l'on ne puisse pas les
modifier.

J'utilise la macro VBA suivante :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target.Column = 2 Or Target.Column = 3 Or Target.Column = 4 Then
If (Cells(Target.Row, 1).Value <> "TOTAL") And Target.Row >= 2
Then
If (Cells(Target.Row, 2).Value <> "DIF") And
(Cells(Target.Row, 3).Value = "E") Then
With Range("G" & Target.Row & ":G" & Target.Row)
.Locked = False
.Interior.ColorIndex = 15
.ClearContents
.Locked = True
End With
End If
End If
End If
ActiveSheet.Protect
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Si j'enlève tout système de protection, ma macro fonctionne
parfaitement. Par contre si je protège ma feuille, il me bloque
toujours juste après le ClearContents. Si j'enlève le ClearContents
tout fonctionne hormis que le contenu de ma cellule est toujours là.

Si quelqu'un peut m'aider.

Merci d'avance.
Avatar
LSteph
Bonjour,
...
même si le conseil reste valable cela ne vient pas exclusivement
de là puisque la cellule modifiée G n'est pas dans la cible .
En revanche, le unprotect et protect restent actifs indépendament
de la cible puisque tu as placé l'instruction avant, une solution serait
ActiveSheet.Protect userinterfaceonly:=True
de ne protèger que l'interface utilisateur mais pas des macros :

'**
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Or Target.Column = 3 Or Target.Column = 4 Then
If (Cells(Target.Row, 1).Value <> "TOTAL") And Target.Row >= 2 Then
If (Cells(Target.Row, 2).Value <> "DIF") And _
(Cells(Target.Row, 3).Value = "E") Then
ActiveSheet.Protect userinterfaceonly:=True
Application.EnableEvents = False
With Range("G" & Target.Row & ":G" & Target.Row)
.Locked = False
.Interior.ColorIndex = 15
.ClearContents
.Select
.Locked = True
End With
Application.EnableEvents = True
End If
End If
End If

ActiveSheet.EnableSelection = xlUnlockedCells
End Sub



"Arno" a écrit dans le message de news:

Salut à tous,

Voile je suis entrain de faire une feuille excel. Suivant le contenu
des premières celulles de ma ligne, je vais vider certaines celulles,
y changer la couleut et les bloquer pour que l'on ne puisse pas les
modifier.

J'utilise la macro VBA suivante :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect
If Target.Column = 2 Or Target.Column = 3 Or Target.Column = 4 Then
If (Cells(Target.Row, 1).Value <> "TOTAL") And Target.Row >= 2
Then
If (Cells(Target.Row, 2).Value <> "DIF") And
(Cells(Target.Row, 3).Value = "E") Then
With Range("G" & Target.Row & ":G" & Target.Row)
.Locked = False
.Interior.ColorIndex = 15
.ClearContents
.Locked = True
End With
End If
End If
End If
ActiveSheet.Protect
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Si j'enlève tout système de protection, ma macro fonctionne
parfaitement. Par contre si je protège ma feuille, il me bloque
toujours juste après le ClearContents. Si j'enlève le ClearContents
tout fonctionne hormis que le contenu de ma cellule est toujours là.

Si quelqu'un peut m'aider.

Merci d'avance.
Avatar
Arno
Merci à vous deux, je vais aller tester cella de ce pas ;)