1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| Sub ListObj()
'====================================================================================================
'Nécessite d'activer la référence "Microsoft Visual basic For Application Extensibility 5.3"
'====================================================================================================
Dim Ajout As Integer, VBCmp As VBComponent, cdMod As CodeModule, Wb As Workbook, Debut As Long, I, nomTableau, NbProc As Long, NomC As String
'Indiquez le nom du classeur ouvert
Set Wb = ThisWorkbook
'Tester que Databodyrange existe ( => que le tableau n'est pas vide avant de le vider)
If Not Range("ListeModulesProc").ListObject.DataBodyRange Is Nothing Then
'Efface la liste des procédures
Range("ListeModulesProc").ListObject.DataBodyRange.Delete
End If
Ajout = 2
'Boucle sur tous les modules & les procédures du projet :
For Each VBCmp In Wb.VBProject.VBComponents
NbProc = 0
Set cdMod = VBCmp.CodeModule
With cdMod
Debut = .CountOfDeclarationLines + 1
NomC = VBCmp.Name
If VBCmp.Type = vbext_ct_Document Then NomC = NomC & " (" & VBCmp.Properties("Name").Value & ")"
Do Until Debut >= .CountOfLines
NbProc = NbProc + 1
Cells(Ajout + I, 1) = NomC 'listage des modules dans la feuille active du classeur actif
Cells(Ajout + I, 2) = .ProcOfLine(Debut, vbext_pk_Proc) 'listage des procédures dans la feuille active du classeur actif
Debut = Debut + .ProcCountLines(.ProcOfLine(Debut, vbext_pk_Proc), vbext_pk_Proc)
Ajout = Ajout + 1
Loop
End With
If NbProc = 0 Then
Cells(Ajout + I, 1) = NomC
Ajout = Ajout + 1
End If
Next VBCmp
ActiveSheet.Range("A:C").Columns.AutoFit
nomTableau = "ListeModulesProc"
Range(nomTableau).Sort key1:=Range(nomTableau & "[Nom Module]"), Header:=xlYes, order1:=xlAscending
Range("E2").Select
End Sub |
Partager