Protection d'une feuille en VBA

Bonsoir tout le monde,

J'ai voulus verrouiller une feuille avec des segments de filtration. mais, je me suis rendu compte que je ne pouvais pas les utiliser avec une feuille verrouillée.

je peux la protéger en manuel, en cliquant sur "modifier les objets" et "utiliser le filtre automatique".

capture d ecran 2021 12 25 025036

Mais, je parviens pas à l'écrire en VBA, Les essais effectuées ne fonctionne pas, code ci-dessous.

Pouvez-vous m'aider s'il vous plait ?

Private Sub CommandButton1_Click()

    Dim dl As Integer

        With Sheets("BDMasques")

            .Unprotect Password:=*****

                If Me.Cbx_Nom <> "" And Me.Cbx_Types <> "" And Me.Txt_date <> "" And Me.Txt_quantité <> "" Then
                    Sheets("BDMasques").ListObjects(1).ListRows.Add
                        dl = Sheets("BDMasques").Range("b9999").End(xlUp).Row

                        Sheets("BDMasques").Range("B" & dl) = Me.Cbx_Nom
                        Sheets("BDMasques").Range("C" & dl) = Me.Cbx_Types
                        Sheets("BDMasques").Range("D" & dl) = CInt(Me.Txt_quantité)
                        Sheets("BDMasques").Range("E" & dl) = Me.Txt_date

                        ThisWorkbook.Save

                        Unload Ajouts_Masques

                End If

            .Protect Password:=*****, _
            AllowSorting:=True, _
            AllowFiltering:=True

        End With

End Sub

Bonjour,

A tester !

Option Explicit

Const PWD As String = "xxx"

Private Sub CommandButton1_Click()
Dim wb As Workbook, ws As Worksheet, lo As ListObject, r As Range

    Set ws = Worksheets("BDMasques")
    Set lo = ws.ListObjects(1)

    With lo
        If .InsertRowRange Is Nothing Then
            Set r = .HeaderRowRange.Cells(1).Offset(.ListRows.Count + 1)
        Else
            Set r = .InsertRowRange.Cells(1)
        End If
    End With

    If Me.Cbx_Nom <> "" And Me.Cbx_Types <> "" And Me.Txt_date <> "" And Me.Txt_quantité <> "" Then
        With ws
            .Unprotect Password:=PWD
            With r
                .Value = Me.Cbx_Nom
                .Offset(, 1).Value = Me.Cbx_Types
                .Offset(, 2).Value = CInt(Me.Txt_quantité)
                .Offset(, 3).Value = Me.Txt_date
            End With
            .EnableSelection = xlUnlockedCells
            .EnableAutoFilter = True
            .Protect Password:=PWD, _
                    DrawingObjects:=False, _
                    Contents:=True, _
                    Scenarios:=True, _
                    userinterfaceonly:=True, _
                    AllowSorting:=True, _
                    AllowFiltering:=True
        End With

        Unload Ajouts_Masques
        ThisWorkbook.Save

    End If

End Sub

Merci beaucoup !!!

Passer de bonne fête !!

Rechercher des sujets similaires à "protection feuille vba"