Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro AUTO_CLOSE attachée à un menu

21 réponses
Avatar
Cervolent
Bonjour à vous les professionnels d'Excel et merci d'avance pour vos réponses
Sous EXCEL 2002 :
La macro "Auto_Open" qui s'exécute dans mon fichier, personnalise
l'environnement Excel en ajoutant une barre de menu personnalisée "Menu
Diaporama". Dans cette barre d'outils j'insére une commande "Quitter" qui
exécute la macro "Auto_Close".
Cette macro "Auto_Close" supprime la barre d'outils "Menu diaporama" et
replace l'environnement EXCEL tel qu'il était au départ, mais comme la
commande d'exécution se trouve dans ladite barre, Excel Plante.
Comment faire disparaitre cette barre de menu "Menu Diaporama" ou la
commande "Quitter" qui exécute la macro qui la supprime ???
J'aimerais que cela se fasse autrement que par l'intermédiaire d'un autre
fichier (bibliothèque macro style Perso.xls) car je dois diffuser uniquement
ce fichier par CD et messagerie à une 100 aine d'utilisateurs.

Merci, à vous ...

10 réponses

1 2 3
Avatar
AV
Et si tu mettais "tes suppressions" dans le "Workbook_BeforeClose" ?

AV
Avatar
MichDenis
Bonjour Cervolent,

Ce qui se passe, c'est que ta procédure auto_Close s'exécute 2 fois.

Une première fois lorsque tu cliques sur le bouton "quitter" qui appelle directement cette procédure et comme dans cette procédure,
il y a une commande demandant à excel de se fermer, à l'exécution de cette commande, la macro Auto_close s'exécute à nouveau. Lors
de cette seconde exécution, il n'est pas étonnant que la macro ne trouve plus la barre de commande à supprimer puisque la premère
exécution l'a déjà supprimée. en conséquence, la macro se plante.

Ajoute au début de ta procédure qui détruit ta barre d'outils, la ligne de code suivante

On Error Resume Next


P.S. Il y a quelque chose qui t'empêche d'utiliser les événements prévus à cet effet :

'---------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
'---------------

Private Sub Workbook_Open()
End Sub
'---------------


Salutations!



"Cervolent" a écrit dans le message de news:

Bonjour à vous les professionnels d'Excel et merci d'avance pour vos réponses
Sous EXCEL 2002 :
La macro "Auto_Open" qui s'exécute dans mon fichier, personnalise
l'environnement Excel en ajoutant une barre de menu personnalisée "Menu
Diaporama". Dans cette barre d'outils j'insére une commande "Quitter" qui
exécute la macro "Auto_Close".
Cette macro "Auto_Close" supprime la barre d'outils "Menu diaporama" et
replace l'environnement EXCEL tel qu'il était au départ, mais comme la
commande d'exécution se trouve dans ladite barre, Excel Plante.
Comment faire disparaitre cette barre de menu "Menu Diaporama" ou la
commande "Quitter" qui exécute la macro qui la supprime ???
J'aimerais que cela se fasse autrement que par l'intermédiaire d'un autre
fichier (bibliothèque macro style Perso.xls) car je dois diffuser uniquement
ce fichier par CD et messagerie à une 100 aine d'utilisateurs.

Merci, à vous ...
Avatar
Cervolent
Merci MichDenis, je sais pas si je m'y prend mal mais ça marche pas !!! Je te
joint les macros ci-dessous

Sub Auto_Open()
'Cette macro permet de libérer de la place à l'écran en enlevant les Barres
d'outils
'puis recréé un menu personnalisé
Application.ScreenUpdating = False
Application.CommandBars("Worksheet Menu Bar").Enabled = False
Application.CommandBars.Add(Name:="Menu Diaporama").Visible = True
Application.CommandBars("Menu Diaporama").Position = msoBarTop
Application.CommandBars("Standard").Visible = False
Application.CommandBars("Formatting").Visible = False
Application.CommandBars("Drawing").Visible = False
Application.CommandBars("Forms").Visible = False
Application.CommandBars("Picture").Visible = False
Application.CommandBars("Protection").Visible = False
Application.CommandBars("Reviewing").Visible = False
With Application
.DisplayFormulaBar = False
.DisplayStatusBar = False
.ShowWindowsInTaskbar = False
End With
'Création des menus
Ajout_Menu
End Sub

Sub Ajout_Menu()
Application.CommandBars("Menu Diaporama").Controls.Add Type:= _
msoControlComboBox, ID:33, Before:=1, temporary:=True
Set newItem = Application.CommandBars("Menu
Diaporama").Controls.Add(Type:=msoControlPopup, Before:=1, temporary:=True)
With newItem
.BeginGroup = True
.Caption = "Quitter"
.OnAction = "Quitter"
End With
End Sub

Sub Auto_Close()
'Rétablissement des barres de menu et d'outils avant fermeture du fichier
Workbooks("Construction_Proposition.XLS").Close SaveChanges:úlse
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Worksheet Menu Bar").Enabled = True
Application.CommandBars("Standard").Visible = True
Application.CommandBars("Formatting").Visible = True
Application.CommandBars("Drawing").Visible = True
Application.CommandBars("Menu Diaporama").Delete
With Application
.DisplayFormulaBar = True
.DisplayStatusBar = True
.ShowWindowsInTaskbar = True
End With
End Sub
Avatar
MichDenis
Bonjour Cervolent,

Pourquoi utilises "Sub Auto_Close()" et "Private Sub Workbook_BeforeClose(Cancel As Boolean)" ? Il me semble que la dernière
pourrait réunir tout le code et ce dans la même procédure.

Ta macro "Quitter" associée à ton bouton sur la barre de commande, elle est où ? Quelle est son code ? Où est son code ?

Suggestion : Tu places un point d'arrêt au tout début de la macro qu'exécute le bouton "Quitter" de ta barre d'outils et tu utilises
F8 (pas à pas) pour l'ensemble de ta macro... cela va te permettre de voir le déroulement de cette dernière et tu pourras identifier
la ligne de commande qui est problématique.

P.S. Je n'ai pas vu trace de ceci : "On Error Resume Next" suggéré lors de mon message précédent.



Salutations!





"Cervolent" a écrit dans le message de news:

Merci MichDenis, je sais pas si je m'y prend mal mais ça marche pas !!! Je te
joint les macros ci-dessous

Sub Auto_Open()
'Cette macro permet de libérer de la place à l'écran en enlevant les Barres
d'outils
'puis recréé un menu personnalisé
Application.ScreenUpdating = False
Application.CommandBars("Worksheet Menu Bar").Enabled = False
Application.CommandBars.Add(Name:="Menu Diaporama").Visible = True
Application.CommandBars("Menu Diaporama").Position = msoBarTop
Application.CommandBars("Standard").Visible = False
Application.CommandBars("Formatting").Visible = False
Application.CommandBars("Drawing").Visible = False
Application.CommandBars("Forms").Visible = False
Application.CommandBars("Picture").Visible = False
Application.CommandBars("Protection").Visible = False
Application.CommandBars("Reviewing").Visible = False
With Application
.DisplayFormulaBar = False
.DisplayStatusBar = False
.ShowWindowsInTaskbar = False
End With
'Création des menus
Ajout_Menu
End Sub

Sub Ajout_Menu()
Application.CommandBars("Menu Diaporama").Controls.Add Type:= _
msoControlComboBox, ID:33, Before:=1, temporary:=True
Set newItem = Application.CommandBars("Menu
Diaporama").Controls.Add(Type:=msoControlPopup, Before:=1, temporary:=True)
With newItem
.BeginGroup = True
.Caption = "Quitter"
.OnAction = "Quitter"
End With
End Sub

Sub Auto_Close()
'Rétablissement des barres de menu et d'outils avant fermeture du fichier
Workbooks("Construction_Proposition.XLS").Close SaveChanges:úlse
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Worksheet Menu Bar").Enabled = True
Application.CommandBars("Standard").Visible = True
Application.CommandBars("Formatting").Visible = True
Application.CommandBars("Drawing").Visible = True
Application.CommandBars("Menu Diaporama").Delete
With Application
.DisplayFormulaBar = True
.DisplayStatusBar = True
.ShowWindowsInTaskbar = True
End With
End Sub
Avatar
Cervolent
Rebonjour Mitch
Ne soit pas désagréable Mitch ;-) le 2eme fil précisait justement quelques
modifs.
La macro exécutée par la commande Quitter est la macro "Quitter" je l'ai
renommée en lieu et place de "Auto_close" qui se trouve tout en bas. Elle
permet de fermer le fichier en cours. Si j'ai bien compris ce à quoi sert
WorkBook_BeforeClose : avant que le fichier ne se ferme les actions doivent
s'exécuter. Hors je fais bien l'exécution en pas à pas mais quand le fichier
se ferme, terminé plus d'affichage à l'écran pour visualiser
Workbook_BeforeClose.
De plus le plantage se fait en réel mais pas en pas à pas.

Alors qu'est ce t'en dit ;-(

Sub Auto_Open()
'Cette macro permet de libérer de la place à l'écran en enlevant les Barres
d'outils
'puis recréé un menu personnalisé
Application.ScreenUpdating = False
Application.CommandBars("Worksheet Menu Bar").Enabled = False
Application.CommandBars.Add(Name:="Menu Diaporama").Visible = True
Application.CommandBars("Menu Diaporama").Position = msoBarTop
Application.CommandBars("Standard").Visible = False
Application.CommandBars("Formatting").Visible = False
Application.CommandBars("Drawing").Visible = False
Application.CommandBars("Forms").Visible = False
Application.CommandBars("Picture").Visible = False
Application.CommandBars("Protection").Visible = False
Application.CommandBars("Reviewing").Visible = False
With Application
.DisplayFormulaBar = False
.DisplayStatusBar = False
.ShowWindowsInTaskbar = False
End With
'Création des menus
Ajout_Menu
End Sub

Sub Ajout_Menu()
Application.CommandBars("Menu Diaporama").Controls.Add Type:= _
msoControlComboBox, ID:33, Before:=1, temporary:=True
Set newItem = Application.CommandBars("Menu
Diaporama").Controls.Add(Type:=msoControlPopup, Before:=1, emporary:=True)
With newItem
.BeginGroup = True
.Caption = "Quitter"
.OnAction = "Quitter"
End With
End Sub

Sub Quitter()
'Rétablissement des barres de menu et d'outils avant fermeture du fichier
Workbooks("Construction_Proposition.XLS").Close SaveChanges:úlse
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Worksheet Menu Bar").Enabled = True
Application.CommandBars("Standard").Visible = True
Application.CommandBars("Formatting").Visible = True
Application.CommandBars("Drawing").Visible = True
Application.CommandBars("Menu Diaporama").Delete
With Application
.DisplayFormulaBar = True
.DisplayStatusBar = True
.ShowWindowsInTaskbar = True
End With
End Sub
Avatar
AV
Merci MichDenis,


Moi c'est AV mais bon... peut-être que la "distribution" se fait par étapes ?

AV

Avatar
Cervolent
Déolé de t'avoir s'couisé AV mais je connaissait pas Workbook_ beforeclose et
MitchDenis m'a donné plus de précisions ;-))

Ci-dessous tu retrouveras ou on en ai !!!
La macro exécutée par la commande Quitter est la macro "Quitter" je l'ai
renommée en lieu et place de "Auto_close" qui se trouve tout en bas. Elle
permet de fermer le fichier en cours. Si j'ai bien compris ce à quoi sert
WorkBook_BeforeClose : avant que le fichier ne se ferme les actions doivent
s'exécuter. Hors je fais bien l'exécution en pas à pas mais quand le fichier
se ferme, terminé plus d'affichage à l'écran pour visualiser
Workbook_BeforeClose.
De plus le plantage se fait en réel mais pas en pas à pas.

Alors qu'est ce t'en dit ;-(

Sub Auto_Open()
'Cette macro permet de libérer de la place à l'écran en enlevant les Barres
d'outils
'puis recréé un menu personnalisé
Application.ScreenUpdating = False
Application.CommandBars("Worksheet Menu Bar").Enabled = False
Application.CommandBars.Add(Name:="Menu Diaporama").Visible = True
Application.CommandBars("Menu Diaporama").Position = msoBarTop
Application.CommandBars("Standard").Visible = False
Application.CommandBars("Formatting").Visible = False
Application.CommandBars("Drawing").Visible = False
Application.CommandBars("Forms").Visible = False
Application.CommandBars("Picture").Visible = False
Application.CommandBars("Protection").Visible = False
Application.CommandBars("Reviewing").Visible = False
With Application
.DisplayFormulaBar = False
.DisplayStatusBar = False
.ShowWindowsInTaskbar = False
End With
'Création des menus
Ajout_Menu
End Sub

Sub Ajout_Menu()
Application.CommandBars("Menu Diaporama").Controls.Add Type:= _
msoControlComboBox, ID:33, Before:=1, temporary:=True
Set newItem = Application.CommandBars("Menu
Diaporama").Controls.Add(Type:=msoControlPopup, Before:=1, emporary:=True)
With newItem
.BeginGroup = True
.Caption = "Quitter"
.OnAction = "Quitter"
End With
End Sub

Sub Quitter()
'Rétablissement des barres de menu et d'outils avant fermeture du fichier
Workbooks("Construction_Proposition.XLS").Close SaveChanges:úlse
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Worksheet Menu Bar").Enabled = True
Application.CommandBars("Standard").Visible = True
Application.CommandBars("Formatting").Visible = True
Application.CommandBars("Drawing").Visible = True
Application.CommandBars("Menu Diaporama").Delete
With Application
.DisplayFormulaBar = True
.DisplayStatusBar = True
.ShowWindowsInTaskbar = True
End With
End Sub


Merci MichDenis,


Moi c'est AV mais bon... peut-être que la "distribution" se fait par étapes ?

AV






Avatar
MichDenis
Bonjour Cervolent,

Suis-je clair ?

Tu fais 1 ( UNE ) procédure de fermeture qui englobe TOUTES les actions que tu veux réaliser et tu appelles cette procédure comme
ceci :
'----------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
MaProcédureFermeture
End Sub

'----------------------------
Sub MaProcédureFermeture()
'Tout le code modifiant l'affichage des barres d'outils
'Enregistrement du fichier si nécessaire
End Sub
'----------------------------


Salutations!




"Cervolent" a écrit dans le message de news:

Rebonjour Mitch
Ne soit pas désagréable Mitch ;-) le 2eme fil précisait justement quelques
modifs.
La macro exécutée par la commande Quitter est la macro "Quitter" je l'ai
renommée en lieu et place de "Auto_close" qui se trouve tout en bas. Elle
permet de fermer le fichier en cours. Si j'ai bien compris ce à quoi sert
WorkBook_BeforeClose : avant que le fichier ne se ferme les actions doivent
s'exécuter. Hors je fais bien l'exécution en pas à pas mais quand le fichier
se ferme, terminé plus d'affichage à l'écran pour visualiser
Workbook_BeforeClose.
De plus le plantage se fait en réel mais pas en pas à pas.

Alors qu'est ce t'en dit ;-(

Sub Auto_Open()
'Cette macro permet de libérer de la place à l'écran en enlevant les Barres
d'outils
'puis recréé un menu personnalisé
Application.ScreenUpdating = False
Application.CommandBars("Worksheet Menu Bar").Enabled = False
Application.CommandBars.Add(Name:="Menu Diaporama").Visible = True
Application.CommandBars("Menu Diaporama").Position = msoBarTop
Application.CommandBars("Standard").Visible = False
Application.CommandBars("Formatting").Visible = False
Application.CommandBars("Drawing").Visible = False
Application.CommandBars("Forms").Visible = False
Application.CommandBars("Picture").Visible = False
Application.CommandBars("Protection").Visible = False
Application.CommandBars("Reviewing").Visible = False
With Application
.DisplayFormulaBar = False
.DisplayStatusBar = False
.ShowWindowsInTaskbar = False
End With
'Création des menus
Ajout_Menu
End Sub

Sub Ajout_Menu()
Application.CommandBars("Menu Diaporama").Controls.Add Type:= _
msoControlComboBox, ID:33, Before:=1, temporary:=True
Set newItem = Application.CommandBars("Menu
Diaporama").Controls.Add(Type:=msoControlPopup, Before:=1, emporary:=True)
With newItem
.BeginGroup = True
.Caption = "Quitter"
.OnAction = "Quitter"
End With
End Sub

Sub Quitter()
'Rétablissement des barres de menu et d'outils avant fermeture du fichier
Workbooks("Construction_Proposition.XLS").Close SaveChanges:úlse
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Worksheet Menu Bar").Enabled = True
Application.CommandBars("Standard").Visible = True
Application.CommandBars("Formatting").Visible = True
Application.CommandBars("Drawing").Visible = True
Application.CommandBars("Menu Diaporama").Delete
With Application
.DisplayFormulaBar = True
.DisplayStatusBar = True
.ShowWindowsInTaskbar = True
End With
End Sub
Avatar
AV
Ci-dessous tu retrouveras ou on en ai !!!


Je vous laisse car je ne voudrais pas déranger !
D'autant que "j'ai" pas...donc je suis hors course !
;-)
AV

Avatar
Pierre CFI [mvp]
donc AV n'en AV pas :o)

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net

"AV" a écrit dans le message de news:
Ci-dessous tu retrouveras ou on en ai !!!


Je vous laisse car je ne voudrais pas déranger !
D'autant que "j'ai" pas...donc je suis hors course !
;-)
AV





1 2 3