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

VBA - .FindControl(Tag:=cTag).Delete pour tuer un menu CommandBarPopup

11 réponses
Avatar
twinley
Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors que
celui-ci c'est CommandBarPopup. Je remettrai la somlution dans l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !

--
à+twinley

10 réponses

1 2
Avatar
anonymousA
re,

je n'ai jamais essayé la recherche par le critère tag. Ceci dit quand je
lis ton code il me semble qu'il y a une incohérence.

With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With


moi, je comprends le code comme ça : si le résultat de la recherche du
controle dont le tag est égal à ctag est infructueux, alors détruire le
conrole en question.

Mais comment Excel pourrait-il détruire un controle qu'il n'a pas trouvé
et donc qui n'existe pas ?

Par contre si on écrit
If not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If

alors là ca parait plus logique.

Qu'en penses-tu ?

A+



Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors que
celui-ci c'est CommandBarPopup. Je remettrai la somlution dans l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !



Avatar
twinley
.../...

tu as raison, c'est le test d'origine, mais comme je ne passais pas
dedans j'ai viré le Not, pour voir si l'action se faisait.
Mais je n'arrive pas à la faire tourner.

J'ai un autre code qui est plus compréhensible pour moi

Sub Suppr_Menu1()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
Set MenuMois = Application.CommandBars(NomBarre)
''''On Error GoTo 0
If Not MenuMois Is Nothing Then MenuMois.Delete
End Sub

Dans celui-là c'est set MenuMois qui ne s'initialise pas, il n'y a
jamais de valeur dedans.
Le On error GoTo 0 je ne vois pas à quoi ça sert, alors je l'écarte pour
l'instant.
Je n'arrive pas à mettre quelquechose dans Set MenuMois...

L'aide de commandbars donne un For Next pour enlever toutes les bars
mais il ne se passe rien non plus. J'en ai qu'une et elle s'accroche, je
vais la renommer "Morbach".

Pas facile ces menus...

Je met sous bâche pour ce soir. Bonne nuit et merci pour l'aide.

à+twinley

re,

je n'ai jamais essayé la recherche par le critère tag. Ceci dit quand je
lis ton code il me semble qu'il y a une incohérence.

With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With


moi, je comprends le code comme ça : si le résultat de la recherche du
controle dont le tag est égal à ctag est infructueux, alors détruire le
conrole en question.

Mais comment Excel pourrait-il détruire un controle qu'il n'a pas trouvé
et donc qui n'existe pas ?

Par contre si on écrit
If not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If

alors là ca parait plus logique.

Qu'en penses-tu ?

A+




Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors
que celui-ci c'est CommandBarPopup. Je remettrai la somlution dans
l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !





Avatar
anonymousA
re,

je crois que pour tu comprennes mieux, il faut que tu reviennes au
modèle d'objet d'EXcel. Sous l'objet Application, il existe l'objet
Commandbars qui est une collection de commandbar( il y en a 94).
L'objet commandbars est hiérarchique de la collection
CommandbarControls collection contenant tous les controles ( il y en a a
peu près 1700) représentés par les objets commanbarControl dont les
types sont définies dans l'aide de VBA ( à la section
CommandBarcontrol)et par des objets CommandbarButton, CommandbarCombobox
et CommandbarPopup lorsqu'on veut utiliser des controles non
intégrés.Ceci dit les propriétes et méthodes des 3 controles précédents
sont les mêmes que cellles des objets commanbarControl.

En conséquence, quand tu veux créer ou supprimmer quelquechose, il faut
que ce quelque chose soit déterminé comme un objet d'une collection
auquel tu as fait référence dans ta déclaration de variable.
Donc écrire Dim MenuMois As CommandBarPopup et ensuite écrire Set
MenuMois = Application.CommandBars(NomBarre)n'a pas de sens car c'est
défnir comme un objet commanbar ce que tu as déclaré (NomBArre) comme un
commanbarPopup.
Ensuite si tu détruire quelquechose, soit tu veux atteindre un controle
donné et auquel cas il faudra te lu nommes ou que tu le recherches par
une boucle for dans l'ensemble des commanbars puis tu le détruiras ensuite,
soit tu cherches à virer toute une barre de commande et donc forcément
tous ses controles fils et il te faudra la nommer puis utiliser .delete

Je sais que c'est un peu ardu. Ceci dit, s'il y a un sujet régulièrement
traité et bien traité sur plein de sites sur Excel, c'est bien celui-là.

Allez, dodo, maintenant.

A+

.../...

tu as raison, c'est le test d'origine, mais comme je ne passais pas
dedans j'ai viré le Not, pour voir si l'action se faisait.
Mais je n'arrive pas à la faire tourner.

J'ai un autre code qui est plus compréhensible pour moi

Sub Suppr_Menu1()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
Set MenuMois = Application.CommandBars(NomBarre)
''''On Error GoTo 0
If Not MenuMois Is Nothing Then MenuMois.Delete
End Sub

Dans celui-là c'est set MenuMois qui ne s'initialise pas, il n'y a
jamais de valeur dedans.
Le On error GoTo 0 je ne vois pas à quoi ça sert, alors je l'écarte pour
l'instant.
Je n'arrive pas à mettre quelquechose dans Set MenuMois...

L'aide de commandbars donne un For Next pour enlever toutes les bars
mais il ne se passe rien non plus. J'en ai qu'une et elle s'accroche, je
vais la renommer "Morbach".

Pas facile ces menus...

Je met sous bâche pour ce soir. Bonne nuit et merci pour l'aide.

à+twinley


re,

je n'ai jamais essayé la recherche par le critère tag. Ceci dit quand
je lis ton code il me semble qu'il y a une incohérence.

With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With


moi, je comprends le code comme ça : si le résultat de la recherche du
controle dont le tag est égal à ctag est infructueux, alors détruire
le conrole en question.

Mais comment Excel pourrait-il détruire un controle qu'il n'a pas
trouvé et donc qui n'existe pas ?

Par contre si on écrit
If not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If

alors là ca parait plus logique.

Qu'en penses-tu ?

A+




Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors
que celui-ci c'est CommandBarPopup. Je remettrai la somlution dans
l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !







Avatar
twinley
Bonjour anonymousA

J'ai lu avec attention ton speech magistral sur l'objet commandbar et la
théorie qui l'accompagne. Je suis bien conscient de mes lacunes et ce
forum est une méthode douce pour apprendre grâce à votre générosité sur
le savoir.
Même l'Intellisense n'est pas aisé à utiliser au début. On est en
aveugle. Mais à force de lire des posts et à triptouiller des subs,
certes on passe à côté de subtillités, mais les choses rentrent. De plus
l'informatique est cruelle car quand on bute sur quelque chose, et qu'on
arrive à le contourner, tu peux être sur que le machin à Pb rejaillira
et là il faudra bien prendre le problème à bras le corps.

Merci pour le recentrage. Nous, les débutants, avons tous le défaut de
vouloir la solution avant de comprendre la théorie.

à+twinley

re,

je crois que pour tu comprennes mieux, il faut que tu reviennes au
modèle d'objet d'EXcel. Sous l'objet Application, il existe l'objet
Commandbars qui est une collection de commandbar( il y en a 94).
L'objet commandbars est hiérarchique de la collection
CommandbarControls collection contenant tous les controles ( il y en a a
peu près 1700) représentés par les objets commanbarControl dont les
types sont définies dans l'aide de VBA ( à la section
CommandBarcontrol)et par des objets CommandbarButton, CommandbarCombobox
et CommandbarPopup lorsqu'on veut utiliser des controles non
intégrés.Ceci dit les propriétes et méthodes des 3 controles précédents
sont les mêmes que cellles des objets commanbarControl.

En conséquence, quand tu veux créer ou supprimmer quelquechose, il faut
que ce quelque chose soit déterminé comme un objet d'une collection
auquel tu as fait référence dans ta déclaration de variable.
Donc écrire Dim MenuMois As CommandBarPopup et ensuite écrire Set
MenuMois = Application.CommandBars(NomBarre)n'a pas de sens car c'est
défnir comme un objet commanbar ce que tu as déclaré (NomBArre) comme un
commanbarPopup.
Ensuite si tu détruire quelquechose, soit tu veux atteindre un controle
donné et auquel cas il faudra te lu nommes ou que tu le recherches par
une boucle for dans l'ensemble des commanbars puis tu le détruiras ensuite,
soit tu cherches à virer toute une barre de commande et donc forcément
tous ses controles fils et il te faudra la nommer puis utiliser .delete

Je sais que c'est un peu ardu. Ceci dit, s'il y a un sujet régulièrement
traité et bien traité sur plein de sites sur Excel, c'est bien celui-là.

Allez, dodo, maintenant.

A+


.../...

tu as raison, c'est le test d'origine, mais comme je ne passais pas
dedans j'ai viré le Not, pour voir si l'action se faisait.
Mais je n'arrive pas à la faire tourner.

J'ai un autre code qui est plus compréhensible pour moi

Sub Suppr_Menu1()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
Set MenuMois = Application.CommandBars(NomBarre)
''''On Error GoTo 0
If Not MenuMois Is Nothing Then MenuMois.Delete
End Sub

Dans celui-là c'est set MenuMois qui ne s'initialise pas, il n'y a
jamais de valeur dedans.
Le On error GoTo 0 je ne vois pas à quoi ça sert, alors je l'écarte
pour l'instant.
Je n'arrive pas à mettre quelquechose dans Set MenuMois...

L'aide de commandbars donne un For Next pour enlever toutes les bars
mais il ne se passe rien non plus. J'en ai qu'une et elle s'accroche,
je vais la renommer "Morbach".

Pas facile ces menus...

Je met sous bâche pour ce soir. Bonne nuit et merci pour l'aide.

à+twinley


re,

je n'ai jamais essayé la recherche par le critère tag. Ceci dit quand
je lis ton code il me semble qu'il y a une incohérence.

With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With


moi, je comprends le code comme ça : si le résultat de la recherche
du controle dont le tag est égal à ctag est infructueux, alors
détruire le conrole en question.

Mais comment Excel pourrait-il détruire un controle qu'il n'a pas
trouvé et donc qui n'existe pas ?

Par contre si on écrit
If not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If

alors là ca parait plus logique.

Qu'en penses-tu ?

A+




Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors
que celui-ci c'est CommandBarPopup. Je remettrai la somlution dans
l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !









Avatar
twinley
Après bien des années à courir l'Univers VBA... twinley, de ses petits
yeux rougis et de ses doigts qui ont trop saigné sur les claviers...
à enfin commis ce code avec l'aide d'anonymousA, Pounet et
l'incommensurable support de tout le forum (FS, FxM, Fauconnier avec
Google qui est votre ami ... qu'ils disent ! )

Création d'un menu Mois avec 4 sous-menus
Suppression du menu Mois

Sub CreateMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub Suppr_Menu2()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
With Application.CommandBars(1) ' (1) ou ("Worksheet Menu Bar")
Set MenuMois = .Controls(NomBarre)
If Not MenuMois Is Nothing Then .Controls(NomBarre).Delete
End With
End Sub
à+twinley



Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors que
celui-ci c'est CommandBarPopup. Je remettrai la somlution dans l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !



Avatar
twinley
oh lala, j'ai oublié de remercier Youki...

à+twinley

Après bien des années à courir l'Univers VBA... twinley, de ses petits
yeux rougis et de ses doigts qui ont trop saigné sur les claviers...
à enfin commis ce code avec l'aide d'anonymousA, Pounet et
l'incommensurable support de tout le forum (FS, FxM, Fauconnier avec
Google qui est votre ami ... qu'ils disent ! )

Création d'un menu Mois avec 4 sous-menus
Suppression du menu Mois

Sub CreateMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub Suppr_Menu2()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
With Application.CommandBars(1) ' (1) ou ("Worksheet Menu Bar")
Set MenuMois = .Controls(NomBarre)
If Not MenuMois Is Nothing Then .Controls(NomBarre).Delete
End With
End Sub
à+twinley




Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors
que celui-ci c'est CommandBarPopup. Je remettrai la somlution dans
l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !





Avatar
anomymousA
re,

content de voir que tu es arrivé au bout.

A+


Après bien des années à courir l'Univers VBA... twinley, de ses petits
yeux rougis et de ses doigts qui ont trop saigné sur les claviers...
à enfin commis ce code avec l'aide d'anonymousA, Pounet et
l'incommensurable support de tout le forum (FS, FxM, Fauconnier avec
Google qui est votre ami ... qu'ils disent ! )

Création d'un menu Mois avec 4 sous-menus
Suppression du menu Mois

Sub CreateMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub Suppr_Menu2()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
With Application.CommandBars(1) ' (1) ou ("Worksheet Menu Bar")
Set MenuMois = .Controls(NomBarre)
If Not MenuMois Is Nothing Then .Controls(NomBarre).Delete
End With
End Sub
à+twinley



Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors que
celui-ci c'est CommandBarPopup. Je remettrai la somlution dans l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !






Avatar
Michel Gaboly
Bravo twinley ;-))

Par pur sadisme, une façon bien + simple de supprimer le menu :

Cub SuppMenu()
On Error Resume Next
Application.CommandBars(1).Controls("Mois").Delete
End Sub

A partir du moment où tu mets en place la gestion d'erreur (On Error
Resume Next), le test "If Not Menu Is Nothing ..." est superflu.


Une remarque également : ne serait-il pas + logique d'appeler le menu
"Trim" ou "Trimestre" ?


Après bien des années à courir l'Univers VBA... twinley, de ses petits
yeux rougis et de ses doigts qui ont trop saigné sur les claviers...
à enfin commis ce code avec l'aide d'anonymousA, Pounet et
l'incommensurable support de tout le forum (FS, FxM, Fauconnier avec
Google qui est votre ami ... qu'ils disent ! )

Création d'un menu Mois avec 4 sous-menus
Suppression du menu Mois

Sub CreateMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub Suppr_Menu2()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
With Application.CommandBars(1) ' (1) ou ("Worksheet Menu Bar")
Set MenuMois = .Controls(NomBarre)
If Not MenuMois Is Nothing Then .Controls(NomBarre).Delete
End With
End Sub
à+twinley




Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors
que celui-ci c'est CommandBarPopup. Je remettrai la somlution dans
l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !





--
Cordialement,

Michel Gaboly
www.gaboly.com


Avatar
twinley
Bonjour Michel

et quelques astuces de plus à archiver. Merci.

Oui, bien sur, les intitulés sont douteux. :-[

En fait Youki m'avait aidé pour un affichage des mois par groupes avec
Janv fev mars etc. et cela m'a ouvert l'horizon.
Puis après j'ai dérivé pour faire le menu trim en m'attachant à la
fonctionnalité, et en faisant l'impasse sur les intitulés. Il y a aura
deux menus : Mois et Trimestre.

C'est l'émotion... ! J'étais tout à ma joie d'avoir dénoué le truc.

:-D

à+twinley

Bravo twinley ;-))

Par pur sadisme, une façon bien + simple de supprimer le menu :

Cub SuppMenu()
On Error Resume Next
Application.CommandBars(1).Controls("Mois").Delete
End Sub

A partir du moment où tu mets en place la gestion d'erreur (On Error
Resume Next), le test "If Not Menu Is Nothing ..." est superflu.


Une remarque également : ne serait-il pas + logique d'appeler le menu
"Trim" ou "Trimestre" ?



Après bien des années à courir l'Univers VBA... twinley, de ses petits
yeux rougis et de ses doigts qui ont trop saigné sur les claviers...
à enfin commis ce code avec l'aide d'anonymousA, Pounet et
l'incommensurable support de tout le forum (FS, FxM, Fauconnier avec
Google qui est votre ami ... qu'ils disent ! )

Création d'un menu Mois avec 4 sous-menus
Suppression du menu Mois

Sub CreateMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub Suppr_Menu2()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
With Application.CommandBars(1) ' (1) ou ("Worksheet Menu Bar")
Set MenuMois = .Controls(NomBarre)
If Not MenuMois Is Nothing Then .Controls(NomBarre).Delete
End With
End Sub
à+twinley




Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors
que celui-ci c'est CommandBarPopup. Je remettrai la somlution dans
l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !









Avatar
twinley
8-)

oui moi aussi. C'est assez formateur quand on se casse la tête.

Merci pour l'aide et tes commentaires.

à+twinley

re,

content de voir que tu es arrivé au bout.

A+



Après bien des années à courir l'Univers VBA... twinley, de ses petits
yeux rougis et de ses doigts qui ont trop saigné sur les claviers...
à enfin commis ce code avec l'aide d'anonymousA, Pounet et
l'incommensurable support de tout le forum (FS, FxM, Fauconnier avec
Google qui est votre ami ... qu'ils disent ! )

Création d'un menu Mois avec 4 sous-menus
Suppression du menu Mois

Sub CreateMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub Suppr_Menu2()
Dim NomBarre$, MenuMois As CommandBarPopup
NomBarre = "Mois"
On Error Resume Next
With Application.CommandBars(1) ' (1) ou ("Worksheet Menu Bar")
Set MenuMois = .Controls(NomBarre)
If Not MenuMois Is Nothing Then .Controls(NomBarre).Delete
End With
End Sub
à+twinley



Bonsoir à tous,

J'y suis presque grâce à anonymousA et Pounet.

Je reprend un nouveau fil car l'autre était orienté CommandBar alors que
celui-ci c'est CommandBarPopup. Je remettrai la somlution dans l'autre fil.

Il suffit de glisser -lacher pour l'enlever mais en VBA, je coince.
J'ai une err 91 qui traine lorsque je veux enlever le menu Mois,
sur la ligne : .FindControl(Tag:=cTag).Delete

Voici tout le code qui est dans un module standart

Option Explicit
Const cTag As String = "Mois"

Sub CreerMenuMois()
Dim MenuMois As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuMois = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuMois.Caption = "Mois"
'Creation des sous-menus
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "Macro1"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "Macro2"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro3"
End With
With MenuMois.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "Macro4"
End With
End Sub

Sub SupprimerMenuMois()
With Application.CommandBars
If .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub



Merci à toute âme charitable qui me supprimera cette err 91 !








1 2