Il y à t'il un moyen avec exel 2007 de faire un rapport de toutes les
variables (globales et locales) ainssi que l'endroit ou elle sont
initialisées et utilisées (modules feuilles .....) ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Michel,
Voici un fichier exemple : http://cjoint.com/?lquUiuGv5L
Voici la procédure qui est dans le fichier... Attention aux coupures de lignes de code inopportunes
Cette procédure affiche : Colonne A:A Le nom des modules où sont les procédures et variables Colonne B:B Affiche le nom des procédures et fonctions contenues dans le module Colonne C:C affiche les variables publics ou locales du module.
Les modules vides ne sont pas listés
'------------------------------------------------------- Sub ListeMacrosModule()
Dim Wbk As Workbook, Sh As Worksheet Dim VBCodeMod As Object, C As Object Dim StartLine As Long, i As Long, ProcName As String Dim A As Integer, LaLigne As Integer Dim TexteLigne As String, L As Integer
'Identifie le classeur source où sont les procédures Set Wbk = ThisWorkbook 'ou ce que tu veux
'Détruit la feuille si elle existe déjà. On Error Resume Next Application.DisplayAlerts = False Worksheets("MesProcs").Delete Application.DisplayAlerts = True
'Ajoute une feuille au projet où sera fait le listing Set Sh = Wbk.Worksheets.Add 'Nomme la feuille i = 2 'Boucle sur toutes les modules du projet, incluant le formulaire. For Each C In Wbk.VBProject.VBComponents Set VBCodeMod = Wbk.VBProject.VBComponents(C.Name).CodeModule A = 0 With VBCodeMod If .countoflines > 0 Then Sh.Cells(i, 1).Value = C.Name End If LaLigne = 1: A = 0 Do Until LaLigne >= .countoflines TexteLigne = .Lines(LaLigne, 1) If TexteLigne <> "" Then If InStr(1, TexteLigne, "dim ", vbTextCompare) > 0 Then LaLigne = LaLigne + 1 i = i + 1 A = 1 End If If InStr(1, TexteLigne, "public ", vbTextCompare) > 0 Then LaLigne = LaLigne + 1 i = i + 1 A = 1 End If If A = 0 Then i = i + 1 Sh.Cells(i, 1).Offset(, 1).Value = .ProcOfLine(LaLigne, 0) StartLine = LaLigne + .ProcCountLines(.ProcOfLine(LaLigne, _ 0), 0) For L = LaLigne To StartLine If InStr(1, .Lines(L, 1), "Dim ", vbTextCompare) > 0 Or _ InStr(1, .Lines(L, 1), "Static ", vbTextCompare) > 0 Then If InStr(1, .Lines(L, 1), "Instr", vbTextCompare) = 0 Then i = i + 1 Sh.Cells(i, 1).Offset(, 2).Value = .Lines(L, 1) End If End If Next LaLigne = StartLine i = i + 1 Else A = 0 Sh.Cells(i, 1).Offset(, 2).Value = TexteLigne End If Else LaLigne = LaLigne + 1 End If Loop End With Next With Sh .Name = "MesProcs" .Range("A1") = "Nom du Module" .Range("B1") = "Nom de la procédure" .Range("C1") = "Nom des variables" With .Range("A1:C1") .Font.Bold = True .EntireColumn.AutoFit = True End With End With Set VBCodeMod = Nothing: Set C = Nothing Set Wbk = Nothing: Set Sh = Nothing End Sub '-------------------------------------------------------
Bonjour Michel,
Voici un fichier exemple : http://cjoint.com/?lquUiuGv5L
Voici la procédure qui est dans le fichier...
Attention aux coupures de lignes de code inopportunes
Cette procédure affiche :
Colonne A:A Le nom des modules où sont les procédures et variables
Colonne B:B Affiche le nom des procédures et fonctions contenues dans le module
Colonne C:C affiche les variables publics ou locales du module.
Les modules vides ne sont pas listés
'-------------------------------------------------------
Sub ListeMacrosModule()
Dim Wbk As Workbook, Sh As Worksheet
Dim VBCodeMod As Object, C As Object
Dim StartLine As Long, i As Long, ProcName As String
Dim A As Integer, LaLigne As Integer
Dim TexteLigne As String, L As Integer
'Identifie le classeur source où sont les procédures
Set Wbk = ThisWorkbook 'ou ce que tu veux
'Détruit la feuille si elle existe déjà.
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("MesProcs").Delete
Application.DisplayAlerts = True
'Ajoute une feuille au projet où sera fait le listing
Set Sh = Wbk.Worksheets.Add
'Nomme la feuille
i = 2
'Boucle sur toutes les modules du projet, incluant le formulaire.
For Each C In Wbk.VBProject.VBComponents
Set VBCodeMod = Wbk.VBProject.VBComponents(C.Name).CodeModule
A = 0
With VBCodeMod
If .countoflines > 0 Then
Sh.Cells(i, 1).Value = C.Name
End If
LaLigne = 1: A = 0
Do Until LaLigne >= .countoflines
TexteLigne = .Lines(LaLigne, 1)
If TexteLigne <> "" Then
If InStr(1, TexteLigne, "dim ", vbTextCompare) > 0 Then
LaLigne = LaLigne + 1
i = i + 1
A = 1
End If
If InStr(1, TexteLigne, "public ", vbTextCompare) > 0 Then
LaLigne = LaLigne + 1
i = i + 1
A = 1
End If
If A = 0 Then
i = i + 1
Sh.Cells(i, 1).Offset(, 1).Value = .ProcOfLine(LaLigne, 0)
StartLine = LaLigne + .ProcCountLines(.ProcOfLine(LaLigne, _
0), 0)
For L = LaLigne To StartLine
If InStr(1, .Lines(L, 1), "Dim ", vbTextCompare) > 0 Or _
InStr(1, .Lines(L, 1), "Static ", vbTextCompare) > 0 Then
If InStr(1, .Lines(L, 1), "Instr", vbTextCompare) = 0 Then
i = i + 1
Sh.Cells(i, 1).Offset(, 2).Value = .Lines(L, 1)
End If
End If
Next
LaLigne = StartLine
i = i + 1
Else
A = 0
Sh.Cells(i, 1).Offset(, 2).Value = TexteLigne
End If
Else
LaLigne = LaLigne + 1
End If
Loop
End With
Next
With Sh
.Name = "MesProcs"
.Range("A1") = "Nom du Module"
.Range("B1") = "Nom de la procédure"
.Range("C1") = "Nom des variables"
With .Range("A1:C1")
.Font.Bold = True
.EntireColumn.AutoFit = True
End With
End With
Set VBCodeMod = Nothing: Set C = Nothing
Set Wbk = Nothing: Set Sh = Nothing
End Sub
'-------------------------------------------------------
Voici un fichier exemple : http://cjoint.com/?lquUiuGv5L
Voici la procédure qui est dans le fichier... Attention aux coupures de lignes de code inopportunes
Cette procédure affiche : Colonne A:A Le nom des modules où sont les procédures et variables Colonne B:B Affiche le nom des procédures et fonctions contenues dans le module Colonne C:C affiche les variables publics ou locales du module.
Les modules vides ne sont pas listés
'------------------------------------------------------- Sub ListeMacrosModule()
Dim Wbk As Workbook, Sh As Worksheet Dim VBCodeMod As Object, C As Object Dim StartLine As Long, i As Long, ProcName As String Dim A As Integer, LaLigne As Integer Dim TexteLigne As String, L As Integer
'Identifie le classeur source où sont les procédures Set Wbk = ThisWorkbook 'ou ce que tu veux
'Détruit la feuille si elle existe déjà. On Error Resume Next Application.DisplayAlerts = False Worksheets("MesProcs").Delete Application.DisplayAlerts = True
'Ajoute une feuille au projet où sera fait le listing Set Sh = Wbk.Worksheets.Add 'Nomme la feuille i = 2 'Boucle sur toutes les modules du projet, incluant le formulaire. For Each C In Wbk.VBProject.VBComponents Set VBCodeMod = Wbk.VBProject.VBComponents(C.Name).CodeModule A = 0 With VBCodeMod If .countoflines > 0 Then Sh.Cells(i, 1).Value = C.Name End If LaLigne = 1: A = 0 Do Until LaLigne >= .countoflines TexteLigne = .Lines(LaLigne, 1) If TexteLigne <> "" Then If InStr(1, TexteLigne, "dim ", vbTextCompare) > 0 Then LaLigne = LaLigne + 1 i = i + 1 A = 1 End If If InStr(1, TexteLigne, "public ", vbTextCompare) > 0 Then LaLigne = LaLigne + 1 i = i + 1 A = 1 End If If A = 0 Then i = i + 1 Sh.Cells(i, 1).Offset(, 1).Value = .ProcOfLine(LaLigne, 0) StartLine = LaLigne + .ProcCountLines(.ProcOfLine(LaLigne, _ 0), 0) For L = LaLigne To StartLine If InStr(1, .Lines(L, 1), "Dim ", vbTextCompare) > 0 Or _ InStr(1, .Lines(L, 1), "Static ", vbTextCompare) > 0 Then If InStr(1, .Lines(L, 1), "Instr", vbTextCompare) = 0 Then i = i + 1 Sh.Cells(i, 1).Offset(, 2).Value = .Lines(L, 1) End If End If Next LaLigne = StartLine i = i + 1 Else A = 0 Sh.Cells(i, 1).Offset(, 2).Value = TexteLigne End If Else LaLigne = LaLigne + 1 End If Loop End With Next With Sh .Name = "MesProcs" .Range("A1") = "Nom du Module" .Range("B1") = "Nom de la procédure" .Range("C1") = "Nom des variables" With .Range("A1:C1") .Font.Bold = True .EntireColumn.AutoFit = True End With End With Set VBCodeMod = Nothing: Set C = Nothing Set Wbk = Nothing: Set Sh = Nothing End Sub '-------------------------------------------------------
Michel
michdenis a formulé ce lundi :
Bonjour Michel,
Voici un fichier exemple : http://cjoint.com/?lquUiuGv5L
Voici la procédure qui est dans le fichier... Attention aux coupures de lignes de code inopportunes
Cette procédure affiche : Colonne A:A Le nom des modules où sont les procédures et variables Colonne B:B Affiche le nom des procédures et fonctions contenues dans le module Colonne C:C affiche les variables publics ou locales du module.
Voici un fichier exemple : http://cjoint.com/?lquUiuGv5L
Voici la procédure qui est dans le fichier...
Attention aux coupures de lignes de code inopportunes
Cette procédure affiche :
Colonne A:A Le nom des modules où sont les procédures et variables
Colonne B:B Affiche le nom des procédures et fonctions contenues dans le
module Colonne C:C affiche les variables publics ou locales du module.
Voici un fichier exemple : http://cjoint.com/?lquUiuGv5L
Voici la procédure qui est dans le fichier... Attention aux coupures de lignes de code inopportunes
Cette procédure affiche : Colonne A:A Le nom des modules où sont les procédures et variables Colonne B:B Affiche le nom des procédures et fonctions contenues dans le module Colonne C:C affiche les variables publics ou locales du module.