OVH Cloud OVH Cloud

Menu Onglet

11 réponses
Avatar
Papyty
Bonsoir @ tous;
Suite à différentes questions récentes pour naviguer facilement dans un
classeur comportants un nombre important d'onglets je vous propose une
nouvelle soluce avec l'ajout d'un combobox dans le menu standard.

Dans ThisWorkbook:
____________________________________________
Private Sub Workbook_Activate()
ComboOnglets
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
SupComboOnglets
End Sub

Private Sub Workbook_Deactivate()
SupComboOnglets
End Sub

Private Sub Workbook_NewSheet(ByVal Sh As Object)
SupComboOnglets
ComboOnglets
End Sub

Private Sub Workbook_Open()
ComboOnglets
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim MyBar As CommandBarComboBox
Set MyBar = Application.CommandBars("standard"). _
Controls("Onglets")
With MyBar
.Clear
For i = 1 To Worksheets.Count
If Sheets(i).Visible = True Then
.AddItem Sheets(i).Name
End If
Next i
.Text = ActiveSheet.Name
End With
End Sub
_______________________________________________________
Dans un module standard:

Private MyNewBar As New ComboBoxSheets

Sub ComboOnglets()
Dim MyBar As CommandBarComboBox
Set MyBar = Application.CommandBars("standard"). _
Controls.Add(msoControlComboBox)
With MyBar
.Caption = "Onglets"
For i = 1 To Worksheets.Count
If Sheets(i).Visible = True Then
.AddItem Sheets(i).Name
End If
Next i
.DropDownLines = 50
.DropDownWidth = -1
.ListHeaderCount = 0
.Text = ActiveSheet.Name
.Width = 100
End With
MyNewBar.SynchroBox MyBar
MyBar.Visible = True
End Sub

Sub SupComboOnglets()
On Error Resume Next
Application.CommandBars("standard"). _
Controls("Onglets").Delete
End Sub
_________________________________________________________
Dans un module de classe à nommer ComboBoxSheets:

Private WithEvents ComboBoxSheets As Office.CommandBarComboBox

Private Sub Class_Terminate()
Set ComboBoxSheets = Nothing
End Sub

Private Sub ComboBoxSheets_Change(ByVal Ctrl As Office.CommandBarComboBox)
Dim Onglet As String
Onglet = Ctrl.Text
Sheets(Onglet).Select
End Sub

Sub SynchroBox(box As CommandBarComboBox)
Set ComboBoxSheets = box
End Sub
____________________________________________________________

Voili si ça peut servir
--
@+
Thierry
--
@+
Thierry

10 réponses

1 2
Avatar
isabelle
bonjour Papyty,

j'obtiens l'erreur 5 ( Argument ou appel de procédure incorrect) sur
Set MyBar = Application.CommandBars("Standard"). _
Controls("Onglets")

j'ai bien mis name = ComboBoxSheets dans les propriétés du module de
classe
voie tu d'ou ça peux provenir ?

isabelle


Bonsoir @ tous;
Suite à différentes questions récentes pour naviguer facilement dans un
classeur comportants un nombre important d'onglets je vous propose une
nouvelle soluce avec l'ajout d'un combobox dans le menu standard.

Dans ThisWorkbook:
____________________________________________
Private Sub Workbook_Activate()
ComboOnglets
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
SupComboOnglets
End Sub

Private Sub Workbook_Deactivate()
SupComboOnglets
End Sub

Private Sub Workbook_NewSheet(ByVal Sh As Object)
SupComboOnglets
ComboOnglets
End Sub

Private Sub Workbook_Open()
ComboOnglets
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim MyBar As CommandBarComboBox
Set MyBar = Application.CommandBars("standard"). _
Controls("Onglets")
With MyBar
.Clear
For i = 1 To Worksheets.Count
If Sheets(i).Visible = True Then
.AddItem Sheets(i).Name
End If
Next i
.Text = ActiveSheet.Name
End With
End Sub
_______________________________________________________
Dans un module standard:

Private MyNewBar As New ComboBoxSheets

Sub ComboOnglets()
Dim MyBar As CommandBarComboBox
Set MyBar = Application.CommandBars("standard"). _
Controls.Add(msoControlComboBox)
With MyBar
.Caption = "Onglets"
For i = 1 To Worksheets.Count
If Sheets(i).Visible = True Then
.AddItem Sheets(i).Name
End If
Next i
.DropDownLines = 50
.DropDownWidth = -1
.ListHeaderCount = 0
.Text = ActiveSheet.Name
.Width = 100
End With
MyNewBar.SynchroBox MyBar
MyBar.Visible = True
End Sub

Sub SupComboOnglets()
On Error Resume Next
Application.CommandBars("standard"). _
Controls("Onglets").Delete
End Sub
_________________________________________________________
Dans un module de classe à nommer ComboBoxSheets:

Private WithEvents ComboBoxSheets As Office.CommandBarComboBox

Private Sub Class_Terminate()
Set ComboBoxSheets = Nothing
End Sub

Private Sub ComboBoxSheets_Change(ByVal Ctrl As Office.CommandBarComboBox)
Dim Onglet As String
Onglet = Ctrl.Text
Sheets(Onglet).Select
End Sub

Sub SynchroBox(box As CommandBarComboBox)
Set ComboBoxSheets = box
End Sub
____________________________________________________________

Voili si ça peut servir
--
@+
Thierry
--
@+
Thierry


Avatar
AV
Un problème me semble-t-il :

Dans le ThisWorkbook, Workbook_Activate et Workbook_Open lancent tout deux la
macro de création de la Combo --> création de 2 comboBx

AV
Avatar
Papyty
Salut @ Tous,

AV a écrit:
Un problème me semble-t-il :

Dans le ThisWorkbook, Workbook_Activate et Workbook_Open lancent tout
deux la

macro de création de la Combo --> création de 2 comboBx

AV


Effectivement Alain il faut donc supprimer Workbook_Open
Merci de la remarque

--
@+
Thierry

Avatar
Papyty
Salut @ Tous,
isabelle a écrit:
bonjour Papyty,

j'obtiens l'erreur 5 ( Argument ou appel de procédure incorrect) sur
Set MyBar = Application.CommandBars("Standard"). _
Controls("Onglets")

j'ai bien mis name = ComboBoxSheets dans les propriétés du module de
classe
voie tu d'ou ça peux provenir ?


Bonjour Isabelle
J'ai oublié de précisé testé sur excell 2000
Est ce que c'est ta version?

--
@+
Thierry

Avatar
Papyty
Salut @ Tous, isabelle a écrit:
bonjour Papyty,

j'obtiens l'erreur 5 ( Argument ou appel de procédure incorrect) sur
Set MyBar = Application.CommandBars("Standard"). _
Controls("Onglets")


J'ai pu reproduire l'erreur qui se produit lorsque l'on change de feuille
lorsque le combobox n'existe pas.
donc modifier

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim MyBar As CommandBarComboBox
On Error Resume Next
Application.CommandBars("Standard"). _
Controls("Onglets").Visible = True
If Error <> 0 Then Exit Sub
Set MyBar = Application.CommandBars("Standard"). _
Controls("Onglets")
With MyBar
.Clear
For i = 1 To Worksheets.Count
If Sheets(i).Visible = True Then
.AddItem Sheets(i).Name
End If
Next i
.Text = Sh.Name
End With
End Sub

Est-ce que ça marche?

--
@+
Thierry

Avatar
Emcy
Salut,

j'ai modifier ta macro de façon a pouvoir l'étendre à
tous les classeur ouvert. Je pensais la mettre sur
ExeclDownload, qu'en penses-tu ? (je peux ?)

-----Message d'origine-----
Salut @ Tous,

AV a écrit:
Un problème me semble-t-il :

Dans le ThisWorkbook, Workbook_Activate et
Workbook_Open lancent tout


deux la
macro de création de la Combo --> création de 2 comboBx

AV


Effectivement Alain il faut donc supprimer Workbook_Open
Merci de la remarque

--
@+
Thierry
.




Avatar
Papyty
Salut @ Tous,
Emcy a écrit:
j'ai modifier ta macro de façon a pouvoir l'étendre à
tous les classeur ouvert.Je pensais la mettre sur
ExeclDownload, qu'en penses-tu ? (je peux ?)


Bien sure que tu peux, d'ailleur j'irais télécharger tes modifications ;-))

--
@+
Thierry

Avatar
Emcy
En général, ça met environs 1 à 2 semaine pour que le
site soit mis à jour

-----Message d'origine-----
Salut @ Tous,
Emcy a écrit:
j'ai modifier ta macro de façon a pouvoir l'étendre à
tous les classeur ouvert.Je pensais la mettre sur
ExeclDownload, qu'en penses-tu ? (je peux ?)


Bien sure que tu peux, d'ailleur j'irais télécharger tes
modifications ;-))


--
@+
Thierry
.




Avatar
isabelle
bonjour Papyty,

j'ai la version xl2002,
j'ai modifié le Workbook_SheetActivate, là je n'ai plus d'erreur mais
aucune combobox dans le menu
c'est bien sur la barre de menu standard qu'il doit être ?
isabelle


Salut @ Tous, isabelle a écrit:
bonjour Papyty,

j'obtiens l'erreur 5 ( Argument ou appel de procédure incorrect) sur
Set MyBar = Application.CommandBars("Standard"). _
Controls("Onglets")


J'ai pu reproduire l'erreur qui se produit lorsque l'on change de feuille
lorsque le combobox n'existe pas.
donc modifier

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim MyBar As CommandBarComboBox
On Error Resume Next
Application.CommandBars("Standard"). _
Controls("Onglets").Visible = True
If Error <> 0 Then Exit Sub
Set MyBar = Application.CommandBars("Standard"). _
Controls("Onglets")
With MyBar
.Clear
For i = 1 To Worksheets.Count
If Sheets(i).Visible = True Then
.AddItem Sheets(i).Name
End If
Next i
.Text = Sh.Name
End With
End Sub

Est-ce que ça marche?

--
@+
Thierry



Avatar
Papyty
Salut @ Tous, isabelle a écrit:
bonjour Papyty,

j'ai la version xl2002,
j'ai modifié le Workbook_SheetActivate, là je n'ai plus d'erreur mais
aucune combobox dans le menu
c'est bien sur la barre de menu standard qu'il doit être ?
isabelle


Oui Isabelle mais la combobox est crée à l'ouverture du fichier.
Si tu fait le test sur un fichier sans le fermer et l'ouvrir lance la
macro ComboOnglets pour créer la combobox.


--
@+
Thierry

1 2