OVH Cloud OVH Cloud

sélections d'onglets à partir d'une liste déroulante

20 réponses
Avatar
ddh
Bonjour =E0 tous

Sous XP et Excel 2002, je voudrais ouvrir les feuilles=20
d'un classeur en utilisant une zone de liste d=E9roulante=20
de la barre d'outils "formulaire". Je voudrais utiliser=20
cette fa=E7on au lieu de celle qui consiste habituellement=20
=E0 cliquer sur l'onglet. Mon but est par la suite de ne=20
plus faire appara=EEtre les onglets du classeur.

Est-il possible de la faire et si oui de quelles fa=E7ons?

Merci pour vos r=E9ponses

PS: c'est mon premier message dans le forum. J'esp=E8re que=20
j'ai respect=E9 la charte. Si ce n'est pas le cas,=20
n'h=E9sitez pas =E0 me le dire

10 réponses

1 2
Avatar
garnote
Salut ddh,

Peut-être un début de commencement de solution :

En A1:A3, j'ai écrit Feuil1, Feuil2 et Feuil3

Format de contrôle :
Plage d'entrée : $A$1:$A$3
Cellule liée : $B$1

ET

Sub Zonedeliste1_QuandChangement()
i = [B1]
Worksheets(i).Activate
End Sub

Serge



"ddh" a écrit dans le message de news:
098801c3bb75$c1c49700$
Bonjour à tous

Sous XP et Excel 2002, je voudrais ouvrir les feuilles
d'un classeur en utilisant une zone de liste déroulante
de la barre d'outils "formulaire". Je voudrais utiliser
cette façon au lieu de celle qui consiste habituellement
à cliquer sur l'onglet. Mon but est par la suite de ne
plus faire apparaître les onglets du classeur.

Est-il possible de la faire et si oui de quelles façons?

Merci pour vos réponses

PS: c'est mon premier message dans le forum. J'espère que
j'ai respecté la charte. Si ce n'est pas le cas,
n'hésitez pas à me le dire
Avatar
Papyty
Bonjour @ tous et à ddh :
Bienvenu sur MPFE

d'un classeur en utilisant une zone de liste déroulante
de la barre d'outils "formulaire". Je voudrais utiliser


Je peux te proposer une soluce mais avec une liste dans la barre de
commande standard si ça peux te convenir.

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_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
_______________________________________________________
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
______________________________________________________________

Ensuite il suffit de fermer et ouvrir le fichier pour activer ce menu
--
@+
Thierry
05/12/2003 23:23:05

Avatar
Papyty
Bonjour @ tous et à Papyty :
d'un classeur en utilisant une zone de liste déroulante
de la barre d'outils "formulaire". Je voudrais utiliser



Oups une erreur dans ThisWorkbook!!!!!!!!

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

--
@+
Thierry
05/12/2003 23:51:55


Avatar
Maxence HUBICHE
Moi, je ferai un truc se rapprochant de ce que tu veux.
Mais au lieu d'utiliser la barre d'outils 'Formulaires',
j'utiliserai la barre d'outils 'Boite à Outils Controles'

Dedans, je choisirai un liste déroulante.
J'afficherai les propriétés et changerai :
(Name) := cboSheets

_____________________________________________________
A partir de là, dans le module de la feuille où tu poses
ce contrôle (appelons-là Feuil1) tu auras :

Private Sub Worksheet_Activate()
Remplir cboSheets
End Sub

Private Sub Worksheet_Deactivate()
Vider cboSheets
End Sub

_____________________________________________________
Dans le module de ThisWorkbook, tu auras :

Private Sub Workbook_Open()
Remplir Feuil1.cboSheets
End Sub

_____________________________________________________
Et pour finir, dans un module standard, tu auras :

Public Sub Remplir(Cbo As ComboBox)
Dim oSheet As Object
For Each oSheet In ThisWorkbook.Sheets
Cbo.AddItem oSheet.Name
Next
End Sub

Public Sub Vider(Cbo As ComboBox)
Cbo.Clear
End Sub


Et c'est tout !
Avatar
Clément Marcotte
Bonjour,

Sous XP et Excel 2002, je voudrais ouvrir les feuilles
d'un classeur en utilisant une zone de liste déroulante


Avant de réinventer l'eau froide (ou l'eau chaude comme dirait
l'autre)

http://perso.wanadoo.fr/frederic.sigonneau/Feuilles.htm


http://perso.wanadoo.fr/frederic.sigonneau/ToutFait.htm

Mon but est par la suite de ne
plus faire apparaître les onglets du classeur.


Impossible

"ddh" a écrit dans le message de
news:098801c3bb75$c1c49700$
Bonjour à tous

de la barre d'outils "formulaire". Je voudrais utiliser
cette façon au lieu de celle qui consiste habituellement
à cliquer sur l'onglet.
Est-il possible de la faire et si oui de quelles façons?

Merci pour vos réponses

PS: c'est mon premier message dans le forum. J'espère que
j'ai respecté la charte. Si ce n'est pas le cas,
n'hésitez pas à me le dire

Avatar
Papyty
Bonjour @ tous et à Clément Marcotte :

Avant de réinventer l'eau froide (ou l'eau chaude comme dirait
l'autre)


Réinventer l'eau chaude non, mais donner plusieur soluces qui ne répondent
pas exactement aux mêmes critéres font la force de ce groupe, l'utilisateur
a le luxe de choisir ce qui lui convient le mieux, on ne pourra jamais se
mettre à sa place ;-)))
--
@+
Thierry
06/12/2003 01:37:54

Avatar
Clément Marcotte
Bonjour,

Réinventer l'eau chaude non, mais donner plusieur soluces qui ne
répondent

pas exactement aux mêmes critéres font la force de ce groupe,



Ma réponse était en relation avec le "grand projet" qui semble
découler de la question originale, et non des réponses déjà fournies.
Désolé si je n'ai pas été assez clair.

Avatar
AV
Pour répondre à la question :
Inscrire les noms des feuilles du classeur dans une zone de liste issue de la
barre d'outils "Formulaire" et sélectionner une de ces feuilles en cliquant sur
un choix dans la liste

En supposant que.........
* ce que tu appelles "Liste déroulante" est une "Zone de Liste" (ListBox) et non
une "Zone de Liste Modifiable" (DropDowns)
Sinon, faire signe....
* ta ListBox est déjà dessinée sur "Feuil1" et qu'elle se nomme "zz_List" (clic
droit sur l'objet et saisir dans barre des noms)

==== Pour initialiser la ListBox, plusieurs approches selon choix/nbre de
feuilles :
1) - Si le nbre de feuilles du classeur est fixe, peu important et non
susceptible de grandir/diminuer (pas d'ajout/suppression)
Exécuter la macro (à adapter) :
Sub Initialise_ListBox1()
With Sheets("Feuil1")
.ListBoxes("zz_List").List = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4")
.ListBoxes("zz_List").ListIndex = 1
End With
End Sub

2) - Si le nbre de feuilles du classeur est important (et/ou pour ne pas faire
d'erreurs d'orthographe)
Exécuter la macro :
Sub Initialise_ListBox2()
Dim Tabl_F() As String
x = ActiveWorkbook.Sheets.Count
ReDim Tabl_F(x)
For i = 1 To x
Tabl_F(i - 1) = ActiveWorkbook.Sheets(i).Name
Next i
With Sheets("Feuil1").ListBoxes("zz_List")
.List = Array(Tabl_F)
.ListIndex = 1
End With
End Sub

3) - Si le nbre de feuilles du classeur est susceptible d'être modifié
(ajouts/suppressions)
Mettre la proc "Initialise_ListBox2" dans un module ordinaire et dans le module
de ThisWorbook :
Private Sub Workbook_Open()
Initialise_ListBox2
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Initialise_ListBox2
End Sub

====== Dans tous les cas de figure, affecter à la ListBox la macro suivante :
Dans un module ordinaire :
Sub choix_F()
Sheets(ActiveSheet.ListBoxes("zz_List").List(Sheets("Feuil1").ListBoxes("zz_List
").ListIndex)).Select
End Sub

PS : exemple sur demande
AV
Avatar
Philippe.R
Bonjour Clément
Mon but est par la suite de ne
plus faire apparaître les onglets du classeur.


Impossible
Si, si, Clément c'est effectivement possible à partir d'Excel 2002 :

Outils / options / onglet affichage / décocher onglets du classeur
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002

"Clément Marcotte" a écrit dans le message de
news:
Bonjour,

Mon but est par la suite de ne
plus faire apparaître les onglets du classeur.


Impossible

"ddh" a écrit dans le message de
news:098801c3bb75$c1c49700$
Bonjour à tous

de la barre d'outils "formulaire". Je voudrais utiliser
cette façon au lieu de celle qui consiste habituellement
à cliquer sur l'onglet.
Est-il possible de la faire et si oui de quelles façons?

Merci pour vos réponses

PS: c'est mon premier message dans le forum. J'espère que
j'ai respecté la charte. Si ce n'est pas le cas,
n'hésitez pas à me le dire




Avatar
Bonjour

Et ben, pour un premier message posté dans le forum, j'ai
été gâté. Je ne pensais pas avoir autant de réponses ou
d'idées. Merci, c'est vraiment sympa.
J'ai testé assez rapidement toutes les propositions, mais
il faut que je revienne dessus pour mieux les comprendre
car il y a des petits bugs (ça doit venir de moi). La
réponse de Serge me satisfait pleinement, car elle marche
très bien et elle est très simple.
Encor merci et @+
1 2