[Résolu] VBA : Problème pour afficher des feuilles "veryhidden"

armma

XLDnaute Nouveau
Bonjour à tous,

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.

Si vous avez une solution, je suis preneur !

Merci d'avance.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
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
 

Modeste geedee

XLDnaute Barbatruc
Re : VBA : Problème pour afficher des feuilles "veryhidden"

bonsour®
Bonjour à tous,

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
 

armma

XLDnaute Nouveau
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
 

tototiti2008

XLDnaute Barbatruc
Re : [Résolu] VBA : Problème pour afficher des feuilles "veryhidden"

Bonjour Modeste Geedee,
Re,

et tout ça, tu l'aurais vu si tu n'avais pas mis un On Error Resume Next au début de ton code, et je ne sais pas s'il est indiqué de le garder
 

armma

XLDnaute Nouveau
Re : [Résolu] VBA : Problème pour afficher des feuilles "veryhidden"

Je l'avais enlevé (le "on erreur resume next") mais je ne comprenais pas pourquoi il me mettait un message d'erreur sur le "visible= true".

Maintenant c'est très clair. Et puis, Excel a toujours raison !

Merci encore :)
 

Discussions similaires

Réponses
2
Affichages
345