Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Cacher des feuilles problème?

S

Sylvain

Guest
Bonjour,

J'ai un petit souci avec le thisworkbook, j'aimerais cacher des feuilles si la personne clique sur désactiver les macros sinon elles apparaissent. Aujourd'hui, avec le code ci dessous, que l'on clique sur activer ou désactivier les macros elles disparaissent tout le temps, je ne comprends pas : le message d'erreur est le suivant : "erreur d'éxécution 1004 la méthode select de la classe worksheet a échoué".

Merci pour l'astuce si il y en a une.

Sylvain


Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Application.DisplayFullScreen = False


'si les macros ont été autorisées à l'ouverture, la feuille menu
'est visible et message est cachée
'il faut re-préparer le classeur pour l'éventuelle mauvaise ouverture suivante
'si elles n'ont pas été autorisées de toutes façons cette macro ne
'se lance pas ...

'Application.ScreenUpdating = False

ThisWorkbook.Windows(1).Visible = False
Sheets("message").Visible = True

ThisWorkbook.Saved = True

'Sheets(Array("menu", "MargeBrute", "chargestructure", "prixequilibre", "TVM", "calculprixaliment", "critèrestech", "charges", "entree", "uth", "emprunts", "Stock", "Courbe", "Trésorerie", "produits")).Select
'ActiveWindow.SelectedSheets.Visible = False
'ActiveWorkbook.Save
End Sub




Private Sub Workbook_Open()
ThisWorkbook.Windows(1).Visible = True
Sheets("message").Visible = False
'Sheets(Array("menu", "MargeBrute", "chargestructure", "prixequilibre", "TVM", "calculprixaliment", "critèrestech", "charges", "entree", "uth", "emprunts", "Stock", "Courbe", "Trésorerie", "produits")).Visible = True



Avertissement.Show
Sheets("menu").Select

'Application.DisplayFullScreen = True



End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
ThisWorkbook.Windows(1).Visible = False
End Sub
 
J

Jean-Marie

Guest
Bonjour Sylvain

Il te faut rajouter 'ActiveWindow.SelectedSheets.Visible = True juste avant la ligne Avertissement.Show qui t'affiche le userform.

@+Jean-Marie
 
S

Sylvain

Guest
Bonsoir,


Je en comprends pas ça ne marche toujours pas ??

Voici le code modifié :

Merci

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Application.DisplayFullScreen = False


'si les macros ont été autorisées à l'ouverture, la feuille menu
'est visible et message est cachée
'il faut re-préparer le classeur pour l'éventuelle mauvaise ouverture suivante
'si elles n'ont pas été autorisées de toutes façons cette macro ne
'se lance pas ...

'Application.ScreenUpdating = False

ThisWorkbook.Windows(1).Visible = False
Sheets("message").Visible = True

ThisWorkbook.Saved = True

'Sheets(Array("menu", "MargeBrute", "chargestructure", "prixequilibre", "TVM", "calculprixaliment", "critèrestech", "charges", "entree", "uth", "emprunts", "Stock", "Courbe", "Trésorerie", "produits")).Select
'ActiveWindow.SelectedSheets.Visible = False
'ActiveWorkbook.Save
End Sub




Private Sub Workbook_Open()
ThisWorkbook.Windows(1).Visible = True
Sheets("message").Visible = False
'Sheets(Array("menu", "MargeBrute", "chargestructure", "prixequilibre", "TVM", "calculprixaliment", "critèrestech", "charges", "entree", "uth", "emprunts", "Stock", "Courbe", "Trésorerie", "produits")).Visible = True
ActiveWindow.SelectedSheets.Visible = True


Avertissement.Show
Sheets("menu").Select

'Application.DisplayFullScreen = True



End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
ThisWorkbook.Windows(1).Visible = False
End Sub
 
M

myDearFriend

Guest
Bonsoir Sylvain,
Re- Jean-Marie,


Si j'ai bien compris le problème :

- les macros ne sont pas activées : une seule feuille nommée "message" est visible.
- les macros sont activées : toutes les feuilles sont visibles sauf la feuille "message"


Soit 16 feuilles dans le classeur, la première (feuille 1) est nommée "message", la seconde (feuille 2) est nommée "menu" :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'si les macros ont été autorisées à l'ouverture, la feuille menu
'est visible et message est cachée
'il faut re-préparer le classeur pour l'éventuelle mauvaise ouverture suivante
'si elles n'ont pas été autorisées de toutes façons cette macro ne
'se lance pas ...
ShVisible False
ActiveWorkbook.Save
End Sub

Private Sub Workbook_Open()
ShVisible True
Avertissement.Show
Sheets(2).Select
End Sub

Private Sub ShVisible(Voir As Boolean)
Dim i As Integer
Application.ScreenUpdating = False
If Not Voir Then Sheets(1).Visible = True
For i = 2 To 16
Sheets(i).Visible = IIf(Voir, True, xlVeryHidden)
Next i
If Voir Then Sheets(1).Visible = xlVeryHidden
Application.ScreenUpdating = True
End Sub




Cordialement,
Didier_mDF
 
S

Sylvain

Guest
Bonjour,

Je viens d’essayer le nouveau code et ça ne marche toujours pas. En fait,
Si je clique sur désactiver : aucune feuille ne s’affiche alors que seul la feuille message (feuille 17) devrait s’afficher

Si je clique sur activer : seul l’userform s’affiche et aucune feuille n’apparaît alors l’ensemble des feuilles (feuille 1à 16) devrait s’afficher excepté une celle nommée message
J’ai donc 17 feuilles au total.


Par contre, un côté positif c’est que je n’ai pas de message d’erreur : étrange ?



Merci

Sylvain

J’ai tenté de modifier le code (cf ci-dessous) mais sans succès. Y a t-il une autre solution ?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'si les macros ont été autorisées à l'ouverture, la feuille menu
'est visible et message est cachée
'il faut re-préparer le classeur pour l'éventuelle mauvaise ouverture suivante
'si elles n'ont pas été autorisées de toutes façons cette macro ne
'se lance pas ...
ShVisible False
ActiveWorkbook.Save
End Sub

Private Sub Workbook_Open()
ShVisible True
Avertissement.Show
Sheets(9).Select
End Sub

Private Sub ShVisible(Voir As Boolean)
Dim i As Integer
Application.ScreenUpdating = False
If Not Voir Then Sheets(17).Visible = True
For i = 1 To 16
Sheets(i).Visible = IIf(Voir, True, xlVeryHidden)
Next i
If Voir Then Sheets(17).Visible = xlVeryHidden
Application.ScreenUpdating = True
End Sub
 
M

myDearFriend

Guest
Bonsoir Sylvain,

Pour que ça puisse fonctionner, il faut que tu laisses uniquement les 3 procédures suivantes :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_Open()
Private Sub ShVisible(Voir As Boolean)

En prenant bien soin de supprimer ta procédure :
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
ThisWorkbook.Windows(1).Visible = False
End Sub



Cordialement,
Didier_mDF
 
S

Sylvain

Guest
bonsoir,

cela marche désormais à une exeption : je n'arrive pas à savoir quel est le numéro attribué à chaque feuille. Ce ne sont pas les bonnes feuilles qui apparaissent

En tout cas un grand merci pour ton aide

Sylvain
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…