Protection feuille Excel - Cas particuliers

Résolu
Charlotte.L-SBP Messages postés 12 Statut Membre -  
Morgothal Messages postés 1350 Statut Membre -
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. Morgothal Messages postés 1350 Statut Membre 184
     
    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
  2. Charlotte.L-SBP Messages postés 12 Statut Membre
     
    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
  3. Morgothal Messages postés 1350 Statut Membre 184
     
    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
  4. Charlotte.L-SBP Messages postés 12 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Charlotte.L-SBP Messages postés 12 Statut Membre
     
    Peut etre qu'il faut remettre cette formule á plusieurs endroits ?
    J'essaye différentes solutions mais me demande toujours de Débuguer...
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  7. Charlotte.L-SBP Messages postés 12 Statut Membre
     
    Mais il me demande encore de Débuguer en appliquant ceci pour chaque macros....
    0
    1. Morgothal Messages postés 1350 Statut Membre 184
       
      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. Charlotte.L-SBP Messages postés 12 Statut Membre
       
      Run time error 1004, Je ne peux pas utiliser cette commande sur une feuille protegée. Proposition "fin", "Debuguer", "help"
      0
    3. Charlotte.L-SBP Messages postés 12 Statut Membre
       
      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
  8. Morgothal Messages postés 1350 Statut Membre 184
     
    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. Charlotte.L-SBP Messages postés 12 Statut Membre
       
      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. Charlotte.L-SBP Messages postés 12 Statut Membre
       
      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. Morgothal Messages postés 1350 Statut Membre 184
       
      Ah bien !
      N'oublie pas de mettre en résolu alors :)

      Merci à Pijaku !
      0
  9. Morgothal Messages postés 1350 Statut Membre 184
     
    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. Charlotte.L-SBP Messages postés 12 Statut Membre
       
      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
  10. Morgothal Messages postés 1350 Statut Membre 184
     
    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. Charlotte.L-SBP Messages postés 12 Statut Membre
       
      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
  11. Morgothal Messages postés 1350 Statut Membre 184
     
    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. Charlotte.L-SBP Messages postés 12 Statut Membre
       
      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. Morgothal Messages postés 1350 Statut Membre 184
       
      Pas de soucis !
      0