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
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
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
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
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
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
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
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
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
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
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 .
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
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 .
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
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
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
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
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.
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.