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

variables

2 réponses
Avatar
Michel
Bonjour,

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 .....) ?

Merci

M.

2 réponses

Avatar
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
'-------------------------------------------------------
Avatar
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.

Les modules vides ne sont pas listés

'-------------------------------------------------------


C'est super

Merci beaucoup

Bonne fin de soirée

M.