OVH Cloud OVH Cloud

Insérer une macro via une macro !!

3 réponses
Avatar
Gaspareau
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

3 réponses

Avatar
Clément Marcotte
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.

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

FeuillesClasseurs


"Gaspareau" a écrit dans le
message de news:%
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




Avatar
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

d'une macro complémentaire, par devinez qui.

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

FeuillesClasseurs


"Gaspareau" a
écrit dans le

message de news:%
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







Avatar
Frédéric Sigonneau
Bonsoir,


De plus, pour ma culture personnelle, comment on fait
pour insérer une macro via une macro


Cette page devrait t'intéresser :

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

et en particulier ces modules :

http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouteEvenementAModule.txt
http://perso.wanadoo.fr/frederic.sigonneau/code/VBE/AjouterDuCodeDansUnModule.txt

Reviens si problème..

(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 !