Faire fonctionner une macro dans des feuilles protégées

timon

XLDnaute Nouveau
Bonjour,

Voici mon problème :
Dans mon excel j'ai fait une macro qui me permet d'afficher uniquement certaine colonne :

Code:
Sub Affichage()
 Dim Sh As Worksheet, Ws As Worksheet
 Set Sh = Sheets("Affichage")
 For Each Ws In ActiveWorkbook.Worksheets
     If Ws.Name <> Sh.Name And Ws.Name <> "taux" And Ws.Name <> "suivi pays" And Ws.Name <> "MaJ" Then
         Ws.Columns.Hidden = False
         Ws.Columns("E:I").Hidden = Sh.Range("$G$2") = FAUX
         Ws.Columns("K:O").Hidden = Sh.Range("$G$3") = FAUX
         Ws.Columns("Q:Y").Hidden = Sh.Range("$G$4") = FAUX
         Ws.Columns("W:AA").Hidden = Sh.Range("$G$5") = FAUX
         Ws.Columns("AC:AG").Hidden = Sh.Range("$G$6") = FAUX
         Ws.Columns("AI:AM").Hidden = Sh.Range("$G$7") = FAUX
         Ws.Columns("AO:AS").Hidden = Sh.Range("$G$8") = FAUX
         Ws.Columns("AU:AY").Hidden = Sh.Range("$G$9") = FAUX
         Ws.Columns("BA:BE").Hidden = Sh.Range("$G$10") = FAUX
         Ws.Columns("BG:BK").Hidden = Sh.Range("$G$11") = FAUX
         Ws.Columns("BM:BQ").Hidden = Sh.Range("$G$12") = FAUX
         Ws.Columns("BS:BW").Hidden = Sh.Range("$G$13") = FAUX
         Ws.Columns("BY:CC").Hidden = Sh.Range("$G$14") = FAUX
         Ws.Rows("115:166").Hidden = Sh.Range("$H$3") = FAUX
         End If
 Next Ws
 End Sub

Elle fonctionne très bien sauf depuis que j'ai fait une macro qui me permet de vérouiller les onglets (en gardant la possibilité de mettre en forme les cellules, lignes et colonnes) :

Code:
Sub Protéger()
' Protection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
Dim Motdepasse As String
Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "")
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Protect Password:=Motdepasse
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True

Next i
End Sub

Avec la protéction ma macro d'affichage bug et me donne ce message d'erreur :
Impossible de définir la propriété Hidden de la classe Range

Si quelqu'un sais pourquoi je veux bien de l'aide. Merci d'avance

P.S : Sur un onglet je cache des lignes avec des bouton à bascule qui fonctionne avec cette protection. J'ai essayé de transformer ma macro affichage avec des bouton à bascule mais j'arrive pas à les codé pour qu'il agissent sur toutes les feuilles sauf 2. Peut-être que c'est une solution...

Donc voilà je vous remercie par avance pour votre aide.
 

Pierrot93

XLDnaute Barbatruc
Re : Faire fonctionner une macro dans des feuilles protégées

Bonjour,

pour que le code puisse s'exécuter sur feuille protégée, il faut que la protection soit effectuée par le code en utilisant l'argument "userinterfaceonly", exemple ci-dessous à utiliser dans le module "thisworkbook", procédure evénementielle, se déclenche à l'ouverture du classeur, ici le "codename" de la feuille est utilisé :

Code:
Option Explicit
Private Sub Workbook_Open()
Feuil1.Protect "toto", userinterfaceonly:=True
End Sub

bonne journée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Faire fonctionner une macro dans des feuilles protégées

Re,

il faut bien sur préciser les autres arguments qui te sont nécessaires...
Code:
DrawingObjects:=True, Contents:=True, Scenarios:=True _
         , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
         AllowFormattingRows:=True
 

timon

XLDnaute Nouveau
Re : Faire fonctionner une macro dans des feuilles protégées

Oui désolé je ne l'ai pas précisés mais je suis encore débutant dans les macros. J'ai essayé de l'adapté mais je ne sais pas trop ou insérer userinterfaceonly:=True,

J'ai essayé cela sans succès :
Code:
Option Explicit
 Private Sub Workbook_Open()
 Dim nombre As Integer
 Dim i As Integer
 Dim Motdepasse As String
 Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "")
 nombre = ActiveWorkbook.Sheets.Count
 Application.ScreenUpdating = False
 For i = 1 To nombre
 Worksheets(i).Protect Password:=Motdepasse
 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, userinterfaceonly:=True

 Next i
 
 End Sub
Cependant le fait de le mettre comme cela met la protection à l'ouverture du fichier alors que je veut faire une copie protéger et qu'ensuite des gens la consulte sur le serveur.
 

timon

XLDnaute Nouveau
Re : Faire fonctionner une macro dans des feuilles protégées

J'ai réussi, je l'ai mis directement dans ma macro de protection :

Code:
Sub Protéger()
' Protection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
Dim Motdepasse As String
Motdepasse = InputBox("Entrer le mot de passe :", "Mettre la protection sur toutes les feuilles", "")
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
Worksheets(i).Protect Password:=Motdepasse, userinterfaceonly:=True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True

Next i
End Sub

Merci pour ton aide Pierrot !!!!
 

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400