[Déplacé .Net --> VBA] analyser une macro [Résolu]

Signaler
Messages postés
12
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
11 octobre 2009
-
Messages postés
12
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
11 octobre 2009
-
Bonjour,

Existe-t-il un moyen d'analyser le fonctionnement d'une macro ?

Je m'explique : j'ai un classeur qui contient beaucoup de macros (modules, fonctions, procédures), qui en appelent d'autres.
Seulement j'ai un problème lors de l'exécution. En effet la compréhension de la macro est difficile parceque lors de l'execution, ça n'arrête pas de passer d'un module à un autre et d'appeler des fonctions à l'intérieur d'autres fonctions, etc.

Y a-t-il un moyen de voir sur un seul fichier tout ce que VB réalise lorsque les macros sont lues ?

Merci,

6 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Salut
Si le programme passe d'une procédure à une autre, c'est qu'il est bien conçu : En effet, à chaque fois que tu as une action à faire, les règles de l'art disent qu'il faut externaliser cette fonction car elle pourra être appeler plus tard, par d'autres procédures + cela fait des procédures pas trop longues, faciles à analyser.
Normalement, le nom de ces procédures doit décrire l'action/la fonction qui est exécutée à l'intérieur. L'anglais est d'ailleurs plus pratique pour ces noms.

Es-tu familier des notions de Sub et Function ? de Private et Public ?
Ce sont de bonnes indications pour imaginer ce que la procédure fait.

Côté outil, je te précaunise MzTools pour VBA (le VB de Excel/Word) : c'est gratuit.
Cet outil permet, parmi ces multiples fonctions, de savoir quelle autre procédure appelle la procédure dans laquelle tu es actuellement : très pratique.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
12
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
11 octobre 2009

Je suis bien d'accord pour l'externalisation, mais là je trouve que c'est un peu à l'extrême. J'ai des fonctions qui incrémente de 1, des fonctions pour changer le nom, pour faire un "if".
Le problème de mon fichier est que les variables ont des noms de fonctions et de variables peut équivoques(Fl, l, a, etc) sur 2500 lignes de codes et pas, ou presque, de commentaires.
Est-ce qu'il y a un moyen de voir la compilation du programme ?(en gros voir toutes les commandes qui vont s'éxecuter sur une même page)

Je ne connaissais pas MzTools, je pense que ça va bien m'aider, surtout la génération de documentation XML.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Pas bien compris ton histoire de compilation et de page ... mais non, la partie compilation est interne à Excel.
Commence par donner des noms parlant à tes variables (*) et tes fonctions. Ca aide beaucoup à y voir clair.
Grace à MzTools, il te suffit de placer ton cuirseur dans une procédure et de cliquer sur une icone pour voir la liste des autres procédures qui l'appellent : ça, ça aide des fois à comprendre la structure.
(*) Variables : La limite de longueur du nom d'une variable est grande (plus le chiffre en tête, je crois 256 car) : Tant qu'à faire, pense à mettre en tête le type de variable : i ou int pour Integer, l ou lng pour Long, s ou str pour String, a ou arr pour Array, etc, mais tu mets ce que tu veux, du moment que du premier coup d'oeil tu sais de quel type est cette variable et surtout ce qu'elle est sensée renfermer.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Premiers boulots aussi :
Ajouter un "Option Explicit" en tête de chaque page de code et relancer l'appli jusqu'à ce que tout remarche.
Cette option oblige à déclarer les variables. C'est chiant à faire, mais ça aide beaucoup à comprendre si cette variable intéresse tout le projet ou seulement le module ou la procédure en cours + d'être sûr du type de la variable.
Messages postés
12
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
11 octobre 2009

En fait il semble que tout a été rédigé par une sorte de CMS pour VBA (ça existe ça ?).

J'ai l'impression que le programmeur s'est bien pris la tête. Pour obtenir le nom du classeur actuel, je passe par 8 fonctions différentes...
Je suis en train de supprimer les procédures ou fonctions qui ne sont appelées qu'une seule fois, après je vais renommer chaque variable.

Merci du conseil
Messages postés
12
Date d'inscription
lundi 6 juillet 2009
Statut
Membre
Dernière intervention
11 octobre 2009

Ce que je voulais savoir c'est si le code est :

sub macro1()
a=1
call macro2
call macro3
end sub
sub macro2()
a=a+1
call macro3
end sub
sub macro3()
a=a+2
end sub

Comment obtenir quelque chose qui donnerait :
Execution du programme :
a=1
a=a+1
a=a+2
a=a+2