Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vba : liste des macros

16 réponses
Avatar
Jac
Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout ce
que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac

10 réponses

1 2
Avatar
Daniel.j
Une macro de Laurent
Mais qui ne donne pas le nom du module
Sub ListeMacros()
' LL
Dim Macro As String, Racc As String
Dim Rpt As String, I As Integer

Application.ScreenUpdating = False
Workbooks.Add.Worksheets(1).[A1:B1] = [{"Procédure","Raccourci"}]

SendKeys "%{F8}%a{PGUP}{TAB}{ESC}"

'nécessite une référence à la bibliothèque
'Microsoft Forms 2.0 Object Library
With New DataObject
Do
Rpt = "%{F8}{TAB}" & Application.Rept("{DOWN}", I)
SendKeys Rpt & "%n^c{ESC}", True
.GetFromClipboard
If Macro = .GetText(1) Then Exit Do
Macro = .GetText(1)
SendKeys Rpt & "%t^c{ESC}{ESC}", True
.GetFromClipboard
Racc = .GetText(1)
I = I + 1
Cells(I + 1, 1) = Macro
If Racc <> Macro Then Cells(I + 1, 2) = "Ctrl-" & Racc
Loop
End With
With Columns("A:B")
.AutoFit
.Sort [A1], Header:=xlYes
.CurrentRegion.AutoFormat xlRangeAutoFormatColor2
End With
End Sub
Daniel

--
VBAXL
http://dj.joss.free.fr/

FAQ MPFE
FAQ du forum microsoft.public.fr.excel
http://dj.joss.free.fr/faq.htm
"Jac" a écrit dans le message de news:

Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout
ce que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac



Avatar
MichDenis
la macro de Stephen Bullen (XL97) qui crée
l'arborescense et l'interdépendance des macros d'un classeur
sous forme pseudo graphique avec les notions de parent/enfant ainsi que
d'autres détailles tels que nombre d'appels, tailles etc...
cf ../..
· A straight list of parent/child procedures, useful for checking
the detail
· A summary pivot table of inter-module and intra-module calls, so
you can see at a glance which modules are closely coupled
· A pivot table with the parent procedure names in a page field, so
you can easily identify which child procedures it calls
· A pivot table with the child procedure names in a page field, so
you can easily identify the procedures that call it
· A complete list of all the procedure calls, shown in a list
structure, enabling you to trace through the procedure flow
../..

http://www.oaltd.co.uk/DLCount/DLCount.asp?fileÊllTree.zip

NB:
petits problemes connus :
c'est en fait un fichier XLA avec une extension XLS,
aprés activation du xls il faut cocher la macro complémentaire: Call Tree 97

petit souci également d'affichage de l'arboresence si la police MS LineDraw
n'est pas disponible...



"Jac" a écrit dans le message de news:
Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout ce
que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac
Avatar
Mousnynao
Bonjour,

Repérer VizioXLA sur cette page :
http://www.excel-downloads.com/telechargements/utilitaires/5-4.htm

Sous le nouveau Menu [ Menu des listes ... ]
Choisir option 6 [ Énumère Code Modules ... ] et/ou
Choisir option 7 [ Énumère Code Macros ... ]

mousnynao


Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout ce
que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac





Avatar
LSteph
Bonsoir Jac,

Sub RapportProj()
Dim oMod As VBComponent, i As Long, j As Integer
Dim myProc As String, myCell As Range
i = 1
Application.ScreenUpdating = False
Worksheets.Add
With ActiveSheet
.Name = "Rapport projet " & Format(Now, "ddmmyyyy_hhnnss")
.Cells(1) = "Nom de module"
.Cells(2) = "Procèdures"
.Cells(3) = "Détail ligne"
End With

For Each oMod In ThisWorkbook.VBProject.VBComponents
i = i + 1
With oMod.CodeModule
For j = 1 To .CountOfLines
If Len(.Lines(j, 1)) > 1 And _
.ProcOfLine(j, vbext_pk_Proc) <> myProc Then
myProc = .ProcOfLine(j, vbext_pk_Proc)
Set myCell = [a65536].End(xlUp)(2)
myCell = oMod.Name
myCell.Offset(0, 1) = myProc
myCell.Offset(0, 2) = .Lines(j, 1)
End If
Next j
End With
Next

End Sub

'Cordialement

'lSteph

Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout ce
que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac




Avatar
Hervé
Bonsoir Jac,
La procédure ci-dessous fait ce que tu demande mais c'est une moulinette
donc, si il y a un grand nombre de lignes de code ça peut prendre un peu de
temps, à voir.

Sub Noms_Modules()
'1 => Module standard
'2 => Module de Classe
'3 => UserForm
'100 => ThisWorkbook + Feuille
Dim CollectionModule As Object
Dim Module As Object
Dim Tbl
Dim Pos As Integer
Dim I As Integer, J As Integer
Dim K As Integer
On Error Resume Next
'défini dans un tableau les mots
'à chercher
Tbl = Array("Sub", _
"Function", _
"Public Sub", _
"Public Function", _
"Private Sub", _
"Private Function")

Set CollectionModule = ActiveWorkbook _
.VBProject.VBComponents
For Each Module In CollectionModule
'recherche les Modules standards
'de classes et d'UserForms
Select Case Module.Type
Case 1, 2, 3
K = K + 1
'inscrit le nom du module en colonne A
'de la feuille active (elle doit être vierge !!!)
'avec son type puis le mets en gras
Range("A" & K) = Module.Name & _
" (" & Module.Type & ")"
Range("A" & K).Font.Bold = True
'recherche les lignes commençant par
'les noms du tableau et les inscrit
'en colonne B. C'est une moulinette
'qui passe toutes les lignes pour
'chaque nom du tableau
With Module.CodeModule
For I = 0 To UBound(Tbl)
For J = 1 To .CountOfLines
Pos = InStr(.Lines(J, 1), Tbl(I))
If Pos = 1 Then
K = K + 1
Range("B" & K) = .Lines(J, 1)
End If
Next J
Next I
End With
End Select
Next

Set CollectionModule = Nothing
Set Module = Nothing
Erase Tbl
End Sub

Hervé.


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

Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout
ce

que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac




Avatar
Jac
Bonjour Daniel,
merci de têtre penché sur mon cas.
J'ai un problème dans cette macro : je ne trouve pas Microsoft Forms 2.0
Object Library dans Outils / Références du Vba (XL XP) donc dès la mise en
route une erreur de compilation est annoncée : "Type défini par
l'utilisateur non défini".
Donc, je ne sais pas quoi faire pour aller plus loin...

"Daniel.j" a écrit dans le message de news:

Une macro de Laurent
Mais qui ne donne pas le nom du module
Sub ListeMacros()
' LL
Dim Macro As String, Racc As String
Dim Rpt As String, I As Integer

Application.ScreenUpdating = False
Workbooks.Add.Worksheets(1).[A1:B1] = [{"Procédure","Raccourci"}]

SendKeys "%{F8}%a{PGUP}{TAB}{ESC}"

'nécessite une référence à la bibliothèque
'Microsoft Forms 2.0 Object Library
With New DataObject
Do
Rpt = "%{F8}{TAB}" & Application.Rept("{DOWN}", I)
SendKeys Rpt & "%n^c{ESC}", True
.GetFromClipboard
If Macro = .GetText(1) Then Exit Do
Macro = .GetText(1)
SendKeys Rpt & "%t^c{ESC}{ESC}", True
.GetFromClipboard
Racc = .GetText(1)
I = I + 1
Cells(I + 1, 1) = Macro
If Racc <> Macro Then Cells(I + 1, 2) = "Ctrl-" & Racc
Loop
End With
With Columns("A:B")
.AutoFit
.Sort [A1], Header:=xlYes
.CurrentRegion.AutoFormat xlRangeAutoFormatColor2
End With
End Sub
Daniel

--
VBAXL
http://dj.joss.free.fr/

FAQ MPFE
FAQ du forum microsoft.public.fr.excel
http://dj.joss.free.fr/faq.htm
"Jac" a écrit dans le message de news:

Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout
ce que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac







Avatar
Jac
Merci Hervé,
mais ça ne marche pas pour le moment : après Select Case Module.type, ça
saute sur End Select et la macro se termine, sans repasser par Next.

"Hervé" a écrit dans le message de news:
%
Bonsoir Jac,
La procédure ci-dessous fait ce que tu demande mais c'est une moulinette
donc, si il y a un grand nombre de lignes de code ça peut prendre un peu
de
temps, à voir.

Sub Noms_Modules()
'1 => Module standard
'2 => Module de Classe
'3 => UserForm
'100 => ThisWorkbook + Feuille
Dim CollectionModule As Object
Dim Module As Object
Dim Tbl
Dim Pos As Integer
Dim I As Integer, J As Integer
Dim K As Integer
On Error Resume Next
'défini dans un tableau les mots
'à chercher
Tbl = Array("Sub", _
"Function", _
"Public Sub", _
"Public Function", _
"Private Sub", _
"Private Function")

Set CollectionModule = ActiveWorkbook _
.VBProject.VBComponents
For Each Module In CollectionModule
'recherche les Modules standards
'de classes et d'UserForms
Select Case Module.Type
Case 1, 2, 3
K = K + 1
'inscrit le nom du module en colonne A
'de la feuille active (elle doit être vierge !!!)
'avec son type puis le mets en gras
Range("A" & K) = Module.Name & _
" (" & Module.Type & ")"
Range("A" & K).Font.Bold = True
'recherche les lignes commençant par
'les noms du tableau et les inscrit
'en colonne B. C'est une moulinette
'qui passe toutes les lignes pour
'chaque nom du tableau
With Module.CodeModule
For I = 0 To UBound(Tbl)
For J = 1 To .CountOfLines
Pos = InStr(.Lines(J, 1), Tbl(I))
If Pos = 1 Then
K = K + 1
Range("B" & K) = .Lines(J, 1)
End If
Next J
Next I
End With
End Select
Next

Set CollectionModule = Nothing
Set Module = Nothing
Erase Tbl
End Sub

Hervé.


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

Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout
ce

que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac




Avatar
Jac
Bonsoir Steph,
merci de t'être penché sur ma requête.
Mon seul problème reste le suivant : cette macro agit dans le classeur qui
la contient et moi, j'aurais aimé pouvoir mettre cette macro dans un
classeur invisible et générer la liste des macros avec un raccourci clavier
dans le classeur actif. Est-ce possible ?


"LSteph" a écrit dans le message de news:
%
Bonsoir Jac,

Sub RapportProj()
Dim oMod As VBComponent, i As Long, j As Integer
Dim myProc As String, myCell As Range
i = 1
Application.ScreenUpdating = False
Worksheets.Add
With ActiveSheet
.Name = "Rapport projet " & Format(Now, "ddmmyyyy_hhnnss")
.Cells(1) = "Nom de module"
.Cells(2) = "Procèdures"
.Cells(3) = "Détail ligne"
End With

For Each oMod In ThisWorkbook.VBProject.VBComponents
i = i + 1
With oMod.CodeModule
For j = 1 To .CountOfLines
If Len(.Lines(j, 1)) > 1 And _
.ProcOfLine(j, vbext_pk_Proc) <> myProc Then
myProc = .ProcOfLine(j, vbext_pk_Proc)
Set myCell = [a65536].End(xlUp)(2)
myCell = oMod.Name
myCell.Offset(0, 1) = myProc
myCell.Offset(0, 2) = .Lines(j, 1)
End If
Next j
End With
Next

End Sub

'Cordialement

'lSteph

Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout
ce que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac




Avatar
LSteph
oui donc:

Sub RapportProj()
Dim oMod As VBComponent, J As Integer
Dim myProc As String, myCell As Range
Application.ScreenUpdating = False
Worksheets.Add
With ActiveSheet
.Name = "Rapport projet " & Format(Now, "ddmmyyyy_hhnnss")
.Cells(1) = "Nom de module"
.Cells(2) = "Procèdures"
.Cells(3) = "Détail ligne"
End With
For Each oMod In ActiveWorkbook.VBProject.VBComponents
With oMod.CodeModule
For J = 1 To .CountOfLines
If Len(.Lines(J, 1)) > 1 And _
.ProcOfLine(J, vbext_pk_Proc) <> myProc Then
myProc = .ProcOfLine(J, vbext_pk_Proc)
Set myCell = [a65536].End(xlUp)(2)
myCell = oMod.Name
myCell.Offset(0, 1) = myProc
myCell.Offset(0, 2) = .Lines(J, 1)
End If
Next J
End With
Next
End Sub

Bonsoir Steph,
merci de t'être penché sur ma requête.
Mon seul problème reste le suivant : cette macro agit dans le classeur qui
la contient et moi, j'aurais aimé pouvoir mettre cette macro dans un
classeur invisible et générer la liste des macros avec un raccourci clavier
dans le classeur actif. Est-ce possible ?


"LSteph" a écrit dans le message de news:
%
Bonsoir Jac,

Sub RapportProj()
Dim oMod As VBComponent, i As Long, j As Integer
Dim myProc As String, myCell As Range
i = 1
Application.ScreenUpdating = False
Worksheets.Add
With ActiveSheet
.Name = "Rapport projet " & Format(Now, "ddmmyyyy_hhnnss")
.Cells(1) = "Nom de module"
.Cells(2) = "Procèdures"
.Cells(3) = "Détail ligne"
End With

For Each oMod In ThisWorkbook.VBProject.VBComponents
i = i + 1
With oMod.CodeModule
For j = 1 To .CountOfLines
If Len(.Lines(j, 1)) > 1 And _
.ProcOfLine(j, vbext_pk_Proc) <> myProc Then
myProc = .ProcOfLine(j, vbext_pk_Proc)
Set myCell = [a65536].End(xlUp)(2)
myCell = oMod.Name
myCell.Offset(0, 1) = myProc
myCell.Offset(0, 2) = .Lines(j, 1)
End If
Next j
End With
Next

End Sub

'Cordialement

'lSteph

Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout
ce que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac








Avatar
LSteph
juste pour le reste..
...le raccourci clavier, c'est contraire à mes pratiques
mais si tu es prêt à te priver de ceux qui existent pour des commandes
d'excel en y associant CTrl+ une lettre
dans outils macros
sélectionne la macro puis clique sur options.


un bouton outil ou commande de menu serait amha plus approprié.

AmiCordialement.

lSteph

Bonsoir Steph,
merci de t'être penché sur ma requête.
Mon seul problème reste le suivant : cette macro agit dans le classeur qui
la contient et moi, j'aurais aimé pouvoir mettre cette macro dans un
classeur invisible et générer la liste des macros avec un raccourci clavier
dans le classeur actif. Est-ce possible ?


"LSteph" a écrit dans le message de news:
%
Bonsoir Jac,

Sub RapportProj()
Dim oMod As VBComponent, i As Long, j As Integer
Dim myProc As String, myCell As Range
i = 1
Application.ScreenUpdating = False
Worksheets.Add
With ActiveSheet
.Name = "Rapport projet " & Format(Now, "ddmmyyyy_hhnnss")
.Cells(1) = "Nom de module"
.Cells(2) = "Procèdures"
.Cells(3) = "Détail ligne"
End With

For Each oMod In ThisWorkbook.VBProject.VBComponents
i = i + 1
With oMod.CodeModule
For j = 1 To .CountOfLines
If Len(.Lines(j, 1)) > 1 And _
.ProcOfLine(j, vbext_pk_Proc) <> myProc Then
myProc = .ProcOfLine(j, vbext_pk_Proc)
Set myCell = [a65536].End(xlUp)(2)
myCell = oMod.Name
myCell.Offset(0, 1) = myProc
myCell.Offset(0, 2) = .Lines(j, 1)
End If
Next j
End With
Next

End Sub

'Cordialement

'lSteph

Bonjour à tous,

j'aimerais pourvoir générer dans une feuille, la liste des macros (nom du
module + nom des macros) afin de pouvoir un peu mieux naviguer dans tout
ce que j'ai mis dans mon projet.

Merci d'avance à qui me mettra sur la voie.

Jac








1 2