OVH Cloud OVH Cloud

hors netiquette : Pour Frédéric S (mais d'autres peuvent être intéressés ou répondre !)

14 réponses
Avatar
Misange
Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un autre
ici hier ou avant hier). Pour faciliter la compréhension je mets des
noms d'onglets assez descriptifs. Du coup on n'en voit que quelques uns
en bas de la page et pour se déplacer c'est casse pieds. La solution
avec des liens hypertextes ou avec un userform ne me convient pas
vraiment : le userform prend de la place sur la feuille et à la longue
c'est fastidieux de le voir s'afficher même quand on ne veut pas. Les
liens hypertexte sur une page d'accueil obligent à revenir sur cette
page. Bof... Je préfère largement la solution d'un menu reprenant la
liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est le
menu fichier qui disparait chez moi tandis que le menu feuilles reste à
l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en bas
"plus de feuilles". Est-il possible de modifier ceci pour soit indiqué
au départ le nombre de feuilles à afficher ou les afficher toutes ?
merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

10 réponses

1 2
Avatar
papou
Bonjour Misange
Je ne suis pas fs, mais vu que cela m'intéresse aussi, je tente de
t'apporter une solution.
1°) Place le code ci-dessous dans un module
2°) ajoute l'appel de CreerLeMenuFeuilles dans l'évènement Workbook_Open
3°) Ajoute l'appel de SupprimerLeMenuFeuilles dans l'évènement
Workbook_BeforeClose.
J'ai testé rapidement chez moi et ça veut bien marcher !
Cordialement
Pascal

Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer)
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
Set MenuFeuilles = Application.CommandBars(1).Controls.Add(msoControlPopup,
, , , True)
With MenuFeuilles
.Caption = "&Menu Feuilles"
.Tag = cTag
.BeginGroup = False
End With
Set OptionsMenuFeuilles = MenuFeuilles.Controls.Add(msoControlPopup, , , ,
True)
With OptionsMenuFeuilles
.Caption = "Options"
Set Option1 = .Controls.Add(msoControlButton, 1, , , True)
With Option1
.Caption = "Afficher toutes les feuilles"
.OnAction = "ToutesLesFeuilles"
End With
Set Option2 = .Controls.Add(msoControlButton, 1, , , True)
With Option2
.Caption = "Définr le nombre de feuilles à afficher"
.OnAction = "NombredeFeuilles"
End With
End With
Select Case Nbf
Case Is = 0
ToutesLesFeuilles
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
End Select
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
End With
End With
End If
Next i
End Sub
Sub SupprimerLeMenuFeuilles()
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub
Sub ToutesLesFeuilles()
CreerLeMenuFeuilles (ThisWorkbook.Sheets.Count)
End Sub
Sub NombredeFeuilles()
LeNombre = Application.InputBox("Combien de feuilles souhaites-tu afficher
?", "Option menu Feuilles", , , , , , 1)
Select Case LeNombre
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
Case Is = 0
ToutesLesFeuilles
Case Is > 0 < ThisWorkbook.Sheets.Count
Sheets("Feuil1").Range("nbf") = LeNombre
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
CommandBars("Workbook tabs").ShowPopup
End Sub
"Misange" a écrit dans le message de
news:
Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un autre
ici hier ou avant hier). Pour faciliter la compréhension je mets des
noms d'onglets assez descriptifs. Du coup on n'en voit que quelques uns
en bas de la page et pour se déplacer c'est casse pieds. La solution
avec des liens hypertextes ou avec un userform ne me convient pas
vraiment : le userform prend de la place sur la feuille et à la longue
c'est fastidieux de le voir s'afficher même quand on ne veut pas. Les
liens hypertexte sur une page d'accueil obligent à revenir sur cette
page. Bof... Je préfère largement la solution d'un menu reprenant la
liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est le
menu fichier qui disparait chez moi tandis que le menu feuilles reste à
l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en bas
"plus de feuilles". Est-il possible de modifier ceci pour soit indiqué
au départ le nombre de feuilles à afficher ou les afficher toutes ?
merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta



Avatar
Paul V.
Bonjour,

Juste par curiosité, as-tu déjà utilisé le clic droit de la souris sur les
flèches de déplacement des onglets?
Cela ne répond pas à tous tes désirs mais peut déjà aider.

A+

Paul V

Misange wrote:
Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un
autre ici hier ou avant hier). Pour faciliter la compréhension je
mets des noms d'onglets assez descriptifs. Du coup on n'en voit que
quelques uns en bas de la page et pour se déplacer c'est casse pieds.
La solution avec des liens hypertextes ou avec un userform ne me
convient pas vraiment : le userform prend de la place sur la feuille
et à la longue c'est fastidieux de le voir s'afficher même quand on
ne veut pas. Les liens hypertexte sur une page d'accueil obligent à
revenir sur cette page. Bof... Je préfère largement la solution d'un
menu reprenant la liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est
le menu fichier qui disparait chez moi tandis que le menu feuilles
reste à l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en
bas "plus de feuilles". Est-il possible de modifier ceci pour soit
indiqué au départ le nombre de feuilles à afficher ou les afficher
toutes ? merci d'avance !


Avatar
Misange
SUPER !

C'est absolument parfait à une toute petite remarque près : il faut dans
le workbook_open ecrire
CreerLeMenuFeuilles (15)

autrement dit, l'argument (nombre de feuilles à afficher au départ)
n'est pas facultatif.

Merci ++ à FS, Chip et toi c'est super pratique !
et quel service ! je pose la question, je vais déjeuner, je bois mon
café et hop j'ai la réponse, le tout avec le sourire :-)

ca en vaut bien un en retour :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 05/11/2003 12:30:
Bonjour Misange
Je ne suis pas fs, mais vu que cela m'intéresse aussi, je tente de
t'apporter une solution.
1°) Place le code ci-dessous dans un module
2°) ajoute l'appel de CreerLeMenuFeuilles dans l'évènement Workbook_Open
3°) Ajoute l'appel de SupprimerLeMenuFeuilles dans l'évènement
Workbook_BeforeClose.
J'ai testé rapidement chez moi et ça veut bien marcher !
Cordialement
Pascal

Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer)
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
Set MenuFeuilles = Application.CommandBars(1).Controls.Add(msoControlPopup,
, , , True)
With MenuFeuilles
.Caption = "&Menu Feuilles"
.Tag = cTag
.BeginGroup = False
End With
Set OptionsMenuFeuilles = MenuFeuilles.Controls.Add(msoControlPopup, , , ,
True)
With OptionsMenuFeuilles
.Caption = "Options"
Set Option1 = .Controls.Add(msoControlButton, 1, , , True)
With Option1
.Caption = "Afficher toutes les feuilles"
.OnAction = "ToutesLesFeuilles"
End With
Set Option2 = .Controls.Add(msoControlButton, 1, , , True)
With Option2
.Caption = "Définr le nombre de feuilles à afficher"
.OnAction = "NombredeFeuilles"
End With
End With
Select Case Nbf
Case Is = 0
ToutesLesFeuilles
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
End Select
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
End With
End With
End If
Next i
End Sub
Sub SupprimerLeMenuFeuilles()
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub
Sub ToutesLesFeuilles()
CreerLeMenuFeuilles (ThisWorkbook.Sheets.Count)
End Sub
Sub NombredeFeuilles()
LeNombre = Application.InputBox("Combien de feuilles souhaites-tu afficher
?", "Option menu Feuilles", , , , , , 1)
Select Case LeNombre
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
Case Is = 0
ToutesLesFeuilles
Case Is > 0 < ThisWorkbook.Sheets.Count
Sheets("Feuil1").Range("nbf") = LeNombre
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
CommandBars("Workbook tabs").ShowPopup
End Sub
"Misange" a écrit dans le message de
news:

Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un autre
ici hier ou avant hier). Pour faciliter la compréhension je mets des
noms d'onglets assez descriptifs. Du coup on n'en voit que quelques uns
en bas de la page et pour se déplacer c'est casse pieds. La solution
avec des liens hypertextes ou avec un userform ne me convient pas
vraiment : le userform prend de la place sur la feuille et à la longue
c'est fastidieux de le voir s'afficher même quand on ne veut pas. Les
liens hypertexte sur une page d'accueil obligent à revenir sur cette
page. Bof... Je préfère largement la solution d'un menu reprenant la
liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est le
menu fichier qui disparait chez moi tandis que le menu feuilles reste à
l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en bas
"plus de feuilles". Est-il possible de modifier ceci pour soit indiqué
au départ le nombre de feuilles à afficher ou les afficher toutes ?
merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta








Avatar
papou
Misange
Effectivement, voici ce que j'avais oublié de te donner :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SupprimerLeMenuFeuilles
End Sub
Private Sub Workbook_Open()
'On inscrit un nombre par défaut dans une cellule d'une des feuilles du
classeur par exemple :
LeNombre = Sheets("Feuil1").Range("nbf").Value
CreerLeMenuFeuilles (LeNombre)
End Sub

En tout cas, je suis personnellement trop heureux de pouvoir t'aider en
retour de ta contribution très précieuse :-))
Cordialement
Pascal

"Misange" a écrit dans le message de
news:
SUPER !

C'est absolument parfait à une toute petite remarque près : il faut dans
le workbook_open ecrire
CreerLeMenuFeuilles (15)

autrement dit, l'argument (nombre de feuilles à afficher au départ)
n'est pas facultatif.

Merci ++ à FS, Chip et toi c'est super pratique !
et quel service ! je pose la question, je vais déjeuner, je bois mon
café et hop j'ai la réponse, le tout avec le sourire :-)

ca en vaut bien un en retour :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 05/11/2003 12:30:
Bonjour Misange
Je ne suis pas fs, mais vu que cela m'intéresse aussi, je tente de
t'apporter une solution.
1°) Place le code ci-dessous dans un module
2°) ajoute l'appel de CreerLeMenuFeuilles dans l'évènement Workbook_Open
3°) Ajoute l'appel de SupprimerLeMenuFeuilles dans l'évènement
Workbook_BeforeClose.
J'ai testé rapidement chez moi et ça veut bien marcher !
Cordialement
Pascal

Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer)
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
Set MenuFeuilles Application.CommandBars(1).Controls.Add(msoControlPopup,
, , , True)
With MenuFeuilles
.Caption = "&Menu Feuilles"
.Tag = cTag
.BeginGroup = False
End With
Set OptionsMenuFeuilles = MenuFeuilles.Controls.Add(msoControlPopup, , ,
,


True)
With OptionsMenuFeuilles
.Caption = "Options"
Set Option1 = .Controls.Add(msoControlButton, 1, , , True)
With Option1
.Caption = "Afficher toutes les feuilles"
.OnAction = "ToutesLesFeuilles"
End With
Set Option2 = .Controls.Add(msoControlButton, 1, , , True)
With Option2
.Caption = "Définr le nombre de feuilles à afficher"
.OnAction = "NombredeFeuilles"
End With
End With
Select Case Nbf
Case Is = 0
ToutesLesFeuilles
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
End Select
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
End With
End With
End If
Next i
End Sub
Sub SupprimerLeMenuFeuilles()
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub
Sub ToutesLesFeuilles()
CreerLeMenuFeuilles (ThisWorkbook.Sheets.Count)
End Sub
Sub NombredeFeuilles()
LeNombre = Application.InputBox("Combien de feuilles souhaites-tu
afficher


?", "Option menu Feuilles", , , , , , 1)
Select Case LeNombre
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
Case Is = 0
ToutesLesFeuilles
Case Is > 0 < ThisWorkbook.Sheets.Count
Sheets("Feuil1").Range("nbf") = LeNombre
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
CommandBars("Workbook tabs").ShowPopup
End Sub
"Misange" a écrit dans le message de
news:

Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un autre
ici hier ou avant hier). Pour faciliter la compréhension je mets des
noms d'onglets assez descriptifs. Du coup on n'en voit que quelques uns
en bas de la page et pour se déplacer c'est casse pieds. La solution
avec des liens hypertextes ou avec un userform ne me convient pas
vraiment : le userform prend de la place sur la feuille et à la longue
c'est fastidieux de le voir s'afficher même quand on ne veut pas. Les
liens hypertexte sur une page d'accueil obligent à revenir sur cette
page. Bof... Je préfère largement la solution d'un menu reprenant la
liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est le
menu fichier qui disparait chez moi tandis que le menu feuilles reste à
l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en bas
"plus de feuilles". Est-il possible de modifier ceci pour soit indiqué
au départ le nombre de feuilles à afficher ou les afficher toutes ?
merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta











Avatar
Misange
Bonjour Paul

Oui bien sur mais je ne trouve pas cela pratique du tout vu que le
nombre de feuilles affichées est justement limité. Et puis le classeur
en question est appellé à être donné à des gens qui ne sont pas
forcément très férus d'informatique... et de ce point de vue, avoir un
menu portant le nom du classeur par exemple est bien plus parlant.

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 05/11/2003 12:52:
Bonjour,

Juste par curiosité, as-tu déjà utilisé le clic droit de la souris sur les
flèches de déplacement des onglets?
Cela ne répond pas à tous tes désirs mais peut déjà aider.

A+

Paul V

Misange wrote:

Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un
autre ici hier ou avant hier). Pour faciliter la compréhension je
mets des noms d'onglets assez descriptifs. Du coup on n'en voit que
quelques uns en bas de la page et pour se déplacer c'est casse pieds.
La solution avec des liens hypertextes ou avec un userform ne me
convient pas vraiment : le userform prend de la place sur la feuille
et à la longue c'est fastidieux de le voir s'afficher même quand on
ne veut pas. Les liens hypertexte sur une page d'accueil obligent à
revenir sur cette page. Bof... Je préfère largement la solution d'un
menu reprenant la liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est
le menu fichier qui disparait chez moi tandis que le menu feuilles
reste à l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en
bas "plus de feuilles". Est-il possible de modifier ceci pour soit
indiqué au départ le nombre de feuilles à afficher ou les afficher
toutes ? merci d'avance !







Avatar
papou
Sinon, pour compléter l'exemple et éviter l'apparition du popup de sélection
des feuilles (qui je trouve fait un peu double-emploi avec le menu), et
appliquer (en l'adaptant) la méthode de Chip Pearson :
1°) Modifie dans CreerLeMenuFeuilles la partie ci-dessous
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
.Tag = Sheets(i).Name
End With
End With
End If
Next i
2°) Modifie la macro ActiverLaFeuille comme ceci :
Sub ActiverLaFeuille()
Sheets(Application.CommandBars.ActionControl.Tag).Activate
End Sub

Cordialement
Pascal


"Misange" a écrit dans le message de
news:
SUPER !

C'est absolument parfait à une toute petite remarque près : il faut dans
le workbook_open ecrire
CreerLeMenuFeuilles (15)

autrement dit, l'argument (nombre de feuilles à afficher au départ)
n'est pas facultatif.

Merci ++ à FS, Chip et toi c'est super pratique !
et quel service ! je pose la question, je vais déjeuner, je bois mon
café et hop j'ai la réponse, le tout avec le sourire :-)

ca en vaut bien un en retour :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 05/11/2003 12:30:
Bonjour Misange
Je ne suis pas fs, mais vu que cela m'intéresse aussi, je tente de
t'apporter une solution.
1°) Place le code ci-dessous dans un module
2°) ajoute l'appel de CreerLeMenuFeuilles dans l'évènement Workbook_Open
3°) Ajoute l'appel de SupprimerLeMenuFeuilles dans l'évènement
Workbook_BeforeClose.
J'ai testé rapidement chez moi et ça veut bien marcher !
Cordialement
Pascal

Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer)
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
Set MenuFeuilles Application.CommandBars(1).Controls.Add(msoControlPopup,
, , , True)
With MenuFeuilles
.Caption = "&Menu Feuilles"
.Tag = cTag
.BeginGroup = False
End With
Set OptionsMenuFeuilles = MenuFeuilles.Controls.Add(msoControlPopup, , ,
,


True)
With OptionsMenuFeuilles
.Caption = "Options"
Set Option1 = .Controls.Add(msoControlButton, 1, , , True)
With Option1
.Caption = "Afficher toutes les feuilles"
.OnAction = "ToutesLesFeuilles"
End With
Set Option2 = .Controls.Add(msoControlButton, 1, , , True)
With Option2
.Caption = "Définr le nombre de feuilles à afficher"
.OnAction = "NombredeFeuilles"
End With
End With
Select Case Nbf
Case Is = 0
ToutesLesFeuilles
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
End Select
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
End With
End With
End If
Next i
End Sub
Sub SupprimerLeMenuFeuilles()
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub
Sub ToutesLesFeuilles()
CreerLeMenuFeuilles (ThisWorkbook.Sheets.Count)
End Sub
Sub NombredeFeuilles()
LeNombre = Application.InputBox("Combien de feuilles souhaites-tu
afficher


?", "Option menu Feuilles", , , , , , 1)
Select Case LeNombre
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
Case Is = 0
ToutesLesFeuilles
Case Is > 0 < ThisWorkbook.Sheets.Count
Sheets("Feuil1").Range("nbf") = LeNombre
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
CommandBars("Workbook tabs").ShowPopup
End Sub
"Misange" a écrit dans le message de
news:

Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un autre
ici hier ou avant hier). Pour faciliter la compréhension je mets des
noms d'onglets assez descriptifs. Du coup on n'en voit que quelques uns
en bas de la page et pour se déplacer c'est casse pieds. La solution
avec des liens hypertextes ou avec un userform ne me convient pas
vraiment : le userform prend de la place sur la feuille et à la longue
c'est fastidieux de le voir s'afficher même quand on ne veut pas. Les
liens hypertexte sur une page d'accueil obligent à revenir sur cette
page. Bof... Je préfère largement la solution d'un menu reprenant la
liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est le
menu fichier qui disparait chez moi tandis que le menu feuilles reste à
l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en bas
"plus de feuilles". Est-il possible de modifier ceci pour soit indiqué
au départ le nombre de feuilles à afficher ou les afficher toutes ?
merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta











Avatar
Misange
ok ! je rajoute


J'ai quand même encore un ti pb : chez moi quand je clique sur un des
items de ce menu, j'ai en fait l'affichage du menu dont Paul causait
justement... Avec le même pb de limitation du nombre de feuilles. Ca
oblige à cliquer deux fois et voire plus si le nombre de feuilles est
élevé. Une idée ?

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 05/11/2003 13:36:
Misange
Effectivement, voici ce que j'avais oublié de te donner :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
SupprimerLeMenuFeuilles
End Sub
Private Sub Workbook_Open()
'On inscrit un nombre par défaut dans une cellule d'une des feuilles du
classeur par exemple :
LeNombre = Sheets("Feuil1").Range("nbf").Value
CreerLeMenuFeuilles (LeNombre)
End Sub

En tout cas, je suis personnellement trop heureux de pouvoir t'aider en
retour de ta contribution très précieuse :-))
Cordialement
Pascal

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

SUPER !

C'est absolument parfait à une toute petite remarque près : il faut dans
le workbook_open ecrire
CreerLeMenuFeuilles (15)

autrement dit, l'argument (nombre de feuilles à afficher au départ)
n'est pas facultatif.

Merci ++ à FS, Chip et toi c'est super pratique !
et quel service ! je pose la question, je vais déjeuner, je bois mon
café et hop j'ai la réponse, le tout avec le sourire :-)

ca en vaut bien un en retour :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 05/11/2003 12:30:

Bonjour Misange
Je ne suis pas fs, mais vu que cela m'intéresse aussi, je tente de
t'apporter une solution.
1°) Place le code ci-dessous dans un module
2°) ajoute l'appel de CreerLeMenuFeuilles dans l'évènement Workbook_Open
3°) Ajoute l'appel de SupprimerLeMenuFeuilles dans l'évènement
Workbook_BeforeClose.
J'ai testé rapidement chez moi et ça veut bien marcher !
Cordialement
Pascal

Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer)
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
Set MenuFeuilles >
Application.CommandBars(1).Controls.Add(msoControlPopup,



, , , True)
With MenuFeuilles
.Caption = "&Menu Feuilles"
.Tag = cTag
.BeginGroup = False
End With
Set OptionsMenuFeuilles = MenuFeuilles.Controls.Add(msoControlPopup, , ,



,

True)
With OptionsMenuFeuilles
.Caption = "Options"
Set Option1 = .Controls.Add(msoControlButton, 1, , , True)
With Option1
.Caption = "Afficher toutes les feuilles"
.OnAction = "ToutesLesFeuilles"
End With
Set Option2 = .Controls.Add(msoControlButton, 1, , , True)
With Option2
.Caption = "Définr le nombre de feuilles à afficher"
.OnAction = "NombredeFeuilles"
End With
End With
Select Case Nbf
Case Is = 0
ToutesLesFeuilles
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
End Select
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
End With
End With
End If
Next i
End Sub
Sub SupprimerLeMenuFeuilles()
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub
Sub ToutesLesFeuilles()
CreerLeMenuFeuilles (ThisWorkbook.Sheets.Count)
End Sub
Sub NombredeFeuilles()
LeNombre = Application.InputBox("Combien de feuilles souhaites-tu



afficher

?", "Option menu Feuilles", , , , , , 1)
Select Case LeNombre
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
Case Is = 0
ToutesLesFeuilles
Case Is > 0 < ThisWorkbook.Sheets.Count
Sheets("Feuil1").Range("nbf") = LeNombre
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
CommandBars("Workbook tabs").ShowPopup
End Sub
"Misange" a écrit dans le message de
news:


Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un autre
ici hier ou avant hier). Pour faciliter la compréhension je mets des
noms d'onglets assez descriptifs. Du coup on n'en voit que quelques uns
en bas de la page et pour se déplacer c'est casse pieds. La solution
avec des liens hypertextes ou avec un userform ne me convient pas
vraiment : le userform prend de la place sur la feuille et à la longue
c'est fastidieux de le voir s'afficher même quand on ne veut pas. Les
liens hypertexte sur une page d'accueil obligent à revenir sur cette
page. Bof... Je préfère largement la solution d'un menu reprenant la
liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est le
menu fichier qui disparait chez moi tandis que le menu feuilles reste à
l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en bas
"plus de feuilles". Est-il possible de modifier ceci pour soit indiqué
au départ le nombre de feuilles à afficher ou les afficher toutes ?
merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta














Avatar
Misange
oublie mon mail précédent, avec les modifs que tu as indiquées c'est
absolument parfait, juste ce qu'il me fallait.
Evidemment je mets de côté (puisque j'utilise déjà !)
Adopté pour les classeurs à feuilles innombrables !

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 05/11/2003 13:50:
Sinon, pour compléter l'exemple et éviter l'apparition du popup de sélection
des feuilles (qui je trouve fait un peu double-emploi avec le menu), et
appliquer (en l'adaptant) la méthode de Chip Pearson :
1°) Modifie dans CreerLeMenuFeuilles la partie ci-dessous
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
.Tag = Sheets(i).Name
End With
End With
End If
Next i
2°) Modifie la macro ActiverLaFeuille comme ceci :
Sub ActiverLaFeuille()
Sheets(Application.CommandBars.ActionControl.Tag).Activate
End Sub

Cordialement
Pascal


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

SUPER !

C'est absolument parfait à une toute petite remarque près : il faut dans
le workbook_open ecrire
CreerLeMenuFeuilles (15)

autrement dit, l'argument (nombre de feuilles à afficher au départ)
n'est pas facultatif.

Merci ++ à FS, Chip et toi c'est super pratique !
et quel service ! je pose la question, je vais déjeuner, je bois mon
café et hop j'ai la réponse, le tout avec le sourire :-)

ca en vaut bien un en retour :-)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 05/11/2003 12:30:

Bonjour Misange
Je ne suis pas fs, mais vu que cela m'intéresse aussi, je tente de
t'apporter une solution.
1°) Place le code ci-dessous dans un module
2°) ajoute l'appel de CreerLeMenuFeuilles dans l'évènement Workbook_Open
3°) Ajoute l'appel de SupprimerLeMenuFeuilles dans l'évènement
Workbook_BeforeClose.
J'ai testé rapidement chez moi et ça veut bien marcher !
Cordialement
Pascal

Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer)
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
Set MenuFeuilles >
Application.CommandBars(1).Controls.Add(msoControlPopup,



, , , True)
With MenuFeuilles
.Caption = "&Menu Feuilles"
.Tag = cTag
.BeginGroup = False
End With
Set OptionsMenuFeuilles = MenuFeuilles.Controls.Add(msoControlPopup, , ,



,

True)
With OptionsMenuFeuilles
.Caption = "Options"
Set Option1 = .Controls.Add(msoControlButton, 1, , , True)
With Option1
.Caption = "Afficher toutes les feuilles"
.OnAction = "ToutesLesFeuilles"
End With
Set Option2 = .Controls.Add(msoControlButton, 1, , , True)
With Option2
.Caption = "Définr le nombre de feuilles à afficher"
.OnAction = "NombredeFeuilles"
End With
End With
Select Case Nbf
Case Is = 0
ToutesLesFeuilles
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
End Select
For i = 1 To Nbf
If Sheets(i).Visible = True Then
With MenuFeuilles
NF = "Feuille" & i
Set NF = .Controls.Add(msoControlButton, 1, , , True)
With NF
.Caption = Sheets(i).Name
.OnAction = "ActiverLaFeuille"
End With
End With
End If
Next i
End Sub
Sub SupprimerLeMenuFeuilles()
With Application.CommandBars
If Not .FindControl(Tag:=cTag) Is Nothing Then
.FindControl(Tag:=cTag).Delete
End If
End With
End Sub
Sub ToutesLesFeuilles()
CreerLeMenuFeuilles (ThisWorkbook.Sheets.Count)
End Sub
Sub NombredeFeuilles()
LeNombre = Application.InputBox("Combien de feuilles souhaites-tu



afficher

?", "Option menu Feuilles", , , , , , 1)
Select Case LeNombre
Case Is > ThisWorkbook.Sheets.Count
ToutesLesFeuilles
Case Is = 0
ToutesLesFeuilles
Case Is > 0 < ThisWorkbook.Sheets.Count
Sheets("Feuil1").Range("nbf") = LeNombre
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
CommandBars("Workbook tabs").ShowPopup
End Sub
"Misange" a écrit dans le message de
news:


Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un autre
ici hier ou avant hier). Pour faciliter la compréhension je mets des
noms d'onglets assez descriptifs. Du coup on n'en voit que quelques uns
en bas de la page et pour se déplacer c'est casse pieds. La solution
avec des liens hypertextes ou avec un userform ne me convient pas
vraiment : le userform prend de la place sur la feuille et à la longue
c'est fastidieux de le voir s'afficher même quand on ne veut pas. Les
liens hypertexte sur une page d'accueil obligent à revenir sur cette
page. Bof... Je préfère largement la solution d'un menu reprenant la
liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est le
menu fichier qui disparait chez moi tandis que le menu feuilles reste à
l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en bas
"plus de feuilles". Est-il possible de modifier ceci pour soit indiqué
au départ le nombre de feuilles à afficher ou les afficher toutes ?
merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta














Avatar
Gaspareau
Bonjour vous tous,

Misange,

Une petite suggestion

Et si tu mettais un classer exemple que l'on pourrait
récupérer
sur le meilleur site de référence sur Excel ??

Bonne journée

--
Gaspareau

Règle anti spam
Pour réponse personnelle enlever un d au
début de mon adresse courriel


"Misange" a écrit dans le message de
news:
Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée
par un autre

ici hier ou avant hier). Pour faciliter la compréhension
je mets des

noms d'onglets assez descriptifs. Du coup on n'en voit que
quelques uns

en bas de la page et pour se déplacer c'est casse pieds.
La solution

avec des liens hypertextes ou avec un userform ne me
convient pas

vraiment : le userform prend de la place sur la feuille et
à la longue

c'est fastidieux de le voir s'afficher même quand on ne
veut pas. Les

liens hypertexte sur une page d'accueil obligent à revenir
sur cette

page. Bof... Je préfère largement la solution d'un menu
reprenant la

liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme
prévu, je

trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la
fermeture, c'est le

menu fichier qui disparait chez moi tandis que le menu
feuilles reste à

l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs
ouverts se

trouvent listées dans ce menu mais seulement celles du
classeur dans

lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste
apparait avec en bas

"plus de feuilles". Est-il possible de modifier ceci pour
soit indiqué

au départ le nombre de feuilles à afficher ou les afficher
toutes ?

merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta



Avatar
Frédéric Sigonneau
Bonsoir Misange,

Je n'étais pas "en ligne" hier et je ne découvre ta demande et la ficelle,
heureusement conclue, que ce soir :)
Je pense que j'aurais pu aussi te suggérer d'essayer la macro complémentaire
FeuillesClasseurs.xla (sur mon site aussi), qui ajoute un bouton de type
combobox dans une barre d'outils et permet d'afficher les feuilles d'un classeur
par "tranches" de 50. Si distribuer une macro complémentaire n'est pas
compatible avec ton besoin, les modules (deux standards et un module de classe)
peuvent être copiés ailleurs sans autre forme de procès. Le code est "protégé"
par mon mot de passe habituel (zaza).
C'est juste une autre approche possible que le menu de Chip Pearson (et ses
adaptations signées papou).

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour Frédéric, et les autres ;-)

J'ai un classeur avec des tas d'onglets (situation évoquée par un autre
ici hier ou avant hier). Pour faciliter la compréhension je mets des
noms d'onglets assez descriptifs. Du coup on n'en voit que quelques uns
en bas de la page et pour se déplacer c'est casse pieds. La solution
avec des liens hypertextes ou avec un userform ne me convient pas
vraiment : le userform prend de la place sur la feuille et à la longue
c'est fastidieux de le voir s'afficher même quand on ne veut pas. Les
liens hypertexte sur une page d'accueil obligent à revenir sur cette
page. Bof... Je préfère largement la solution d'un menu reprenant la
liste des onglets.
Sur l'excellent Site "Aux choses du temps..." :-), comme prévu, je
trouve mon bonheur : MenuFeuilleChipPerson.bas
Mais pas tout à fait :
si tout fonctionne correctement à l'ouverture, à la fermeture, c'est le
menu fichier qui disparait chez moi tandis que le menu feuilles reste à
l'écran.

Par ailleurs, j'aimerais quelques modifs :
Je ne voudrais pas que les feuilles de tous les classeurs ouverts se
trouvent listées dans ce menu mais seulement celles du classeur dans
lequel est enregistrée la macro.
Et puis quand il y a beaucoup de feuilles, la liste apparait avec en bas
"plus de feuilles". Est-il possible de modifier ceci pour soit indiqué
au départ le nombre de feuilles à afficher ou les afficher toutes ?
merci d'avance !
--
Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


1 2