Résolu VB Macro

enzo_s

XLDnaute Junior
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.

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:

Discussions similaires


Haut Bas