Protection feuille Excel - Cas particuliers

Résolu
Bonjour,

Je suis stagiaire en Entreprise et je viens de créer une base de donnée Excel pour créer un centre de ressources documentaires en ligne.
Comme cette base de données sera en ligne, j'aurais voulu la protéger mais le probléme est que je ne veux pas tout protéger.
J'ai regardé sur des forums, mais il n'y a pas de réponses qui me correspondent vraiment.

Je m'explique. J'ai une premiére feuille d'accueil dans laquelle j'aurais juste voulu conserver l'acces aux liens pour les clients (Un lien contact et un autre vers un Guide)

Ensuite j'ai une deuxiéme feuille et c'est celle la qui me pose le plus de problémes. Dans cette feuille, j'ai un moteur de recherche par mots clés (qui en fait séléctionne des mots clés dans les titres). Ceci selectionne des colonnes (Description du document, Sujet du document...). Les clients peuvent également choisir de chercher un document en utilisant des filtres Par exemple, le client peut choisir de sélectionner les filtres ou alors de rentrer un mot clés mais la Table Excel est la meme. Les titres sont des Hyperlinks vers des PDFS.
Ainsi, j'aurais voulu protéger aussi cette deuxiéme feuille mais laisser aux clients la possibilité d'utiliser le moteur de recherche et les filtres et d'ouvrir les hyperlinks.

Merci par avance,

Charlotte

10 réponses

  1. Bonjour,

    Quand on protège une feuille, toutes les cellules sont verrouillées par défaut, pour laisser la possibilité de modifier certaines cellules, il faut donc déverrouiller ces cellules en les sélectionnant, clique droit>Format de cellule>Onglet Protection et décocher Verrouillée.

    Ensuite, dans le menu Outils>Protection>Protéger la feuille, il a plein d'options, comme le choix de laisser l'utilisation des filtres, ou des hyperliens.

    Je ne sais pas si c'est ce que tu cherches précisément, mais à ta place je fouillerai de ce côté.
    0
    1. Merci de cette si rapide réponse,
      En effet c'est ce que je souhaite pour une partie. Mais mon probléme est que une fois cela réalisé, mon bouton Textbox que j'ai créér (contenant une macro) est impossible á utiliser et me demande de le débuger...
      Et cela méme si je vais dans les propriétés du bouttons et que je le dévérouille....
      0
      1. Alors peut-être dans la macro de ton bouton, au début déprotéger la feuille, et remettre la protection à la fin ?

        Sub Pouetpouet ()
        
        ActiveWorkbook.Unprotect
        'Ta Macro
        ActiveWorkbook.Protect
        
        End Sub
        0
        1. Merci!! Je suis sure que cela dois marcher mais ne susi pas tres douée en Macros. Ma nouvelle Macro est celle ci, mais cela ne marche pas....

          Sub Pouetpouet()

          ActiveWorkbook.Unprotect
          Private Sub BtnConvtxt_Click()
          For Each c In Selection
          If IsNumeric(c) Then c.Value = "'" & c.Value
          Next c
          End Sub

          Private Sub BtnSuppFiltres_Click()
          Tbx1.Text = ""
          Selection.AutoFilter Field:=1
          Tbx2.Text = ""
          Selection.AutoFilter Field:=2
          Tbx3.Text = ""
          Selection.AutoFilter Field:=3
          Tbx4.Text = ""
          Selection.AutoFilter Field:=4
          End Sub

          Private Sub Label1_Click()

          End Sub

          Private Sub Tbx1_Change()
          Selection.AutoFilter Field:=1, Criteria1:="=*" & Tbx1.Text & "*", Operator:=xlAnd
          End Sub

          Private Sub Tbx1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
          Tbx1.Text = ""
          Selection.AutoFilter Field:=1
          End Sub

          Private Sub Tbx2_Change()
          Selection.AutoFilter Field:=2, Criteria1:="=*" & Tbx2.Text & "*", Operator:=xlAnd
          End Sub

          Private Sub Tbx2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
          Tbx2.Text = ""
          Selection.AutoFilter Field:=2
          End Sub

          Private Sub Tbx3_Change()
          Selection.AutoFilter Field:=3, Criteria1:="=*" & Tbx3.Text & "*", Operator:=xlAnd
          End Sub

          Private Sub Tbx3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
          Tbx3.Text = ""
          Selection.AutoFilter Field:=3
          End Sub

          Private Sub Tbx4_Change()
          Selection.AutoFilter Field:=4, Criteria1:="=*" & Tbx4.Text & "*", Operator:=xlAnd
          End Sub
          Private Sub Tbx4_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
          Tbx4.Text = ""
          Selection.AutoFilter Field:=4
          End Sub
          ActiveWorkbook.Protect

          End Sub
          0
          1. Peut etre qu'il faut remettre cette formule á plusieurs endroits ?
            J'essaye différentes solutions mais me demande toujours de Débuguer...
            0
            1. Modérateur
              Salut,
              En fait, la sub pouetpouet de Morghotal était juste un exemple.
              Tu dois, pour chaque macro qui utilise des feuilles protégées utiliser :
              ActiveWorkbook.Unprotect 'en début de code après Sub ... ou Private Sub...
              ActiveWorkbook.Protect 'en fin de code avant End Sub
              comme te le montrais Morgothal (que je crois bien souvent aujourd'hui ;-) dans son exemple.
              Pour ton cas, par exemple :

              Private Sub BtnConvtxt_Click() 
              ActiveWorkbook.Unprotect 
              For Each c In Selection 
              If IsNumeric(c) Then c.Value = "'" & c.Value 
              Next c 
              ActiveWorkbook.Protect 
              End Sub 

              Private Sub BtnSuppFiltres_Click() 
              ActiveWorkbook.Unprotect 
              Tbx1.Text = "" 
              Selection.AutoFilter Field:=1 
              Tbx2.Text = "" 
              Selection.AutoFilter Field:=2 
              Tbx3.Text = "" 
              Selection.AutoFilter Field:=3 
              Tbx4.Text = "" 
              Selection.AutoFilter Field:=4 
              ActiveWorkbook.Protect
              End Sub 

              etc...
              0
          2. Mais il me demande encore de Débuguer en appliquant ceci pour chaque macros....
            0
            1. Quel est le type/le message de l'erreur ? Peut être qu'on ne cherche pas du bon côté ...
              Et lorsque tu cliques sur Débuguer, quelle est la ligne surlignée en jaune?
              0
            2. Run time error 1004, Je ne peux pas utiliser cette commande sur une feuille protegée. Proposition "fin", "Debuguer", "help"
              0
            3. Il s'aggit de la ligne commencant par Selection.Autofilter ci dessous.

              Private Sub Tbx1_Change()
              ActiveWorkbook.Unprotect
              Selection.AutoFilter Field:=1, Criteria1:="=*" & Tbx1.Text & "*", Operator:=xlAnd
              ActiveWorkbook.Protect
              End Sub
              0
          3. Et en essayant juste de déprotéger la feuille sans passer par ta macro?

            En reprenant mon exemple plus haut,

            Sub Pouetpouet () 
            ActiveWorkbook.Unprotect 
            End Sub


            Juste ces 3 lignes,
            Si ça ne passe pas, il faudrait essayer de déprotéger une seule des deux feuilles, celle concernée par la macro, en faisant :
            'au début de la macro : 
            Sheets("TaFeuille").Select 
            ActiveSheet.Unprotect 
            
            'à la fin : 
            ActiveSheet.Protect
            0
            1. en supprimant la ligne qui ne fonctionne pas dans la macro, je peux écrire dans le boutton mis évidemment il ne marche plus.
              0
            2. SA FONCTIONNNNNNEEEEE!!!!!!!!!!!!!!!!!!!!
              MERCCCCCCIIIIIIIIIIII!!!!!
              La premiere solution était finalement la bonne. J'ai recopié les macros depuis le début et maintenant cela marche!!!!! Vraiment merci pour tous ces conseils !!!!!!!!!!
              0
            3. Ah bien !
              N'oublie pas de mettre en résolu alors :)

              Merci à Pijaku !
              0
          4. Ah je crois avoir trouvé la solution :
            Il faut en fait activer les filtres automatiques à l'ouverture de ton classeur, donc dans une Private Sub Workbook_Open (du code qui s'éxecutera à l'ouverture du classeur).
            Il faudrait donc placer tout ton code (sans les ActiveWorkbook.Protect/Unprotect) dans un module (clique droit dans la liste de feuilles en haut a gauche de l'éditeur VBA, Insertion>Module), et dans la feuille Workbook, choisir à la place de "(Général)" --> Workbook

            Il devrait écrire tout seul :

            Private Sub Workbook_Open()
            End Sub


            et tu écrirais dans cette sub :

            ActiveSheet.EnableAutoFilter = True
            ActiveSheet.Protect contents:=True, userInterfaceOnly:=True


            Tu actives donc les filtres automatiques et tu protèges ton classeur.

            J'attend ton retour pour savoir si cela fonctionne :)
            0
            1. A Non en fait cela ne marche plus, avec la premiere solution je peux écrire dans la boite de texte et cela me séelctionne bien mes colonnes mais apres je n¦ai plus l¦acces aux filtres.
              Je ne comprends pas bien la deuxieme solution.. Ou trouve t-on la Private Sub Workbook-Open. Il n'y a rien aui s'ouvre pour moi quand j'ouvre mon classeur. J'ai ouvert un module mis la formule sans les codes mais je n'ai pas le choix Workbook, uniquement General en haut á gauche.... Désolé ce sont mes premieres confrontations avec les macros...
              0
          5. Essaye d'écrire ceci dans ta page Workbook et le reste de ta macro sur le module créé précedemment :

            Private Sub Workbook_Open()
            ActiveSheet.EnableAutoFilter = True
            ActiveSheet.Protect contents:=True, userInterfaceOnly:=True
            End Sub

            Ferme et re-ouvre ton classeur pour bien que le procédure évenementielle soit reconnue.
            0
            1. Le probleme est que je ne comprends bien ce qu'est le Workbook... Je ne vois pas trop ce que c'est. On ne peut pas rajouter une ligne á la macro pour qu'elle fonctionne. Juste pour que cela me réactive mes filtres aprés.
              0
          6. Je crois bien avoir trouvé, après tout mes tests, cela fonctionne !
            Pour information :
            Le Workbook, c'est ton classeur Excel, et le code contenu dans la procédure évenementielle Workbook_Open s'exécutera à l'ouverture de ce classeur.

            Lorsque tu protèges ton classeur, ta feuille, il faut bien cocher l'option "Utiliser le filtre automatique".
            Et au début de tes macros, tu met bien
            ActiveSheet.Unprotect

            Pour que la macro puisse s'exécuter, et à la fin de la macro tu insères :
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
            ce qui protège ta feuille en autorisant le filtre automatique pour les utilisateurs

            J'espère que cette solution est la bonne :)
            0
            1. Apres de nombreux essais. C'est bon tout fonctionne a merveille!!!!!!!!
              J'ai compris ce qu'il fallait faire. J'ai mis la macro initiale sans les codes dans ma feuille initiale "Publications". J'ai mis ma macro avec les ActiveSheet.Protect dans un Module et dans le Workbook la formule
              Private Sub Workbook_Open()
              ActiveSheet.EnableAutoFilter = True
              ActiveSheet.Protect contents:=True, userInterfaceOnly:=True
              End Sub

              Maintenant tout fonctionne. On peut cosnulter ma base de données mais seulement utiliser les filtres liens et recherche de mots.

              Ouf !!" Heureusement que les efforts payent!!!

              J'ai résolue la question sur le forum.

              Merci vraiment d'avoir pris tout ce temps pour me répondre!!!!!!!!
              0
            2. Pas de soucis !
              0