Vba : liste des macros

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.j
Le #4608371
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"
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



MichDenis
Le #4605891
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" 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
Mousnynao
Le #4605821
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





LSteph
Le #4605801
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




Hervé
Le #4605771
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"
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




Jac
Le #4605591
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"
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"
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







Jac
Le #4605571
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é" %
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"
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




Jac
Le #4605561
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" %
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




LSteph
Le #4605541
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" %
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








LSteph
Le #4605521
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" %
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








Publicité
Poster une réponse
Anonyme