Proger feuille excel et autoriser filtres

Résolu
Bonjour,

je viens de faire une base de données et lors de la protection des feuilles , le filtre automatique n'est plus accessible.
Si quelqu'un peu m'aider !

Sub ProtegeTout()

For Each Feuil In Application.Sheets

Feuil.Protect "lilop16", True, True, True
Feuil.EnableAutoFilter = True

Next Feuil
End Sub

marie

5 réponses

  1. J'ai en parti résolu mon souci mais il me reste encore a pouvoir utiliser le filtre croissant et décroissant qui lui ne fonctionne pas

    J'ai mis le code dans ThisWorkbook

    Feuil1 étant la feuille où le filtre est appliqué.

    Private Sub Workbook_Open()
    Feuil1.EnableAutoFilter = True
    Feuil1.Protect Contents:=True, UserInterfaceOnly:=True
    End Sub

    Que dois je ajouter ?
    Si quelqu'un peu m'aider !
    0
    1. Contributeur
      Bonsoir,

      Malheureusement ce n'est pas possible (en Excel 2003, les versions au dela je n'ai pas testé). Lorsqu'une feuille est protégée, même si le filtre automatique est autorisé, seules les selections de valeurs individuelles fonctionnent. Car cela revient à masquer ou afficher des lignes.

      Par contre, le tri ne fonctionne pas car un tri est une modification des cellules et comme elles sont vérouillées ce n'est pas possible.

      La seule solution serait à mon avis de créer un bouton spécial ou plusieurs pour le tri croissant (ou décroissant) qui lance une macro. Cette macro déprotége, effectue le tri et reprotége.

      Dis nous vers quelle solution tu envisages d'aller.

      A+
      Cordialement,
      0
      1. Contributeur
        Re Bonsoir,

        Aprés réflexion, je propose la solution suivante :

        Dans ThisWorkbook garder le code (avec un mot de passe c'est mieux) :

        Private Sub Workbook_Open()
            Feuil1.EnableAutoFilter = True
            Feuil1.Protect Password:="lilop16", Contents:=True, UserInterfaceOnly:=True
        End Sub


        Dans un module (Module1 par exemple) mettre la déclaration :
        Public SensTri(1 To 50) As Integer


        Et dans le code de la Feuil1 mettre cette macro :

        Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
        If Target.Row = 1 Then
                ActiveSheet.Unprotect "lilop16"
                If SensTri(Target.Column) = 0 Then
                    SensTri(Target.Column) = 1
                Else
                    SensTri(Target.Column) = 3 - SensTri(Target.Column)
                End If
                Cells.Select
                Selection.Sort Key1:=Target, Order1:=SensTri(Target.Column), Header:=xlGuess, _
                    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                    DataOption1:=xlSortNormal
                Target.Select
                ActiveSheet.EnableAutoFilter = True
                ActiveSheet.Protect Password:="lilop16", Contents:=True, UserInterfaceOnly:=True
        End If
        Cancel = True
        End Sub


        Ainsi le Filtre automatique fonctionne comme avant mais en plus si l'on fait un clic droit sur une entête de colonne on tri de manière croissante et si on fait à nouveau un clic droit on tri de manière décroissante.

        Me dire si cela peut convenir
        0
        1. Je vérifie tout ça ce soir ... et vous tiens au courant. . bonne journée
          0
        2. Bonsoir,

          Non , ça ne fonctionne pas , j'ai les filtres par cagoteries, mais pas les filtres croissant .

          Voir message de ce matin : 8 sept. 2011 à 08:04

          Je suis arrivée à filtrer a l'ouverture du fichier ce qui me convient parfaitement , mais le soucis c'est qu'il me tri aussi les titres .

          Je vais continuer dans ce sens la, et essayer de trouver ou est le soucis.

          Si vous avez des idées ! je suis preneuse :)

          merci d'avance
          0
        3. J'ai résolu mon problème ...
          0
        4. Contributeur
          Bonsoir,

          Désolé, je n'ai pas pu venir sur le forum depuis hier. Content que le problème soir résolu.
          Bonne continuation
          0
      2. Contributeur
        J'ai redirigé vers le forum Bureautique car il y a plus de helpeurs compétants en Excel et VBA
        0
        1. merci pllas31 . j'ai un peu avancé . J'ai régler en partie mon soucis en faisant un tri a l'ouverture du fichier mais le problème c qu'il me tri la 1 des ligne de nom avec.
          Le tri doit se faire a partir de la ligne 3 et je ne sait pas ce qu'il faut que je change sur mes codes ci dessous:

          Private Sub Workbook_Open()

          Sheets("BD").Select

          Dim mdp As String

          Application.ScreenUpdating = False

          ActiveSheet.Unprotect "lilop16"
          On Error Resume Next

          Columns("A:BL").Sort Key1:=Range("B3"), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:= _
          False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
          Selection.AutoFilter Field:=1, Criteria1:="<>", Operator:=xlAnd

          Feuil1.EnableAutoFilter = True
          ActiveSheet.Protect "lilop16", UserInterfaceOnly:=True
          Application.ScreenUpdating = True
          Feuil1.Protect Contents:=True, UserInterfaceOnly:=True

          Sheets("Nouveau").Select
          Range("D5").Select

          End Sub

          Actuellement il fait bien le tri croissant de la colonne 3 mais place tout sur la ligne 2 ! alors il doit tout mettre a partir de la ligne3
          Ce doit être tout bête mais je ne trouve pas

          merci d'avance
          0