IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Cartography - Lister les Appels


Sujet :

Contribuez

  1. #1
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut Cartography - Lister les Appels
    Bonjour,

    Je souhaite contribuer en publiant cet outil.
    Je pense qu'il conviendrait a la section Télechargement\Outils de Access / Excel / Word / Powerpoint.
    Il fonctionne avec toutes les applications d'office (testé sous 97 et en partie sous 200).
    Ce code permet de lister tous les appels d'un code avec une fonction/Sub de départ.
    Voici la description que j'ai préparée (Nb: je l'ai traduit aussi en anglais car je travail en anglais et cela pourrait peut être être un plus si ca gêne dites le et je l'enlève):

    (En piece jointe le module cartography)

    Requis : la référence à la bibliothèque "Microsoft Visual Basic for Applications Extensibility 5.3" ( ou plus récent)

    Cet outil permet de lister tous les appels de fonctions (sub et function) d'une fonction ou procédure donné.
    Elle s'utilise comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CartographyCode "MaFonction"
    le retour se fait dans la fenetre d'execution (fenetre de débuggage) sous cette forme :
    toto [Module1(4) -> Module1.titi]
    titi [Module1(9) -> Module1.tata]
    toto [Module1(5) -> Module1.tata]


    Dans ce cas :
    • la fonction/procedure toto appelle titi situé dans le module Module1 à la ligne 4 (du module).
    • Puis titi appelle la fonction tata à la ligne 8 (du module1).
    • Puis toto appelle tata du module1 à la ligne 5.


    J'ai besoin d'au moins un testeur pour cet outil qui fonctionne aussi bien sous Access que sous Excel.

    Si cette partie fonctionne bien je pourrait utiliser une interface graphique comme un TreeView par exemple
    pour la version Access (puis peut être pour excel via un UserForm).

    Merci pour vos remarques et critiques constructuctives.

    ---------------------------------------------------------

    (Attached file : cartography module)

    Requirements : Référence to library "Microsoft Visual Basic for Applications Extensibility 5.3" ( or better)

    This tool list all of calls procedures (Subs and Functions) of a targeted function/procedure.
    See below for an example of use :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CartographyCode "MaFonction"
    the return are in the immediate window (Debug window) like this:
    toto [Module1(4) -> Module1.titi]
    titi [Module1(9) -> Module1.tata]
    toto [Module1(5) -> Module1.tata]
    In this case,
    • the function/sub toto call titi located in the module Module1 at the line 4 (of the Module1)
    • Then titi call the function tata at the line 8 (of Module1)
    • Then toto call tata from Module1 at the line 5


    I need at least one testor for this tool. Please notes that it work for Access and Excel.

    If this part work good, i will can do an user interface as a TreeView for example for Access version
    (then may be for Excel via a UserForm)

    Thanks for remaks and critics building.
    Fichiers attachés Fichiers attachés
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Super !

    Par contre si on pouvait choisir la langue française ce serait un gros plus !



    à bientôt.

    [EDIT]
    laisse tomber la remarque
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Nan nan voici la version francaise (en ce qui concerne les commentaires )

    A ton service
    Fichiers attachés Fichiers attachés
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Apparement il ne gère pas les modules de classe, du coup une gestion d'erreurs s'avère obligatoire.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Je cherche la dessus et je te tiens au courrant.

    Ca me parrait quand même un peu bizarre mais c'est possible. Ca voudrait dire que les modules de classes ne sont pas compris dans les composants?

    EDIT :

    Je referait un test demain avec un module de classe.
    Les modules de classes sont pris en compte
    Voici ce que dis la msdn :

    VBComponent Object
    See Also Example Properties Methods Events Specifics




    Represents a component, such as a class module or standard module, contained in a project.

    Remarks

    Use the VBComponent object to access the code module associated with a component or to change a component's property settings.

    You can use the Type property to find out what type of component the VBComponent object refers to. Use the Collection property to find out what collection the component is in.
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Oui à la condition que tu utilises bien tous les paramètres de ProcStartLine.

    Si tu fais le test tu verras qu'il ne prend que les Procédures et Fonctions mais pas la GET, LET ni SET.

    Avec une gestion d'erreur tu devrais très facilement toutes les parcourir.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  7. #7
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Merci Fab, je l'ai vu et ça fait remonter un bug microsoft j'explique :

    Cette fonction permet de lire le nom des fonctions et procédures (en ignorant les propriétés) à cause du paramètre que je lui ai donné, mais le fait est qu'elle renvoie aussi le nom des propriétés alors qu'elle n'est pas censé le faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurProc = Comp.CodeModule.ProcOfLine(i, vbext_pk_Proc)
    En paramètre j'avait bien spécifié Proc donc function/Sub.

    Pour le coup je suis incapable de savoir si le nom qu'il me retourne est une fonction/procedure ou propriété Set, Let, Get.

    J'ai fait une correction mais elle n'est peut-être pas appropriée, je vais essayer de faire comme tu le suggère.
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  8. #8
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Voici une nouvelle mouture qui fonctionne mieux.

    Un paramètre à l'affichage à été ajouté pour faire la distinction entre procédure, propriété let, propriété set et propriété get.
    Fichiers attachés Fichiers attachés
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    ça marche ! enfin presque...

    Dans LoadCodeStructProperty rajouter :
    et enlever le stop à la fin de LoadCodeStruct

    Et l'appel doit être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cartography "mafonction()"
    et non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cartography "mafonction"
    Manque plus qu'une joli interface du type Complément (voir le tuto).
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  10. #10
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Oups... Milles excuses pour avoir laissé trainer ses horreurs

    Par contre pour l'appel de la première fonction il est juste de faire comme tu le mentionnes seulement cela implique la gestion de paramètres et je vais y réflechir.

    Par exemple ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cartography "MaFonction(""toto"")"
    Parce que l'on a ceci comme déclaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Sub MaFonction(ByRef VName as String)
    Peux tu s'il te plaît me dire combien de temps te prends la recherche par rapport aux nombre de lignes de code au total? (A peu prêt)

    Si c'est vraiment trop long à executer je vais aussi continuer à essayer de faire une recherche dichotomique (Je possède déjà la fonction mais je doit l'appliquer correctement à la recherche des fonctions).
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  11. #11
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Voici une petite mise à jour, je me penche sur le complément mais je veux que ca reste multi applications et multi versions d'office.

    Je reflechis pour appliquer la bonne solution.
    Fichiers attachés Fichiers attachés
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  12. #12
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Excellent !

    Par contre...
    Je me suis amusé un brin à la tester sur elle-même, bien sûr, et, du coup, j'ai une question :
    j'obtiens ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CartographyCode [FR_Cartography(36) -> FR_Cartography.LoadCodeStruct{Proc}] - LoadCodeStruct()
      LoadCodeStruct [FR_Cartography(75) -> FR_Cartography.SortStrArray{Proc}] - SortStrArray(ByRef Arr()
      LoadCodeStruct [FR_Cartography(79) -> FR_Cartography.LoadCodeStructProperty{Proc}] - LoadCodeStructProperty(ByRef Comp As VBComponent, ByRef CurProc As String, ByRef Iter As Long)
    CartographyCode [FR_Cartography(37) -> FR_Cartography.ReadCallStack{Proc}] - ReadCallStack(ByRef SrchItemIter As Long, Optional ByRef Deep As Long = 0)
      ReadCallStack [FR_Cartography(181) -> FR_Cartography.ReadProcType{Proc}] - ReadProcType(ByRef Iter As Long)
    CartographyCode [FR_Cartography(37) -> FR_Cartography.SearchStartProcedure{Proc}] - SearchStartProcedure(ByRef SearchProc As String)
    Si on lit la troisième ligne en partant de la fin, on comprend que ligne 37 du module, il lance ReadCallStack
    Si on lit la deuxième ligne en partant de la fin, on comprend que ReadCallStack lance ReadProcType
    Et pour terminer, la dernière ligne nous apprend que ligne 37 du module, il y a exécution de SearchStartProcedure

    Tout cela est VRAI, mais... ce n'est pas le sens d'exécution...
    Normalement, ligne 37, il commence par exécuter SearchStartProcedure, puis lance ReadCallStack qui exécute ReadProcType

    Si tu veux faire de la cartographie, tu peux te cantonner à l'arbre des procédures, mais, en poussant un tout petit peu le bouchon, tu pourrais même proposer l'ordre d'exécution

    Qu'en dis-tu ?


    PS : ca manque cruellement de commentaire ton code

    En tous cas, très beau job, très intéressant...
    Ce serait super que tu nous fasse un petit article dessus, que tout le monde puisse en profiter

  13. #13
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonjour Max,

    Oui c'est bien vrai je n'y ai absolument pas pensé pour l'odre d'execution, de mémoire il recherche la premiere fonction / procédure rencontrée sur la ligne, mais je ne pense pas qu'il soit vrai non plus de dire que la derniere de la ligne soit celle qui ai été executée en premier.

    Pour etre sur de l'ordre d'execution il me faut des information sur le moteur VBA et surtout sur l'interpréteur par ce que sémantiquement il est vrai que les fonction / procédure évaluée en premier sont les feuilles de l'arbre sur une ligne d'execution.

    Exemple :

    Ma feuille serra executée en premier mais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonAffichage( RetourneRueEnString() & RetourneVilleEnString())
    Impossible de savoir laquelle des deux va être évaluée en premier ainsi que ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaFonctionPrincipale( FonctionRetourneParam1(), FonctionRetourneParam2())
    J'ai essayé de travailler sur les API pour avoir une vraie "Form" windows en utilisant les API mais avec le travail que j'ai en ce moment c'est un peu dur de faire de la recherche sur ce sujet.

    Je serrai très intérressé pour écrire un article mais je ne sais pas où ni comment le publier. Je pense le faire en deux partie vue que l'interface graphique n'existe pas encore.

    Merci encore d'avoir laissé un message ca me fait très plaisir. :-)
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  14. #14
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    Bonjour à tous,

    Voici une nouvelle version de cet outils prenant en compte l'analyse d'une ligne de code (suggestions de Maxence).

    Cette analyse n'est pas parfaite car elle ne detecte pas encore la différence entre une méthode et une variable portant exactement le même nom que celle-ci (Un cas rare mais possible). Elle detecte aussi les affectations des getter et setter qui ne devrait pas être le cas.

    Dans la prochaine version je pense ajouter des controles par expression régulières pour limiter ce phénomène.

    Dites moi ce que vous en pensez et si possible vos tests sur les différentes plateformes. Merci d'avance.
    Fichiers attachés Fichiers attachés
    loi de LeBlanc : Plus tard signifie jamais. extrait de Coder proprement Auteur:Robert C. Martin

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Je suis désolée, mais j'ai importé le fichier dans mon vb access, mais comment je lance la procédure ??

    merci d'avance

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/09/2009, 16h55
  2. Lister les softs installés sur un Pc
    Par Jflgb dans le forum C++Builder
    Réponses: 18
    Dernier message: 23/06/2004, 17h34
  3. [VB6] [Langage] VB6 et les appels de dll
    Par Dave63 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/01/2003, 18h20
  4. [VB6] [Réseau] Lister les ordinateurs du réseau
    Par CYFL dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/12/2002, 09h25
  5. [TP]Lister les fichiers d'un répertoire
    Par nvtitan dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 21/06/2002, 11h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo