Bonjour,
J'ai une macro "CleanFormAccessSwitch" qui clear les cellules.
Ensuite, j'en ai une autre qui met du texte en filigrane "C11"
Quand exécute la macro "CleanFormAccessSwitch" au début ma feuilles est bien protégée et toutes les cellules bien vidées avec le texte en filigrane Le problème est dès que je complet une cellule, il déverrouille directement la feuille..
Je dois avoir un souci avec ou je place le 'ActiveSheet.Protect "123" dans le "Private Sub Worksheet_Change" .. j'ai testé plusieurs place sans succès.
J'ai une macro "CleanFormAccessSwitch" qui clear les cellules.
Ensuite, j'en ai une autre qui met du texte en filigrane "C11"
Quand exécute la macro "CleanFormAccessSwitch" au début ma feuilles est bien protégée et toutes les cellules bien vidées avec le texte en filigrane Le problème est dès que je complet une cellule, il déverrouille directement la feuille..
Je dois avoir un souci avec ou je place le 'ActiveSheet.Protect "123" dans le "Private Sub Worksheet_Change" .. j'ai testé plusieurs place sans succès.
Code:
Sub CleanFormAccessSwitch()
'
ActiveSheet.Unprotect "123"
On Error Resume Next
If vbYes = MsgBox("Are you sure want to clean the form ?", _
vbExclamation + vbYesNo, "Are you sure?") Then
Range("c11:c15").ClearContents
Range("c17:c24").ClearContents
End If
ActiveSheet.Protect "123"
End Sub
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "123"
Dim a, b, i
a = Array("C11", ) 'à adapter
b = Array("CHVSGRI") 'à adapter
For i = 0 To UBound(a)
'ActiveSheet.Unprotect "123"
b(i) = Replace(b(i), ",", Chr(130))
If Range(a(i)) = "" Then
Range(a(i)).Font.ColorIndex = 16
Range(a(i)).Font.Bold = False 'non gras
Range(a(i)) = b(i)
ElseIf Range(a(i)) <> b(i) Then
Range(a(i)).Font.ColorIndex = 1
Range(a(i)).Font.Bold = True 'gras, facultatif
End If
'ActiveSheet.Protect "123"
Next
'ActiveSheet.Protect "123"
If Application.Intersect(Target, Range("F12:F13")) Is Nothing Then Exit Sub
Select Case Target.Address
Case "$F$12"
Application.EnableEvents = False
Range("F13") = IIf(Target.Value = "Yes", "No", "Yes")
Case "$F$13"
Application.EnableEvents = False
Range("F12") = IIf(Target.Value = "Yes", "No", "Yes")
End Select
Application.EnableEvents = True
End Sub
Dernière édition: