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

Liste des onglets dans une barre menu

22 réponses
Avatar
Apitos
Bonjour,

J'aimerais bien avoir dans mon classeur, une barre menu qui apparait
au passage de la sourie, et qui m'affiche la liste de tout les onglets
de mon classeur.

J'ai trouv=E9 un sujet incomplet sur ce forum, et l'auteur du code
d=E9crit plusieurs problemes non r=E9gl=E9s.

http://groups.google.fr/group/microsoft.public.fr.excel/browse_thread/thread=
/ea628bd72bd1fb01/dadf7d56e283dc64?hl=3Dfr&lnk=3Dgst&q=3Dbarre+onglets+liste=
#dadf7d56e283dc64

Bon j'espere avoir de l'aide sur ce sujet.

Merci =E0 tous.

10 réponses

1 2 3
Avatar
Apitos
Bonsoir,

Une idée, un exemple ... ?

Merci.
Avatar
JB
Bonsoir,

A ma connaissance,il n'existe pas d'événement associé au survol d'une
barre d'outils. Quel avantage de la BO par rapport au formulaire que
j'ai posté ?

JB
On 6 déc, 20:01, Apitos wrote:
Bonsoir,

Une idée, un exemple ... ?

Merci.


Avatar
Apitos
Bonsoir JB,

A ma connaissance,il n'existe pas d'événement associé au survol d'un e
barre d'outils. Quel avantage de la BO par rapport au formulaire que
j'ai posté ?


Je me rappel avoir deja vu un exemple, qui au survol de la souris sur
une BO, fait sortir un menu flottant qui contient des exemples de
fonctions.

La BO est contituée d'un bouton et non pas d'une ComboBox.

Bon tes exemples (UserForm) et BarreFeuilles font largement le
travail, mais j'aimerais simplement avoir le même principe pour lister
mes feuilles.

Merci et @ bientôt.

Salutations.

Avatar
Apitos
Bonsoir,

Je crois que je vais me contenter de ce que m'est proposé.

Salutations
Avatar
Apitos
Bonsoir,

Un peitit problème.

La barre d'outils n'est pas créer, pourquoi ?

'----------------------------------
Sub auto_open()
Dim Barre As CommandBar
On Error Resume Next
'On place le bouton en haut dans la barre menu
Set Barre = CommandBars(1)
Barre.Name = "BarreFeuilles"
Barre.Visible = True
Set Menu = Barre.Controls.Add(msoControlComboBox)
For I = 1 To Sheets.Count
Menu.AddItem Sheets(I).Name
Next
With Menu
.OnAction = "ChoixFeuille"
.Text = "Sélectionner puis choisir"
.Width = 133
End With
End Sub


Sub auto_close()
On Error Resume Next
CommandBars("BarreFeuilles").Delete
End Sub


Sub ChoixFeuille()
Sheets(CommandBars("BarreFeuilles").Controls(1).Text).Select
End Sub
'-------------------

Merci.
Avatar
MichDenis
A ) On Error Resume Next
*** Cette ligne de commande t'empêche de voir
pourquoi ton code ne fonctionne pas ! Avant
d'ajouter cette ligne, il faut savoir pourquoi on
en a de besoin.! Il est préférable de l'ajouter
seulement après que l'on a réussi à faire fonctionner
sa procédure....

B ) Ta grosse erreur : Set Barre = CommandBars(1)
CommandBars(1) n'est pas à proprement une barre d'outils
mais la barre des menus qu'affiche excel dans l'interface de la
feuille de calcul. Il y a quand même quelques différences entre
une barre de menu et une barre d'outils de bouton de commande.

C ) Cette barre de menu d'excel appartient à l'application Excel et elle
sa propriété Name est déjà définie : "Worksheet Menu Bar"....
Ce n'est pas une barre d'outils personnaliser que tu crées mais une
qui appartient à excel... donc, si c'est cela que tu veux, utilise les propriétés
de l'objet.

D ) Si tu enlèves cette ligne de code : Barre.Name = "BarreFeuilles"
Ta procédure va fonctionner et tu va ajouter ton contrôle à la
suite des items du menu déjà existant.







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

Bonsoir,

Un peitit problème.

La barre d'outils n'est pas créer, pourquoi ?

'----------------------------------
Sub auto_open()
Dim Barre As CommandBar
On Error Resume Next
'On place le bouton en haut dans la barre menu
Set Barre = CommandBars(1)
Barre.Name = "BarreFeuilles"
Barre.Visible = True
Set Menu = Barre.Controls.Add(msoControlComboBox)
For I = 1 To Sheets.Count
Menu.AddItem Sheets(I).Name
Next
With Menu
.OnAction = "ChoixFeuille"
.Text = "Sélectionner puis choisir"
.Width = 133
End With
End Sub


Sub auto_close()
On Error Resume Next
CommandBars("BarreFeuilles").Delete
End Sub


Sub ChoixFeuille()
Sheets(CommandBars("BarreFeuilles").Controls(1).Text).Select
End Sub
'-------------------

Merci.
Avatar
Apitos
Bonsoir MichDenis et le forum;

Merci de tes conseils.

Maintenant mon menu est créé après le point d'exclamation de l'aide.

Mais voila, ce menu reste affiché après la fermeture du fichier.

Et à la prochaine exécution, un autre menu similaire vient s'ajouter
après celui qui n'a pas été supprimé.

J'ai un peu essayé de modifier le code de telle façon, qu'il y'a une
vérification au début, de l'existence de mon menu.

Une fois trouvé, il sera supprimé, ensuite on crée un nouveau.

'----------------------------------
Sub auto_open()
Dim Barre As CommandBar
Dim Ctl As Object
'On Error Resume Next
For Each Ctl In CommandBars(1).Controls
If Ctl.TooltipText = "BarreFeuilles" Then
CommandBars(1).Controls(msoControlComboBox).Delete
Exit For
End If
Next Ctl
'On place le bouton en haut dans la barre menu
Set Barre = CommandBars(1)
Barre.Visible = True
Set Menu = Barre.Controls.Add(msoControlComboBox)

For I = 1 To Sheets.Count
Menu.AddItem Sheets(I).Name
Next
With Menu
.OnAction = "ChoixFeuille"
.Text = "Sélectionner puis choisir"
.Width = 133
.TooltipText = "BarreFeuilles"
End With
End Sub


Sub auto_close()
On Error Resume Next
CommandBars("BarreFeuilles").Delete
End Sub


Sub ChoixFeuille()
Sheets(CommandBars("BarreFeuilles").Controls(1).Text).Select
End Sub
'-------------------


Merci.
Avatar
MichDenis
Dans un module standard, tu copies la procédure de
création de ton contrôle et dans le ThisWorkbook, tu copies
ceci : Ton controle va être visible seulement lorsque le
classeur qui contient ces macros est le classeur actif.

'--------------------------------------
Private Sub Workbook_Activate()
On Error Resume Next
Création_Barre_Menu

End Sub
'--------------------------------------
Private Sub Workbook_Deactivate()

On Error Resume Next
'Cette commande remet la barre des menus dans son état
'originel tel qu'elle existait à l'installation d'excel.
Application.CommandBars(1).Reset

'Si tu as des trucs personnalisés que tu veux conserver,
'tu peux utiliser ceci à la place sans toucher aux autres
'commandes personnalisées que tu as ajoutées
Application.CommandBars(1).FindControl(msoControlComboBox).Delete


End Sub
'--------------------------------------

Procédure dans le module :

Sub Création_Barre_Menu()
Dim Barre As CommandBar
Set Barre = Application.CommandBars(1)
Barre.Visible = True
Set Menu = Barre.Controls.Add(msoControlComboBox)
For I = 1 To Sheets.Count
Menu.AddItem Sheets(I).Name
Next
With Menu
.OnAction = "ChoixFeuille"
.Text = "Sélectionner puis choisir"
.Width = 133
End With
End Sub






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

Bonsoir MichDenis et le forum;

Merci de tes conseils.

Maintenant mon menu est créé après le point d'exclamation de l'aide.

Mais voila, ce menu reste affiché après la fermeture du fichier.

Et à la prochaine exécution, un autre menu similaire vient s'ajouter
après celui qui n'a pas été supprimé.

J'ai un peu essayé de modifier le code de telle façon, qu'il y'a une
vérification au début, de l'existence de mon menu.

Une fois trouvé, il sera supprimé, ensuite on crée un nouveau.

'----------------------------------
Sub auto_open()
Dim Barre As CommandBar
Dim Ctl As Object
'On Error Resume Next
For Each Ctl In CommandBars(1).Controls
If Ctl.TooltipText = "BarreFeuilles" Then
CommandBars(1).Controls(msoControlComboBox).Delete
Exit For
End If
Next Ctl
'On place le bouton en haut dans la barre menu
Set Barre = CommandBars(1)
Barre.Visible = True
Set Menu = Barre.Controls.Add(msoControlComboBox)

For I = 1 To Sheets.Count
Menu.AddItem Sheets(I).Name
Next
With Menu
.OnAction = "ChoixFeuille"
.Text = "Sélectionner puis choisir"
.Width = 133
.TooltipText = "BarreFeuilles"
End With
End Sub


Sub auto_close()
On Error Resume Next
CommandBars("BarreFeuilles").Delete
End Sub


Sub ChoixFeuille()
Sheets(CommandBars("BarreFeuilles").Controls(1).Text).Select
End Sub
'-------------------


Merci.
Avatar
Apitos
Bonjour MichDenis,

Merci ça marche maintenant.

Une petite question pour :

'---------
Application.CommandBars(1).FindControl(msoControlComboBox).Delete
'----------

S'il y'a plus d'une ComboBox dans ma barre, comment faire pour
supprimer la bonne ?

Merci.
Avatar
MichDenis
Je n'ai pas testé mais ...

On Error Resume Next
For A = 1 To 5 ' 5 pour 5 combobox
Application.CommandBars(1).FindControl(msoControlComboBox).Delete
Next

Et si tu désires différencier chacun des contrôles "combobox" de ta barre des menus,
lorsque tu crées ces contrôles, chacun de ces contrôles a une propriété "TAG" que
tu peux définir par une expression particulière

Pour ce faire, tu modifies la procédure de création comme ceci :
'---------------------------------------
Sub Création_Barre_Menu()
Dim Barre As CommandBar
Set Barre = Application.CommandBars(1)
Barre.Visible = True
Set Menu = Barre.Controls.Add(msoControlComboBox)
Menu.Tag = "Denis" '< ------ Ligne ajoutée
For I = 1 To Sheets.Count
Menu.AddItem Sheets(I).Name
Next
With Menu
.OnAction = "ChoixFeuille"
.Text = "Sélectionner puis choisir"
.Width = 133
End With
End Sub
'---------------------------------------

Et pour supprimer ce combox de ta barre d'outils
'-------------------------
Application.CommandBars(1).FindControl(, , "Denis").Delete
'-------------------------

Et si tu avais créer plusieurs combobox avec des "Tag" tu pourrais
aussi faire ceci pour personnaliser leur suppression
'----------------------------
Dim Arr
dim Elt as variant
Arr = array("Denis","Combobox2","Apitos")
For each elt in arr
Application.CommandBars(1).FindControl(, , elt).Delete
Next
'----------------------------






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

Bonjour MichDenis,

Merci ça marche maintenant.

Une petite question pour :

'---------
Application.CommandBars(1).FindControl(msoControlComboBox).Delete
'----------

S'il y'a plus d'une ComboBox dans ma barre, comment faire pour
supprimer la bonne ?

Merci.
1 2 3