Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

guigui971

XLDnaute Junior
Bonjour,

J'ai un classeur contenant plusieurs feuilles, pour lesquelles je veux faire apparaitre le moins possible EXCEL, car l'utilisateur n'a a faire que des saisies directes dans les feuilles, sans avoir besoin des différents menus d'EXCEL, et parce que je veux exploiter au maximum l'écran.

Durant l'utilisation de ce classeur "spécial", on peut être amené à en utiliser un autre à côté, qui a besoin de l'aspect "normal" d'EXCEL...

J'ai donc créé différents événements placés dans "ThisWorkbook", censés faire tout çà :

Sub Workbook_Open()
Application.ScreenUpdating = False
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
Application.DisplayFormulaBar = False
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayGridlines = False
Application.DisplayFullScreen = True
Application.DisplayStatusBar = False
' (là j'hésite car certains mettent "Not Application.DisplayStatusBar" à la place de "False")
Application.WindowState = xlMaximized
ActiveWindow.WindowState = xlMaximized
Application.ScreenUpdating = True
End Sub

Sub Workbook_activate()
Application.ScreenUpdating = False
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
Application.DisplayFormulaBar = False
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayGridlines = False
Application.DisplayFullScreen = True
Application.DisplayStatusBar = False
Application.WindowState = xlMaximized
ActiveWindow.WindowState = xlMaximized
Application.ScreenUpdating = True
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Application.DisplayFormulaBar = True
Application.DisplayFullScreen = False
ActiveWindow.View = xlNormalView
ActiveWindow.DisplayHeadings = True
ActiveWindow.DisplayGridlines = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True
Application.DisplayFullScreen = False
Application.ScreenUpdating = True
End Sub

Private Sub Workbook_Deactivate()
Application.ScreenUpdating = False
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Application.DisplayFormulaBar = True
ActiveWindow.View = xlNormalView
ActiveWindow.DisplayHeadings = True
ActiveWindow.DisplayGridlines = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True
Application.DisplayFullScreen = False
Application.ScreenUpdating = True
End Sub


Le problème, c'est que çà ne marche pas à tous les coups :
- quand je passe sur un autre classeur ("normal"), le ruban et la barre de formule demeurent parfois (souvent) encore masqués, alors que j'ai bien une réapparition des entêtes de lignes/colonne, et de la grille.
- quand je repasse d'une feuille à l'autre de mon classeur ("spécial"), la barre de formule revient parfois.
- idem lorsque je repasse de mon classeur "normal", à mon classeur "spécial" : la barre de formule et/ou les entêtes de lignes/colonne réapparaissent parfois...

J'ai tenté de ralentir mon code en ajoutant une petite boucle entre chaque ligne : aucun effet!

Et je n'ai pas trouvé de réponse dans ce forum, à part qu'ici : VBA: Hide ribbon & others, how to limit to one workbook?, çà me porte à croire que j'ai bien fait mon code. (si j'ai bien compris le gars)

Bref, après avoir tout essayé, je suis perdu!

Merci d'avance pour vos conseils
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

Bonjour guigui,
Peut être besoin de ceci ,copié dans l'aide
Non testé
Exemple

Cet exemple montre comment désactiver des événements avant l'enregistrement d'un fichier de telle sorte que l'événement BeforeSave n'ait pas lieu.
Visual Basic pour Applications
Application.EnableEvents = False
'ici ta macro ......
Application.EnableEvents = True

Bruno

 

guigui971

XLDnaute Junior
Re : Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

Salut,

Désolé mais je ne comprend pas où tu veux en venir. :confused:

Merci quand même.

J'ai peut être mal expliqué mon problème. Je résume :
J'ai mis tout un tas de code dans le "thisworkbook" d'un classeur particulier pour faire apparaitre le moins possible l'interface EXCEL dans ce classeur.
Et pour la faire ré-aparaitre quand on quitte ou que l'on bascule sur un autre classeur.

Sauf que çà ne marche pas complétement à tous les coups. Sans raison apparente.
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

Oui, pas facile.
Parfois il est bon de stopper les événements pour ne pas que la modif entraine un autre événement
Exemple :

Private Sub Workbook_Deactivate()
Application.EnableEvents = False' on désactive les événements

Application.ScreenUpdating = False
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Application.DisplayFormulaBar = True
ActiveWindow.View = xlNormalView
ActiveWindow.DisplayHeadings = True
ActiveWindow.DisplayGridlines = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True
Application.DisplayFullScreen = False
Application.ScreenUpdating = True
Application.EnableEvents = True 'on réactive les événements

End Sub
 

guigui971

XLDnaute Junior
Re : Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

Mais si on desactive les événements en début de Workbook_Deactivate() je suppose que toutes les lignes jusqu'à enableevents=True seront sans effet ?

Peux tu STP détailler ton idée
"Parfois il est bon de stopper les événements pour ne pas que la modif entraine un autre événement"
Il y a là quelque chose qui m'échappe.

Quoi qu'il en soit, J'ai essayé, avec ou sans ton code, çà semble ne rien changer.

J'ai tenté la même chose mais restreignant le nombre de lignes d'ordres dans les différents blocs open/activate/deactivate/beforeclose : çà semble marcher

Donc j'en reviens à une hypothèse: à partir d'un certain nbre de lignes, il y a saturation du truc qui n'a pas le temps de tout faire peut être.
 

youky(BJ)

XLDnaute Barbatruc
Re : Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

re,
reprenons l'exemple
Private Sub Workbook_Deactivate()
Quand on est là l'événement a eu lieu.
et . . .
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)
la ligne ci-dessus risque de réactiver ton fichier, donc re-événement "Activation"
et ta macro ne sait plus ou donner de la tête.

Essaye de mettre un point d'arrêt dans ton code et test en pas à pas avec F8 tu verras peut être par ou il passe.
Bruno

 

guigui971

XLDnaute Junior
Re : Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

Je commence à comprendre le scénario.

Alors si j'ai essayé ce truc :

Sub Workbook_Open()
call special
End Sub

Sub Workbook_activate()
call special
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
call normal
End Sub

Private Sub Workbook_Deactivate()
call normal
End Sub

et à part, dans des modules, 'special' avec toutes mes lignes de commande destinées à masquer EXCEL, et une autre macro 'normal' qui remet tout au propre.

--> c'est pas mieux!
 
Dernière édition:

guigui971

XLDnaute Junior
Re : Problème INCOMPREHENSIBLE sur EVENEMENT :RESOLU

Salut,

Hourra! J'y suis arrivé! :eek:

Ci-joint une demo "special.xlsm" :
A l'ouverture, il se met en plein écran et EXCEL apparait au minimum, pour toutes les feuilles du classeur

Quand on le referme, ou que l'on ouvre à côté un autre tableur, ce dernier apparait dans l'environnement EXCEL habituel.



Merci
 

Pièces jointes

  • special.xlsm
    19.1 KB · Affichages: 365
Dernière édition:

guigui971

XLDnaute Junior
Re : Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

Bonjour,

Pour ceux que çà interresse, je reviens sur le code destiné à masquer l'interface d'EXCEL, que j'ai simplifié au maximum :

Créer les 2 macros suivantes :
Sub masqueX()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayGridlines = False
Application.DisplayFullScreen = True
Application.DisplayStatusBar = Not Application.DisplayStatusBar
Application.WindowState = xlMaximized
ActiveWindow.WindowState = xlMaximized
Application.DisplayFormulaBar = False
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Sub montreX()
Application.ScreenUpdating = False
ActiveWindow.View = xlNormalView
ActiveWindow.DisplayHeadings = True
ActiveWindow.DisplayGridlines = True
Application.DisplayStatusBar = True
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True
Application.DisplayFullScreen = False
Application.DisplayFormulaBar = True
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Application.ScreenUpdating = True

Mettre dans thisWorkBook :
Sub Workbook_Open()
Application.EnableEvents = False
Application.ErrorCheckingOptions.BackgroundCheckin g = False
Call masqueX
Application.EnableEvents = True
End Sub

Sub Workbook_Activate()
Application.EnableEvents = False
Call masqueX
Application.EnableEvents = True
End Sub

Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.EnableEvents = False
Call montreX
Application.EnableEvents = True
ActiveWorkbook.Save
End Sub

Et enfin, mettre dans chaque feuille où l'on veut masquer l'interface EXCEL :
Sub Worksheet_Activate()
call masqueX
End Sub

Seule petit détail qui me chiffone : quand on presse "ESC", la barre de formule ré-apparait...
Quelqu'un a t-il une idiée pour y pallier?
Merci
 

flybox

XLDnaute Nouveau
Re : Problème INCOMPREHENSIBLE sur EVENEMENT DE CLASSEUR

Bonjour,workbook_open ne se déclenche pas toujours,par contre une sub auto_open marche bien,workbook_activate ne marche pas non plus à tout les coups ,il suffit d'ecrire un msgbox dans workbook_open pour constater que l'affichage est aléatoire.
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T