Dans un de mes programmes Excel je cache toutes les feuilles à l'ouverture mais je permets d'en ouvrir quelques unes si on a le bon mot de passe.
Seulement il m'ouvre tout le temps la dernière feuille, quoi que je mette en nom.
Pour être plus clair, voici mon code :
Code:
Private Sub Workbook_Open()
On Error Resume Next
Dim Feuille As Worksheet
Application.ScreenUpdating = False
For Each Feuille In ThisWorkbook.Worksheets
Feuille.Visible = xlSheetVeryHidden
Next
With Sheets("MENU")
.Visible = True
.Activate
End With
With ActiveWindow
.DisplayGridlines = False
.DisplayHeadings = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayWorkbookTabs = False
End With
ActiveWorkbook.Protect Structure:=True, Windows:=True, Password:="TOTO"
Application.ScreenUpdating = True
Call menu
End Sub
A l'ouverture, je cache toutes mes feuilles sauf la feuille MENU et j'appelle une macro qui s'appelle aussi menu.
Jusqu'à là, pas de problème.
A l'activation d'un bouton, j'appelle ceci :
Code:
Private Sub CommandButton4_Click()
'On Error Resume Next
Unload Me
With Worksheets("STATISTICS")
.Visible = xlSheetVisible
.Activate
End With
With ActiveWindow
.DisplayGridlines = True
.DisplayHeadings = True
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
.DisplayWorkbookTabs = True
End With
If ActiveWorkbook.ProtectStructure = True Or _
ActiveWorkbook.ProtectWindows = True Then _
ActiveWorkbook.Unprotect Password:="TOTO"
End Sub
Cettte macro ne fonctionne que si la feuille STATISTICS est placée en dernière parmi toutes mes feuilles.
Si elle ne l'est pas, j'ai un message d'erreur "Unable to set the bisible property of the worksheet class". Je peux éviter ce bug en mettant "on error resume next" et dans ce cas là, il m'affichera la dernière de mes feuilles de mon classeur (donc une autre feuille que STATISTICS).
J'ai essayé plusieurs solutions (avec un .visible = True) mais rien n'y fait.
Re : VBA : Problème pour afficher des feuilles "veryhidden"
Bonjour armma,
bienvenue sur XLD,
visiblement tu joues avec la protection du classeur, je pense que ça vient de là
essaye d'enlever la protection du classeur avant d'afficher ta feuille STATISTICS
Dans un de mes programmes Excel je cache toutes les feuilles à l'ouverture mais je permets d'en ouvrir quelques unes si on a le bon mot de passe.
Seulement il m'ouvre tout le temps la dernière feuille, quoi que je mette en nom.
il est imperatif qu'il y ai toujours 1 feuille visible !!!
comme ceci cela devrait allez mieux ...
Code:
Private Sub Workbook_Open()
On Error Resume Next
Dim Feuille As Worksheet
Application.ScreenUpdating = False
For Each Feuille In ThisWorkbook.Worksheets
if feuille.name="MENU" then
feuille.visible=true
else
Feuille.Visible = xlSheetVeryHidden
end if
Next
'------------
suite du code
Re : VBA : Problème pour afficher des feuilles "veryhidden"
Yahoooooooo !!! Merci à tout les 2
Alors en fait, vous aviez tout les 2 raisons...
Vu que je cachais les onglets, je ne voyais pas ce qu'il se passait mais en fait ma macro d'ouverture du fichier ne pouvait pas me cacher "STATISTICS" car c'était la dernière feuille, et que, comme l'a dit Modeste geedee il doit toujours y avoir une feuille d'affichée. Donc elle laissait "STATISTICS" affichée.
Juste après ma macro affiche "MENU" et cache les onglets. C'est là où le piège était : je croyais que ça fonctionnait bien, mais non, "STATISTICS" était aussi en visible (cachée par "MENU").
Mais ce n'est pas tout car ceci n'explique pas pourquoi il ne m'affichait pas la page que je voulais.
Là c'est tototiti2008 qui m'a aiguillé. Vu que je protégeais mon classeur, il ne pouvait pas faire les instructions (visible = true). Il me fallait donc déprotéger mon classeur avant ces instructions et non après comme je faisais.
Enfin bref, c'est merveilleux ça marche Un grand MERCIIIIII !!!! (oui j'ai bloqué pendant 4h avant de me décider à demander de l'aide^^)
Voici le code final :
Macro ouverture du fichier (cache toutes les feuilles sauf MENU)
Code:
Private Sub Workbook_Open()
On Error Resume Next
Dim Feuille As Worksheet
Application.ScreenUpdating = False
For Each Feuille In ThisWorkbook.Worksheets
If ActiveWorkbook.ProtectStructure = True Or _
ActiveWorkbook.ProtectWindows = True Then _
ActiveWorkbook.Unprotect Password:="TOTO"
If Feuille.name = "MENU" Then
Feuille.Visible = True
Else
Feuille.Visible = xlSheetVeryHidden
End If
With ActiveWindow
.DisplayGridlines = False
.DisplayHeadings = False
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayWorkbookTabs = False
End With
ActiveWorkbook.Protect Structure:=True, Windows:=True, Password:="TOTO"
Next
Application.ScreenUpdating = True
Call menu
End Sub
Et pour afficher la page souhaitée (en plus de MENU) :
Code:
Private Sub CommandButton4_Click()
On Error Resume Next
Dim Feuille As Worksheet
Unload Me
Application.ScreenUpdating = False
For Each Feuille In ThisWorkbook.Worksheets
If ActiveWorkbook.ProtectStructure = True Or _
ActiveWorkbook.ProtectWindows = True Then _
ActiveWorkbook.Unprotect Password:="TOTO"
If Feuille.name = "MENU" Then
Feuille.Visible = True
ElseIf Feuille.name = "STATISTICS" Then
Feuille.Visible = True
Feuille.Activate
With ActiveWindow
.DisplayGridlines = True
.DisplayHeadings = True
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
.DisplayWorkbookTabs = True
End With
Else
Feuille.Visible = xlSheetVeryHidden
End If
ActiveWorkbook.Protect Structure:=True, Windows:=True, Password:="TOTO"
Next
Application.ScreenUpdating = True
End Sub