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

Menu macro compl.actif si classeur

9 réponses
Avatar
Marco38
Bonsoir,

J'ai le code suivant dans une macro complémentaire qui créer un sous menu
dans le menu fichier:

Sub auto_open()
Set vCommande =
Application.CommandBars("file").Controls.Add(Type:=msoControlButton, ID:= _
2950, Before:=14, temporary:=True)
vCommande.OnAction = "afficherformulairexxxxxxxx"
vCommande.Caption = "xxxxxxxxxxxxxxtotaux xxxxxxxxxxxxxxV3.0"
vCommande.FaceId = 0
'If Workbooks.Count = 0 Then
'vCommande.Enabled = True
'Else
'vCommande.Enabled = False
'End If
End Sub

Et-il possible d'activer le sous menu uniquement si un classeur est ouvert.
Si pas de classeur le sous menu reste en gris claire comme le sous menu
"enregistrer sous" quand aucun classeur n'est ouvert.

Merci
--
Marc

9 réponses

Avatar
anonymousA
bonjour,

2 solutions sont à priori possibles.

solution1 : tu pourrais laisser ton bouton non grisé et au début de ta
procédure onaction de celui-ci mettre une instruction pour controler
s'il existe au moins ouvert du style workbooks.count<>0

solution2: utiliser un evenement de type Application dans un module de
classe de ton xla pour permettre la surveillance d'evenements du style
suivant. Dans ce qui suit dans les procédures du remplaces les msgbox
par if workbooks.count<>

A mettre dans un module de classe appelé p.e AppEventClass
Public WithEvents Appl As Application

Private Sub Appl_NewWorkbook(ByVal Wb As Workbook)

application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true

End Sub


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count<>0 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
end if

End Sub

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)
application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
End Sub

A mettre dans le Workbook_Open de ton xla

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub

A+

Bonsoir,

J'ai le code suivant dans une macro complémentaire qui créer un sous menu
dans le menu fichier:

Sub auto_open()
Set vCommande =
Application.CommandBars("file").Controls.Add(Type:=msoControlButton, ID:= _
2950, Before:, temporary:=True)
vCommande.OnAction = "afficherformulairexxxxxxxx"
vCommande.Caption = "xxxxxxxxxxxxxxtotaux xxxxxxxxxxxxxxV3.0"
vCommande.FaceId = 0
'If Workbooks.Count = 0 Then
'vCommande.Enabled = True
'Else
'vCommande.Enabled = False
'End If
End Sub

Et-il possible d'activer le sous menu uniquement si un classeur est ouvert.
Si pas de classeur le sous menu reste en gris claire comme le sous menu
"enregistrer sous" quand aucun classeur n'est ouvert.

Merci


Avatar
anonymousA
bien sur , il manque le else dans la procédure et le workbooks.count
doit evidemment etre supérieru à 1


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count>1 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
else
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabledúlse
end if

End Sub

A+

bonjour,

2 solutions sont à priori possibles.

solution1 : tu pourrais laisser ton bouton non grisé et au début de ta
procédure onaction de celui-ci mettre une instruction pour controler
s'il existe au moins ouvert du style workbooks.count<>0

solution2: utiliser un evenement de type Application dans un module de
classe de ton xla pour permettre la surveillance d'evenements du style
suivant. Dans ce qui suit dans les procédures du remplaces les msgbox
par if workbooks.count<>

A mettre dans un module de classe appelé p.e AppEventClass
Public WithEvents Appl As Application

Private Sub Appl_NewWorkbook(ByVal Wb As Workbook)

application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true

End Sub


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count<>0 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
end if

End Sub

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)
application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
End Sub

A mettre dans le Workbook_Open de ton xla

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub

A+


Bonsoir,

J'ai le code suivant dans une macro complémentaire qui créer un sous
menu dans le menu fichier:

Sub auto_open()
Set vCommande =
Application.CommandBars("file").Controls.Add(Type:=msoControlButton,
ID:= _
2950, Before:, temporary:=True)
vCommande.OnAction = "afficherformulairexxxxxxxx"
vCommande.Caption = "xxxxxxxxxxxxxxtotaux xxxxxxxxxxxxxxV3.0"
vCommande.FaceId = 0
'If Workbooks.Count = 0 Then
'vCommande.Enabled = True
'Else
'vCommande.Enabled = False
'End If
End Sub

Et-il possible d'activer le sous menu uniquement si un classeur est
ouvert. Si pas de classeur le sous menu reste en gris claire comme le
sous menu "enregistrer sous" quand aucun classeur n'est ouvert.

Merci




Avatar
Marco38
Merci pour tes réponses mais cela ne fonctionne pas.

J'ai créer mon module de classe que j'ai appelé AppEventClass

Dedans j'ai copié ton code :
Public WithEvents Appl As Application
Private Sub Appl_NewWorkbook(ByVal Wb As Workbook)
Application.CommandBars("file").Controls("xxxxxxxxx").Enabled = True
End Sub

Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
If Workbooks.Count <> 0 Then
Application.CommandBars("file").Controls("xxxxxxxx").Enabled = True
End If
End Sub

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)
If Workbooks.Count > 1 Then
Application.CommandBars("file").Controls("xxxxxxx").Enabled = True
Else
Application.CommandBars("file").Controls("xxxxxxxx").Enabled = False
End If
End Sub


Dans mon AutoOpen j'ai le code suivant :
Sub auto_open()

Set vCommande =
Application.CommandBars("file").Controls.Add(Type:=msoControlButton, ID:= _
2950, Before:, temporary:=True)
vCommande.OnAction = "afficherformulaireCoriolis"
vCommande.Caption = "xxxxx"
vCommande.FaceId = 0
Set ApplicationClass.Appl = Application
End Sub

J'ai du oublier quelque chose
Merci
Marc



bien sur , il manque le else dans la procédure et le workbooks.count
doit evidemment etre supérieru à 1


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count>1 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
else
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabledúlse
end if

End Sub

A+

bonjour,

2 solutions sont à priori possibles.

solution1 : tu pourrais laisser ton bouton non grisé et au début de ta
procédure onaction de celui-ci mettre une instruction pour controler
s'il existe au moins ouvert du style workbooks.count<>0

solution2: utiliser un evenement de type Application dans un module de
classe de ton xla pour permettre la surveillance d'evenements du style
suivant. Dans ce qui suit dans les procédures du remplaces les msgbox
par if workbooks.count<>

A mettre dans un module de classe appelé p.e AppEventClass
Public WithEvents Appl As Application

Private Sub Appl_NewWorkbook(ByVal Wb As Workbook)

application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true

End Sub


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count<>0 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
end if

End Sub

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)
application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
End Sub

A mettre dans le Workbook_Open de ton xla

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub

A+


Bonsoir,

J'ai le code suivant dans une macro complémentaire qui créer un sous
menu dans le menu fichier:

Sub auto_open()
Set vCommande =
Application.CommandBars("file").Controls.Add(Type:=msoControlButton,
ID:= _
2950, Before:, temporary:=True)
vCommande.OnAction = "afficherformulairexxxxxxxx"
vCommande.Caption = "xxxxxxxxxxxxxxtotaux xxxxxxxxxxxxxxV3.0"
vCommande.FaceId = 0
'If Workbooks.Count = 0 Then
'vCommande.Enabled = True
'Else
'vCommande.Enabled = False
'End If
End Sub

Et-il possible d'activer le sous menu uniquement si un classeur est
ouvert. Si pas de classeur le sous menu reste en gris claire comme le
sous menu "enregistrer sous" quand aucun classeur n'est ouvert.

Merci







Avatar
Marco38
Bonsoir

C'est Ok j'ai trouvé!

c'est dans thisworkbook qu'il faut mettre la procédure :

Dim applicationclass As New AppEventClass
Private Sub workbook_open()
Set applicationclass.Appl = Application
End Sub

en plus de l'autoOpen pour la création du sousmenu à l'ouverture d'Excel.

Merci pour ton aide
--
Marc



Merci pour tes réponses mais cela ne fonctionne pas.

J'ai créer mon module de classe que j'ai appelé AppEventClass

Dedans j'ai copié ton code :
Public WithEvents Appl As Application
Private Sub Appl_NewWorkbook(ByVal Wb As Workbook)
Application.CommandBars("file").Controls("xxxxxxxxx").Enabled = True
End Sub

Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
If Workbooks.Count <> 0 Then
Application.CommandBars("file").Controls("xxxxxxxx").Enabled = True
End If
End Sub

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)
If Workbooks.Count > 1 Then
Application.CommandBars("file").Controls("xxxxxxx").Enabled = True
Else
Application.CommandBars("file").Controls("xxxxxxxx").Enabled = False
End If
End Sub


Dans mon AutoOpen j'ai le code suivant :
Sub auto_open()

Set vCommande =
Application.CommandBars("file").Controls.Add(Type:=msoControlButton, ID:= _
2950, Before:, temporary:=True)
vCommande.OnAction = "afficherformulaireCoriolis"
vCommande.Caption = "xxxxx"
vCommande.FaceId = 0
Set ApplicationClass.Appl = Application
End Sub

J'ai du oublier quelque chose
Merci
Marc



bien sur , il manque le else dans la procédure et le workbooks.count
doit evidemment etre supérieru à 1


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count>1 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
else
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabledúlse
end if

End Sub

A+

bonjour,

2 solutions sont à priori possibles.

solution1 : tu pourrais laisser ton bouton non grisé et au début de ta
procédure onaction de celui-ci mettre une instruction pour controler
s'il existe au moins ouvert du style workbooks.count<>0

solution2: utiliser un evenement de type Application dans un module de
classe de ton xla pour permettre la surveillance d'evenements du style
suivant. Dans ce qui suit dans les procédures du remplaces les msgbox
par if workbooks.count<>

A mettre dans un module de classe appelé p.e AppEventClass
Public WithEvents Appl As Application

Private Sub Appl_NewWorkbook(ByVal Wb As Workbook)

application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true

End Sub


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count<>0 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
end if

End Sub

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)
application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
End Sub

A mettre dans le Workbook_Open de ton xla

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub

A+


Bonsoir,

J'ai le code suivant dans une macro complémentaire qui créer un sous
menu dans le menu fichier:

Sub auto_open()
Set vCommande =
Application.CommandBars("file").Controls.Add(Type:=msoControlButton,
ID:= _
2950, Before:, temporary:=True)
vCommande.OnAction = "afficherformulairexxxxxxxx"
vCommande.Caption = "xxxxxxxxxxxxxxtotaux xxxxxxxxxxxxxxV3.0"
vCommande.FaceId = 0
'If Workbooks.Count = 0 Then
'vCommande.Enabled = True
'Else
'vCommande.Enabled = False
'End If
End Sub

Et-il possible d'activer le sous menu uniquement si un classeur est
ouvert. Si pas de classeur le sous menu reste en gris claire comme le
sous menu "enregistrer sous" quand aucun classeur n'est ouvert.

Merci









Avatar
Marco38
Bonsoir,

Après d'autres tests quand Excel est lancé à partir d'une autre application
qui génère un fichier Excel le menu reste désactivé. Il faut ouvrir avec
Excel un nouveau document pour activer le menu.

Pourquoi les 2 applications (que j'ai testé) qui ouvre Excel avec le
document crée n'active pas le menu?

Merci
--
Marc



bien sur , il manque le else dans la procédure et le workbooks.count
doit evidemment etre supérieru à 1


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count>1 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
else
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabledúlse
end if

End Sub

A+

bonjour,

2 solutions sont à priori possibles.

solution1 : tu pourrais laisser ton bouton non grisé et au début de ta
procédure onaction de celui-ci mettre une instruction pour controler
s'il existe au moins ouvert du style workbooks.count<>0

solution2: utiliser un evenement de type Application dans un module de
classe de ton xla pour permettre la surveillance d'evenements du style
suivant. Dans ce qui suit dans les procédures du remplaces les msgbox
par if workbooks.count<>

A mettre dans un module de classe appelé p.e AppEventClass
Public WithEvents Appl As Application

Private Sub Appl_NewWorkbook(ByVal Wb As Workbook)

application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true

End Sub


Private Sub Appl_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As
Boolean)

if workbooks.count<>0 then
Application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
end if

End Sub

Private Sub Appl_WorkbookOpen(ByVal Wb As Workbook)
application.commandbars("file").controls("xxxxxxxxxxxxxxtotaux
xxxxxxxxxxxxxxV3.0").enabled=true
End Sub

A mettre dans le Workbook_Open de ton xla

Private Sub Workbook_Open()

Set ApplicationClass.Appl = Application

End Sub

A+


Bonsoir,

J'ai le code suivant dans une macro complémentaire qui créer un sous
menu dans le menu fichier:

Sub auto_open()
Set vCommande =
Application.CommandBars("file").Controls.Add(Type:=msoControlButton,
ID:= _
2950, Before:, temporary:=True)
vCommande.OnAction = "afficherformulairexxxxxxxx"
vCommande.Caption = "xxxxxxxxxxxxxxtotaux xxxxxxxxxxxxxxV3.0"
vCommande.FaceId = 0
'If Workbooks.Count = 0 Then
'vCommande.Enabled = True
'Else
'vCommande.Enabled = False
'End If
End Sub

Et-il possible d'activer le sous menu uniquement si un classeur est
ouvert. Si pas de classeur le sous menu reste en gris claire comme le
sous menu "enregistrer sous" quand aucun classeur n'est ouvert.

Merci







Avatar
anonymousA
bonjour,

intéressant. As-tu essayé de mettre des points de passage dans ton
fichier pour savoir ce qui est exécuté et ce qui ne l'est pas ?.
Par ailleurs, quel est le type d'instructions et d'application d'où tu
lances Excel?

A+


Bonsoir,

Après d'autres tests quand Excel est lancé à partir d'une autre application
qui génère un fichier Excel le menu reste désactivé. Il faut ouvrir avec
Excel un nouveau document pour activer le menu.

Pourquoi les 2 applications (que j'ai testé) qui ouvre Excel avec le
document crée n'active pas le menu?

Merci


Avatar
Marco38
Bonsoir,

Qu'appel tu point de passage? Si c'est des arrêts dans le code pour debuguer
ligne à ligne cela est impossible car en fait Excel est lancer par
l'application en cliquant sur un bouton (dans l'application).

L'une concerne un log de gestion active de dette ayant la certification
Microsoft, l'autre est une application finance developper en "Fullweb......"
tournant sour IE.

Merci
--
Marc



bonjour,

intéressant. As-tu essayé de mettre des points de passage dans ton
fichier pour savoir ce qui est exécuté et ce qui ne l'est pas ?.
Par ailleurs, quel est le type d'instructions et d'application d'où tu
lances Excel?

A+


Bonsoir,

Après d'autres tests quand Excel est lancé à partir d'une autre application
qui génère un fichier Excel le menu reste désactivé. Il faut ouvrir avec
Excel un nouveau document pour activer le menu.

Pourquoi les 2 applications (que j'ai testé) qui ouvre Excel avec le
document crée n'active pas le menu?

Merci





Avatar
anonymousA
non ce ne sont pas des points d'arret en raison de ce que tu énonces.
Mais ce sont des signes visibles ( des msgbox p.e ou des inscriptions
dans des cellules particulières ou des variables publiques qui
changent) qui permettent, une fois judicieusement placées dans le
code, de savoir quelles parties du code ont tourné .
Par ailleurs, je ne connais pas evidemment les applications dont tu
parles,dans ma question j'éatis plus intérressé par la manière
d'appeler une instance d'Excel.

A+
Avatar
Marco38
Bonjour,

Après avoir mis des msgbox dans la procédure je me suis appercu que je me
planté dans les conditons qui grise le menu avec les >1 dans
Appl_WorkbookBeforeClose et le Appl_WorkbookOpen . Normalement maintenant
cela devrait fonctionner (je vais encore tester différents cas de figure).
Cela ne dépend donc pas des applications
Merci encore pour ta contribution à mon problème.
@+
--
Marc



non ce ne sont pas des points d'arret en raison de ce que tu énonces.
Mais ce sont des signes visibles ( des msgbox p.e ou des inscriptions
dans des cellules particulières ou des variables publiques qui
changent) qui permettent, une fois judicieusement placées dans le
code, de savoir quelles parties du code ont tourné .
Par ailleurs, je ne connais pas evidemment les applications dont tu
parles,dans ma question j'éatis plus intérressé par la manière
d'appeler une instance d'Excel.

A+