vba - tester la présence des menus commandbars ajoutés
Le
twinley
Bonjour à tous,
Je crée des menus commandbars dans l'openworkbook.
J'ai vu que parfois l'utilisateur faisait une manip inconnue qui ne
permettait pas de supprimer les menus dans le before_close.
Pour remedier à cela j'aimerai tester à l'ouverture la présence des
trois menus que j'ajoute, et s'ils sont là, les tuer jusqu'a ce qu'il
n'y en ai plus.
En usage normal, j'en crée 3, mais j'ai vu un classeur qui en contenait
9. L'utilisateur a du planter 3 fois.
Voici l'une des trois sub pour supprimer :
Sub SupprMenuFV()
Dim NomBarre$
NomBarre = "FV"
On Error Resume Next
Application.CommandBars(1).Controls(NomBarre).Delete
End Sub
Comment tester la présence des menus que j'ajoute ?
Merci pour l'aide
--
à+twinley
Je crée des menus commandbars dans l'openworkbook.
J'ai vu que parfois l'utilisateur faisait une manip inconnue qui ne
permettait pas de supprimer les menus dans le before_close.
Pour remedier à cela j'aimerai tester à l'ouverture la présence des
trois menus que j'ajoute, et s'ils sont là, les tuer jusqu'a ce qu'il
n'y en ai plus.
En usage normal, j'en crée 3, mais j'ai vu un classeur qui en contenait
9. L'utilisateur a du planter 3 fois.
Voici l'une des trois sub pour supprimer :
Sub SupprMenuFV()
Dim NomBarre$
NomBarre = "FV"
On Error Resume Next
Application.CommandBars(1).Controls(NomBarre).Delete
End Sub
Comment tester la présence des menus que j'ajoute ?
Merci pour l'aide
--
à+twinley

Poser une question

ben ce que tu écris est bon. Il y a quand même quelque chose d'étrange dans
ta demande, car une commandbar avec un nom spécifique ne peut avoir de
doublons, donc ton affaire de 9 commandbars par groupe de 3 , I presume, me
parait suspect.
Par ailleurs, la manip à faire absolument au moment de la création de ta
commandbar c'est d'écrire toujours une instruction préalable de destruction
de celle-ci
On error resume next
Application.commanbars("Twinley1").delete
set Mybar=application.commandbars.add
Mybar.name="Twinley1"
Ce faisant,tu seras certain avant création d'avoir détruit ta commandbar,
quoiqu'il ait pu se passer par ailleurs
A+
merci pour l'aide
Je réexplique mieux.
Je crée un menu trimestre, un menu mois, un menu semaine.
Si l'utilisateur plante ou fait une manip improbable, qu'il ne peut pas
décrire, je me retrouve avec 9 menus (3 fois : trim, mois, sem). Je
suppose qu'il ne passe pas dans beforeclose de thisworkbook (là ou je
tue les menus).
Je me disais que plutôt de faire une boucle de 5 fois "delete de chaque
menu avec on error", j'aimerai bien identifier le nombre de menus
oubliés à l'ouverture, les tuer tous et en recréer un groupe de trois.
Comme cela je couvre tous les cas de figure (6 menus oubliés, 9, 12 etc.)
Voici un exemple pour le menu trimestre, creatmenutrim , supprmenutrimok
(ce que j'avais et qui fonctionne), supprmenutrim (ce que j'ai créer
selon ta façon (et qui ne fait rien).
Si je crée 4 menus trim, je peux lancer une boucle qui en tue 5 puis je
crée. Mais je vais bien tomber un jour sur 6 menus qui trainent.
Sub CreateMenuTrim()
Dim MenuTrimestre As CommandBarPopup
On Error Resume Next
With Application.CommandBars(1)
Set MenuTrimestre = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
MenuTrimestre.Caption = "Trimestre"
'Creation des sous-menus
With MenuTrimestre.Controls.Add(msoControlButton)
.Caption = "Trim1"
.OnAction = "montretrim1"
End With
With MenuTrimestre.Controls.Add(msoControlButton)
.Caption = "Trim2"
.OnAction = "montretrim2"
End With
With MenuTrimestre.Controls.Add(msoControlButton)
.Caption = "Trim3"
.OnAction = "montretrim3"
End With
With MenuTrimestre.Controls.Add(msoControlButton)
.Caption = "Trim4"
.OnAction = "montretrim4"
End With
With MenuTrimestre.Controls.Add(msoControlButton)
.Caption = "Tout"
.OnAction = "ShowAllSh"
End With
End Sub
Sub SupprMenuTrimok()
Dim NomBarre$
NomBarre = "Trimestre"
On Error Resume Next
Application.CommandBars(1).Controls(NomBarre).Delete
End Sub
Sub SupprMenuTrim()
Dim NomBarre$
'NomBarre = "Trimestre"
On Error Resume Next
Application.CommandBars("Trimestre").Delete
End Sub
Sub aA()
Dim Mybar
On Error Resume Next
Application.commanbars("Trimestre").Delete
' Set Mybar = Application.CommandBars.Add
' Mybar.Name = "Twinley1"
End Sub
Pour présenter mon idée, mais ce code ne marche pas :
Sub SupprMenuTrimPasok()
Dim NomBarre$
NomBarre = "Trimestre"
On Error Resume Next
While CommandBars(1).Controls(NomBarre) = "Trimestre"
Application.CommandBars(1).Controls(NomBarre).Delete
Wend
End Sub
ou alors touver le nombre de fois que j'ai le menu Trimestre et je les
tue. Mais je ne trouve pas de count.
voilà,voilà, j'espère être plus clair.
à+twinley
anonymousA wrote:
commandes mais un commandcontrolbutton sur une commandbar ( en l'occurence la
commandbar 1 ou worksheetmenubar), dont acte !!!.
Nonobstant, la suppression des controles dans plusieurs commandbars ou sous
menu d'ailleurs , s'il s'appellent par le même nom , est possible en écrivant
on error resume next
Set CollControls = Application.CommandBars.FindControls(ID:=1)
For I = CollControls.Count To 1 Step -1
If CollControls(I).Caption = "Trimestre" Then CollControls(I).Delete
Next
les controles non built-in ont un ID de 1
j'espère avoir répondu à ta question désormais.
A+
grâce à Papou
Sub VirerMonMenu()
Dim ctr
For Each ctr In Application.CommandBars(1).Controls
If Not ctr.BuiltIn And ctr.Caption = "Trimestre" Then
ctr.Delete
End If
Next
End Sub
il me vire bien 4 menus trimestre si j'en ai 4...
Par contre aA, tu avais mis le doigt sur le point faible. Empécher la
création d'un deuxième menu.
j'ai donc ajouté ".Controls("Trimestre").Delete"
With Application.CommandBars(1)
.Controls("Trimestre").Delete
Set MenuTrimestre = .Controls.Add(Type:=msoControlPopup,
before:=.Controls.Count - 1)
End With
Bon je suis bordé sur ce coup là, pas très rapide, mais j'ai fais le tour...
encore merci
à+twinley
twinley wrote:
J'aime bien l'idée de partir à l'envers dans la boucle, c'est surement
plus rapide que celle de Papou qui inclu le test de built-in à chaque
fois. Là on ne parcours que les menus perso.
J'étais pas près d'inventer ce truc.
Bonne soirée et merci.
à+twinley
anonymousA wrote: