XL 2019 Récupérer la structure VBA d'un fichier

Jacques25bis

XLDnaute Junior
Bonjour à tous,

Dans le cadre de mon boulot je dois vérifier les fichiers que l'on utilise (formule, MFC, Noms) et aussi les macros. Je me posais donc la question sans doute un peu farfelu s'il y avait moyen de récupérer la structure VBA d'un fichier. Par exemple lors de la vérification on insère un module qui créé une feuille ou sera listé :
Microsoft excel objets
Feuil1 (essai1) Macro1
Macro2
Feuil2 (essai2) Macro3
Macro4
Feuilles
Userform1 Private sub commandbutton1_click()
.....
Userform2
.....
Modules
Module1
Module2
.....

C'est en quelques sorte ce qui apparaît dans l'explorateur de projet un peu plus en détail.
Ca permettrai de réaliser une checklist de ce qui a été contrôlé ou non. Pour le moment je le fais à la main mais ça prend vite du temps surtout si on a un bon paquet de fichier à vérifier.

Merci d'avance pour votre aide.

@ plus

Jack
 

patricktoulon

XLDnaute Barbatruc
re
VB:
Sub listeMacros()
'Nécéssite d'activer la référence
'"Visual basic For Application Extensibility 5.3"
'
Dim i As Integer, Ajout As Integer, x As Integer
Dim Msg As String
Dim VBCmp As VBComponent
Dim Wb As Workbook

'Indiquez le nom du classeur ouvert
'Set Wb = ThisWorkbook
Set Wb = Workbooks("Classeur1.xls")

Ajout = 1
For Each VBCmp In Wb.VBProject.VBComponents
    Msg = VBCmp.Name
    
    With Cells(Ajout, 1)
        .Interior.ColorIndex = 6
        .Value = Msg
    End With
    
    x = Wb.VBProject.VBComponents(Msg).CodeModule.CountOfLines
    For i = 1 To x
        Cells(Ajout + i, 1) = _
            Wb.VBProject.VBComponents(Msg).CodeModule.Lines(i, 1)
    Next
    
    Ajout = Ajout + x + 2
Next VBCmp
End Sub
 

patricktoulon

XLDnaute Barbatruc
a ben là c'est sur il faut activer l'acces approuvé dans les options d'excel sinon ca sera toujours bloqué

sur 2013 c'est
fichier/options/centre de gestion de la confidentialité/paramètre des macros
et cocher l’accès approuvés au model d'object du projet vba
1642500161836.png
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Menu Développeur, commande Sécurité des macros, Paramètre des macros pour les développeurs, cochez Accès approuvé au modèle d'objet du projet VBA
J'ai ce vieux classeur qui peut peut être vous intéresser, s'il marche encore
 

Pièces jointes

  • Aide.xlsm
    62.5 KB · Affichages: 9

Jacques25bis

XLDnaute Junior
Salut Dranreb,

Merci à tous les 2 pour votre aide.
@ Patrick, ton code marche mais ne fait pas ce que je veux, je vais voir pour m'en inspirer malgré tout.
@ Dranreb, que dire si ce n'est que ton fichier fait exactement ce que je souhaite, de là à ce que je comprenne il y a un univers ;-) je vais éplucher tout ça pour essayer d'en comprendre une partie mais c'est en tout cas du sacré boulot Bravo.

@ plus
 

Jacques25bis

XLDnaute Junior
Salut Dranreb, Patrick, le forum,

Dranreb, j'essaye de décortiquer ton code et j'ai quelques questions si tu me le permets :

- Dans les déclaration de variable à quoi correspondent Vbide.component et vbide.vbext_procKind
- Pour le Me. je le connaissais pour les userforms mais dans ton code il correspond à quoi? à l'onglet "aide" ?
- les : par exemple ligne 18 "With Application: .Calculation = xlCalculationManual: .ScreenUpdating = False..." j'imagine que c'est pour éviter de revenir à la ligne à chaque fois ?
- ligne 23 "InitInvent "AidFeui": Z = Aide.Name" comment dois-je le comprendre ? Nmlst de ta sub InitInvent prend la valeur AidFeui?
- Enfin peux tu m'expliquer ta sub Ajouter et aussi la ligne "Ajouter Zn, stat" ligne 26

Avec ça j'avancerai un peu dans la compréhension.
Merci d'avance de ton coup de main.

@ plus
Jack
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
La bibliothèque VBIDE est contenue dans un fichier nommé VBE6EXT.OLB Elle se charge en cochant la référence "Microsoft Visual Basic for Application Extensibility 5.3". Son membre VBComponent est un type de donnée objet destiné à représenter un composant vba, tel qu'un module entre autres.
Me correspond toujours à l'exemplaire sur lequel s'applique le code du module objet. En l'occurrence, en effet, l'objet Worksheet représentant cette feuille "Aide".

'With Application' permet d'éviter la répétition de 'Application.' en mettant simplement '.' à la place. C'est seulement ': ' comme sétarateur qui permet plusieurs instructions sur la même ligne. Ce sont ici des dispositions classique pour mettre le mode de calcul en manuel, désactiver la mise à jour de l'affichage à chaque commande Excel ainsi que le déclenchement des évènements Excel.

Comme signalé dans la feuille si on coche Aide incluse" :
Usage interne à "Worksheet_Activate". Prépare l'inventaire d'une de ces listes.
Oui c'est ça, c'est la valeur de l'argument NmLst reçu par InitInvent. J'aurais dû le prendre ByVal d'ailleurs. Derrière j'aurais pu écrire Z = Me.Name plutôt. J'ai fait ça il y a longtemps, vous savez.

La Sub Ajouter Insère une ligne en y renseignant essentiellement le nom en colonne C, le statut de filtrage en colonne A et éventuellement un objet automatique pour la D nommée AidObjet. Mais c'est long. Je devrais peut être réécrire tout ça en le préparant dans un tableau dynamique …
 

Statistiques des forums

Discussions
312 166
Messages
2 085 894
Membres
103 021
dernier inscrit
Sergyl75