J'ai récupéré via le site www.excelabo.com la macro servant
à insérer un
menu navigation listant toutes les feuilles d'un classeur.
Cette macro me sera très utile dans certains fichiers plus
volumineux.
Je voudrais savoir s'il est possible de créer une macro dans
mon perso.xls
qui pourrait automatiquement copier, dans le fichier en
cours, le code requis dans Thisworkbook et insérer le module
(macros) nécessaire afin d'avoir ce menu dans le fichier en
cours.
Autrement dit je voudrais créer un bouton qui, en le
cliquant, créerait automatiquement
les opérations nécessaires afin d'obtenir le menu navigation
dans le fichier en cours.
Merci
ps. voici le code
pour thisworkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'********* pour le menu navigation***********'
SupprimerLeMenuFeuilles
'********* fin code menu navigation***********'
End Sub
Private Sub Workbook_Open()
'********* pour le menu navigation***********'
CreerLeMenuFeuilles (Nbf)
'********* fin code menu navigation***********'
End Sub
Pour le module :
Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer) 'Chip Pearson,
'Frédéric Sigonneau, Papou
'Nbf est une valeur écrite quelque part en dur dans le
classeur et
'nommée par insertion/nom/définir
'ne pas oublier d'indiquer aussi sa localisation dans la sub
NombredeFeuilles sur cette page
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 = "&Navigation"
.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éfinir 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"
.Tag = Sheets(i).Name
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("MenuNavig").Range("B12") = LeNombre 'à
adapter... Choisir un coin de feuille vide
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
Sheets(Application.CommandBars.ActionControl.Tag).Activate
End Sub
--
Gaspareau
Règle anti spam
Pour réponse personnelle ne conserver qu'un d
début de mon adresse courriel
J'ai récupéré via le site www.excelabo.com la macro servant à insérer un menu navigation listant toutes les feuilles d'un classeur.
Cette macro me sera très utile dans certains fichiers plus volumineux.
Je voudrais savoir s'il est possible de créer une macro dans mon perso.xls qui pourrait automatiquement copier, dans le fichier en cours, le code requis dans Thisworkbook et insérer le module (macros) nécessaire afin d'avoir ce menu dans le fichier en cours.
Autrement dit je voudrais créer un bouton qui, en le cliquant, créerait automatiquement les opérations nécessaires afin d'obtenir le menu navigation dans le fichier en cours.
Merci
ps. voici le code
pour thisworkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean) '********* pour le menu navigation***********' SupprimerLeMenuFeuilles '********* fin code menu navigation***********'
End Sub
Private Sub Workbook_Open() '********* pour le menu navigation***********' CreerLeMenuFeuilles (Nbf) '********* fin code menu navigation***********'
End Sub
Pour le module :
Public LeNombre As Integer Const cTag As String = "SpecialMisange" Sub CreerLeMenuFeuilles(Nbf As Integer) 'Chip Pearson, 'Frédéric Sigonneau, Papou 'Nbf est une valeur écrite quelque part en dur dans le classeur et 'nommée par insertion/nom/définir 'ne pas oublier d'indiquer aussi sa localisation dans la sub NombredeFeuilles sur cette page
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 = "&Navigation" .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éfinir 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" .Tag = Sheets(i).Name 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("MenuNavig").Range("B12") = LeNombre 'à adapter... Choisir un coin de feuille vide End Select CreerLeMenuFeuilles (LeNombre) End Sub Sub ActiverLaFeuille() Sheets(Application.CommandBars.ActionControl.Tag).Activate End Sub
-- Gaspareau
Règle anti spam Pour réponse personnelle ne conserver qu'un d début de mon adresse courriel
Bonjour,
Pas besoin de te casser la tête, c'est déjà tout fait, sous la forme
d'une macro complémentaire, par devinez qui.
"Gaspareau" <ddddddddsauvageau@ville.becancour.qc.ca> a écrit dans le
message de news:%23sSRVYAwDHA.2308@TK2MSFTNGP11.phx.gbl...
Bonjour,
J'ai récupéré via le site www.excelabo.com la macro servant
à insérer un
menu navigation listant toutes les feuilles d'un classeur.
Cette macro me sera très utile dans certains fichiers plus
volumineux.
Je voudrais savoir s'il est possible de créer une macro dans
mon perso.xls
qui pourrait automatiquement copier, dans le fichier en
cours, le code requis dans Thisworkbook et insérer le module
(macros) nécessaire afin d'avoir ce menu dans le fichier en
cours.
Autrement dit je voudrais créer un bouton qui, en le
cliquant, créerait automatiquement
les opérations nécessaires afin d'obtenir le menu navigation
dans le fichier en cours.
Merci
ps. voici le code
pour thisworkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'********* pour le menu navigation***********'
SupprimerLeMenuFeuilles
'********* fin code menu navigation***********'
End Sub
Private Sub Workbook_Open()
'********* pour le menu navigation***********'
CreerLeMenuFeuilles (Nbf)
'********* fin code menu navigation***********'
End Sub
Pour le module :
Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer) 'Chip Pearson,
'Frédéric Sigonneau, Papou
'Nbf est une valeur écrite quelque part en dur dans le
classeur et
'nommée par insertion/nom/définir
'ne pas oublier d'indiquer aussi sa localisation dans la sub
NombredeFeuilles sur cette page
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 = "&Navigation"
.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éfinir 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"
.Tag = Sheets(i).Name
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("MenuNavig").Range("B12") = LeNombre 'à
adapter... Choisir un coin de feuille vide
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
Sheets(Application.CommandBars.ActionControl.Tag).Activate
End Sub
--
Gaspareau
Règle anti spam
Pour réponse personnelle ne conserver qu'un d
début de mon adresse courriel
J'ai récupéré via le site www.excelabo.com la macro servant à insérer un menu navigation listant toutes les feuilles d'un classeur.
Cette macro me sera très utile dans certains fichiers plus volumineux.
Je voudrais savoir s'il est possible de créer une macro dans mon perso.xls qui pourrait automatiquement copier, dans le fichier en cours, le code requis dans Thisworkbook et insérer le module (macros) nécessaire afin d'avoir ce menu dans le fichier en cours.
Autrement dit je voudrais créer un bouton qui, en le cliquant, créerait automatiquement les opérations nécessaires afin d'obtenir le menu navigation dans le fichier en cours.
Merci
ps. voici le code
pour thisworkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean) '********* pour le menu navigation***********' SupprimerLeMenuFeuilles '********* fin code menu navigation***********'
End Sub
Private Sub Workbook_Open() '********* pour le menu navigation***********' CreerLeMenuFeuilles (Nbf) '********* fin code menu navigation***********'
End Sub
Pour le module :
Public LeNombre As Integer Const cTag As String = "SpecialMisange" Sub CreerLeMenuFeuilles(Nbf As Integer) 'Chip Pearson, 'Frédéric Sigonneau, Papou 'Nbf est une valeur écrite quelque part en dur dans le classeur et 'nommée par insertion/nom/définir 'ne pas oublier d'indiquer aussi sa localisation dans la sub NombredeFeuilles sur cette page
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 = "&Navigation" .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éfinir 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" .Tag = Sheets(i).Name 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("MenuNavig").Range("B12") = LeNombre 'à adapter... Choisir un coin de feuille vide End Select CreerLeMenuFeuilles (LeNombre) End Sub Sub ActiverLaFeuille() Sheets(Application.CommandBars.ActionControl.Tag).Activate End Sub
-- Gaspareau
Règle anti spam Pour réponse personnelle ne conserver qu'un d début de mon adresse courriel
Gaspareau
Merci
Effectivement ça fait le travail sauf que j'ai personnalisé mes barres d'outils et ma barre mise en forme est la mienne et pas celle par défaut d'Excel. Comme le menu est créé dans la barre mise en forme d'Excel je ne le voit pas et si je déplace le menu déroulant dans ma barre, il y a un "bug" avec la macro.
De plus, pour ma culture personnelle, comment on fait pour insérer une macro via une macro
Merci
-- Gaspareau
Règle anti spam Pour réponse personnelle ne conserver qu'un d début de mon adresse courriel
"Clément Marcotte" a écrit dans le message de news:Oe39Q$
Bonjour,
Pas besoin de te casser la tête, c'est déjà tout fait, sous la forme
J'ai récupéré via le site www.excelabo.com la macro servant
à insérer un menu navigation listant toutes les feuilles d'un classeur.
Cette macro me sera très utile dans certains fichiers plus
volumineux.
Je voudrais savoir s'il est possible de créer une macro dans
mon perso.xls qui pourrait automatiquement copier, dans le fichier en cours, le code requis dans Thisworkbook et insérer le module
(macros) nécessaire afin d'avoir ce menu dans le fichier en
cours.
Autrement dit je voudrais créer un bouton qui, en le cliquant, créerait automatiquement les opérations nécessaires afin d'obtenir le menu navigation
dans le fichier en cours.
Merci
ps. voici le code
pour thisworkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean) '********* pour le menu navigation***********' SupprimerLeMenuFeuilles '********* fin code menu navigation***********'
End Sub
Private Sub Workbook_Open() '********* pour le menu navigation***********' CreerLeMenuFeuilles (Nbf) '********* fin code menu navigation***********'
End Sub
Pour le module :
Public LeNombre As Integer Const cTag As String = "SpecialMisange" Sub CreerLeMenuFeuilles(Nbf As Integer) 'Chip Pearson, 'Frédéric Sigonneau, Papou 'Nbf est une valeur écrite quelque part en dur dans le classeur et 'nommée par insertion/nom/définir 'ne pas oublier d'indiquer aussi sa localisation dans la sub
NombredeFeuilles sur cette page
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 = "&Navigation" .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éfinir 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" .Tag = Sheets(i).Name 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("MenuNavig").Range("B12") = LeNombre 'à adapter... Choisir un coin de feuille vide End Select CreerLeMenuFeuilles (LeNombre) End Sub Sub ActiverLaFeuille()
Règle anti spam Pour réponse personnelle ne conserver qu'un d début de mon adresse courriel
Merci
Effectivement ça fait le travail sauf que j'ai personnalisé
mes barres d'outils et
ma barre mise en forme est la mienne et pas celle par défaut
d'Excel.
Comme le menu est créé dans la barre mise en forme d'Excel
je ne le voit pas et si je déplace le menu déroulant dans ma
barre, il y a un "bug" avec la macro.
De plus, pour ma culture personnelle, comment on fait
pour insérer une macro via une macro
Merci
--
Gaspareau
Règle anti spam
Pour réponse personnelle ne conserver qu'un d
début de mon adresse courriel
"Clément Marcotte" <clement.marcotte@sympatico.ca> a écrit
dans le message de
news:Oe39Q$AwDHA.2360@TK2MSFTNGP10.phx.gbl...
Bonjour,
Pas besoin de te casser la tête, c'est déjà tout fait,
sous la forme
"Gaspareau" <ddddddddsauvageau@ville.becancour.qc.ca> a
écrit dans le
message de news:%23sSRVYAwDHA.2308@TK2MSFTNGP11.phx.gbl...
Bonjour,
J'ai récupéré via le site www.excelabo.com la macro
servant
à insérer un
menu navigation listant toutes les feuilles d'un
classeur.
Cette macro me sera très utile dans certains fichiers
plus
volumineux.
Je voudrais savoir s'il est possible de créer une macro
dans
mon perso.xls
qui pourrait automatiquement copier, dans le fichier en
cours, le code requis dans Thisworkbook et insérer le
module
(macros) nécessaire afin d'avoir ce menu dans le fichier
en
cours.
Autrement dit je voudrais créer un bouton qui, en le
cliquant, créerait automatiquement
les opérations nécessaires afin d'obtenir le menu
navigation
dans le fichier en cours.
Merci
ps. voici le code
pour thisworkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'********* pour le menu navigation***********'
SupprimerLeMenuFeuilles
'********* fin code menu navigation***********'
End Sub
Private Sub Workbook_Open()
'********* pour le menu navigation***********'
CreerLeMenuFeuilles (Nbf)
'********* fin code menu navigation***********'
End Sub
Pour le module :
Public LeNombre As Integer
Const cTag As String = "SpecialMisange"
Sub CreerLeMenuFeuilles(Nbf As Integer) 'Chip Pearson,
'Frédéric Sigonneau, Papou
'Nbf est une valeur écrite quelque part en dur dans le
classeur et
'nommée par insertion/nom/définir
'ne pas oublier d'indiquer aussi sa localisation dans la
sub
NombredeFeuilles sur cette page
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 = "&Navigation"
.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éfinir 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"
.Tag = Sheets(i).Name
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("MenuNavig").Range("B12") = LeNombre 'à
adapter... Choisir un coin de feuille vide
End Select
CreerLeMenuFeuilles (LeNombre)
End Sub
Sub ActiverLaFeuille()
Effectivement ça fait le travail sauf que j'ai personnalisé mes barres d'outils et ma barre mise en forme est la mienne et pas celle par défaut d'Excel. Comme le menu est créé dans la barre mise en forme d'Excel je ne le voit pas et si je déplace le menu déroulant dans ma barre, il y a un "bug" avec la macro.
De plus, pour ma culture personnelle, comment on fait pour insérer une macro via une macro
Merci
-- Gaspareau
Règle anti spam Pour réponse personnelle ne conserver qu'un d début de mon adresse courriel
"Clément Marcotte" a écrit dans le message de news:Oe39Q$
Bonjour,
Pas besoin de te casser la tête, c'est déjà tout fait, sous la forme
J'ai récupéré via le site www.excelabo.com la macro servant
à insérer un menu navigation listant toutes les feuilles d'un classeur.
Cette macro me sera très utile dans certains fichiers plus
volumineux.
Je voudrais savoir s'il est possible de créer une macro dans
mon perso.xls qui pourrait automatiquement copier, dans le fichier en cours, le code requis dans Thisworkbook et insérer le module
(macros) nécessaire afin d'avoir ce menu dans le fichier en
cours.
Autrement dit je voudrais créer un bouton qui, en le cliquant, créerait automatiquement les opérations nécessaires afin d'obtenir le menu navigation
dans le fichier en cours.
Merci
ps. voici le code
pour thisworkbook :
Private Sub Workbook_BeforeClose(Cancel As Boolean) '********* pour le menu navigation***********' SupprimerLeMenuFeuilles '********* fin code menu navigation***********'
End Sub
Private Sub Workbook_Open() '********* pour le menu navigation***********' CreerLeMenuFeuilles (Nbf) '********* fin code menu navigation***********'
End Sub
Pour le module :
Public LeNombre As Integer Const cTag As String = "SpecialMisange" Sub CreerLeMenuFeuilles(Nbf As Integer) 'Chip Pearson, 'Frédéric Sigonneau, Papou 'Nbf est une valeur écrite quelque part en dur dans le classeur et 'nommée par insertion/nom/définir 'ne pas oublier d'indiquer aussi sa localisation dans la sub
NombredeFeuilles sur cette page
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 = "&Navigation" .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éfinir 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" .Tag = Sheets(i).Name 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("MenuNavig").Range("B12") = LeNombre 'à adapter... Choisir un coin de feuille vide End Select CreerLeMenuFeuilles (LeNombre) End Sub Sub ActiverLaFeuille()
(PS : je veux bien, si besoin en bal perso, des détails sur le bug dont tu parles avec la macro complémentaire que Clément t'a indiquée afin d'y apporter les corrections nécessaires).
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 !
Bonsoir,
De plus, pour ma culture personnelle, comment on fait
pour insérer une macro via une macro
(PS : je veux bien, si besoin en bal perso, des détails sur le bug dont tu
parles avec la macro complémentaire que Clément t'a indiquée afin d'y apporter
les corrections nécessaires).
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 !
(PS : je veux bien, si besoin en bal perso, des détails sur le bug dont tu parles avec la macro complémentaire que Clément t'a indiquée afin d'y apporter les corrections nécessaires).
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 !