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

VBA Discussion :

Utiliser des modules d'autre projets


Sujet :

VBA

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut Utiliser des modules d'autre projets
    Bonjour,

    L'ensemble des macros a été splitté en plusieurs projets pour des problèmes d'accès concurrent.

    Je peux ouvrir plusieurs projets en même temps dans le VB Editor mais je n'arrive pas à appeler des modules d'un autre projet. Existe-t-il une syntaxe particulière pour le faire ?

    Merci pour votre aide

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    regardes la commande :


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    On dirait que mon IDE ne reconnait pas cette commande.

    J'utilise du VBA pour MicroStation, y a t'il une référence spécifique à ajouter pour cette commande ?

  4. #4
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Aide VBA EXCEL :

    Cet exemple montre comment appeler la fonction macro My_Func_Sum, qui est définie dans la feuille macro MyCustom.xlm (cette dernière doit être ouverte). Dans cet exemple, la fonction accepte deux arguments numériques, 1 et 5.

    mySum = Application.Run("MYCUSTOM.XLM!My_Func_Sum", 1, 5)
    MsgBox "Macro result: " & mySum

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Bonjour Remi et AAlex !

    Remi, ici c'est un forum VBA dédié aux applications Office (Word, Excel, PowerPoint, Access, Outlook, Visio...).

    Mais nous essayons aussi de répondre (de nôtre mieux) aux questions VBA pour d'autres applications hôtes, notamment pour des applications CAO ou SIG.

    Pour ce qui concerne MicroStation, il faut que tu étudies son modèle objet programmable avec VBA.

    Dans les applications Office, l'objet Application offre une méthode Run() qui permet d'exécuter une procédure appartenant à un des projets actuellement chargés par l'application.
    C'est ce que AAlex a donné comme exemple avec Excel.

    Mais il n'est pas certain que cette méthode Run() soit proposée par le modèle objet de MicroStation.
    En revanche, il me semble que MicroStation V8 propose une méthode permettant de réaliser un envoi de commandes (key in) au moyen de l'objet CadInputQueue accessible par l'objet Application.

    Par exemple, pour exécuter une macro VBA (on va l'appeler LaMacro) dans un projet déjà chargé:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CadInputQueue.SendKeyin "VBA RUN LaMacro"
    Peut être aussi, pour charger un projet (nommé LeProjet) et exécuter une macro de ce projet:
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CadInputQueue.SendKeyin "VBA RUN [LeProjet]LaMacro"
    Il faut que tu étudies de très près les possibilités de CadInputQueue (SendCommand, SendKeyin etc.) dans l'aide en ligne.


    Autre piste, référencer un fichier bibliothèque:

    Dans l'environnement VBA, il est prévu qu'un projet puisse en référencer un autre, de manière à pouvoir exécuter et utiliser les procédures et classes publiques qui y sont déclarées: c'est le principe d'une bibliothèque de code.

    Pour celà, dans VBE (l'environnement de développement intégré de VBA) on déroule le menu Outils et on exécute la commande [Références...] pour accéder à une boîte de dialogue dans laquelle on ajoute les fichiers bibliothèques spécifiques à l'application (ici MicroStation) via le bouton [Parcourir...] qui te permet de sélectionner les fichiers des projets bibliothèques (en pensant bien à sélectionner le type de fichier qui convient).


    Tiens nous informés !
    _

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Pour être franc je ne pensais pas tomber sur une spécificité Microstation à ce niveau, je pensais avoir à faire à du VBA générique (d'où mon post ici).
    Je débute encore avec Microstation.

    En tout cas merci beaucoup pour ton explication détaillée JBO. C'est beaucoup plus clair maintenant.

    Je pense que pour mon projet, je vais devoir passer par le CadInputQueue pour appeler la macro existante.
    Ca me fait un peu peur de devoir passer par le ModalHandler mais je n'ai pas le choix a priori

    En effet j'ai peur que le référencement en tant que bibliothèque complique un peu trop le déploiement dans mon cas.

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Citation Envoyé par Remi_Simon Voir le message
    Pour être franc je ne pensais pas tomber sur une spécificité Microstation à ce niveau, je pensais avoir à faire à du VBA générique (d'où mon post ici).
    Ce qui est générique c'est l'utilisation de références vers des fichiers bibliothèques.
    Quand le projet est chargé, toutes les bibliothèques sont aussi chargées et directement utilisables par le projet.

    Autrement, sans les références, plusieurs projets peuvent être simultanément chargés par l'application, mais ils se cotoient dans des espaces séparés.

    Seules des fonctionnalités spécifiques à l'application pourraient alors permettre d'utiliser les procédures d'un projet, à partir d'un autre.
    C'est l'exemple du Run() ou du SendKeyin() ou encore de boutons de commande associé à une Macro VBA.

    Citation Envoyé par Remi_Simon Voir le message
    En effet j'ai peur que le référencement en tant que bibliothèque complique un peu trop le déploiement dans mon cas.
    Je ne connais pas précisément ton cas, mais il faut savoir que l'utilisation de référence à un ou plusieurs projets bibliothèques est tout à fait normal dans les environnements VBA, et pour MicroStation aussi (c'est un moyen parmi d'autres listés dans la doc de MicroStation).

    D'ailleurs MicroStation est configurable pour ajouter automatiquement les références souhaitées à chaque création de projet VBA !
    Ça on ne l'a pas dans les applications Office, et c'est bien dommage .

    En plus, le système de référence de fichier bibliothèque intégré à VBA est très intéressant pour le développeur :

    (1) Il permet d'appeler de façon homogène les procédures publiques déclarées dans les projets référencés, et d'utiliser les types qui y sont définis.
    Le plus souvent on peut directement appeler la pcocédure dans le code.
    Le chemin complet d'appel d'une procédure VBA n'est pas toujours obligatoire, sauf en cas d'ambiguïté:
    <nom du projet>.<nom du module>.<nom de la procédure>
    ... au lieu de transiter par une méthode d'appel "interne" à l'application qui rend opaque l'enchaînement des appels (ex. la méthode Run() pour les applications Office, ou la méthode SendKeyin de l'objet cadInputQueue dans MicroStation).
    De plus, la transmission d'arguments et la récupération d'une valeur de résultat sont faits dans le contexte des appels de procédure VBA.

    (2) Il permet d'activer l'aide Intellisense qui guide le développeur pendant la saisie du code.
    La compilation du projet peut s'effectuer avec plus de rigueur, la qualité du code est meilleure (contrôle des types et des déclarations).

    (3) C'est le meilleur moyen (le seul ?) pour la gestion événementielle inter projets.


    Le principal problème des références est celui de la "référence cassée", c'est à dire quand le chemin désigné par la référence ne permet pas de retrouver le fichier bibliothèque.

    Il y 3 parades possibles:
    • les fichiers bibliothèques sont placés dans le même dossier que le fichier projet qui les référence, alors le système de référence est automatiquement reconstruit en cas de déplacement du dossier (hyper simple)
      _
    • définir un dossier bibliothèque où les fichiers doivent nécessairement être placés qui est spécifié dans le déploiement (pas compliqué et rigoureux) voire configuré dans MicroStation pour les nouveaux projets,
      _
    • prévoir une procédure d'installation qui reconstruit les références (plus délicat, à éviter si possible).


    En revanche, si tu as plus une approche de type chargement/déchargement de projets à la volée, de façon "opportuniste" et extensible (architecture ouverte à l'ajout de nouvelles bibliothèques), alors il vaut mieux oublier les références VBA et utiliser les mécanismes proposés par MicroStation (chargement, déchargement, manuel ou automatique, appel de procédure) mais tu ne pourras pas exploiter tout le potentiel de VBA.
    _

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    D'ailleurs MicroStation est configurable pour ajouter automatiquement les références souhaitées à chaque création de projet VBA !
    Est-ce que par hasard tu saurais comment on fait ça ? J'ai fait quelques recherches google sans succès sur ce sujet suite à ton post. Ce serait super pratique effectivement J'ai ajouté l'utilisation de la référence Scripting Runtime récemment mais le client n'est pas trop emballé pour devoir cocher la case sur tous les postes lors du déploiement

    Citation Envoyé par =JBO= Voir le message
    (1) Il permet d'appeler de façon homogène les procédures publiques déclarées dans les projets référencés, et d'utiliser les types qui y sont définis.
    Le plus souvent on peut directement appeler la pcocédure dans le code.
    Le chemin complet d'appel d'une procédure VBA n'est pas toujours obligatoire, sauf en cas d'ambiguïté:
    <nom du projet>.<nom du module>.<nom de la procédure>
    ... au lieu de transiter par une méthode d'appel "interne" à l'application qui rend opaque l'enchaînement des appels (ex. la méthode Run() pour les applications Office, ou la méthode SendKeyin de l'objet cadInputQueue dans MicroStation).
    De plus, la transmission d'arguments et la récupération d'une valeur de résultat sont faits dans le contexte des appels de procédure VBA.

    (2) Il permet d'activer l'aide Intellisense qui guide le développeur pendant la saisie du code.
    La compilation du projet peut s'effectuer avec plus de rigueur, la qualité du code est meilleure (contrôle des types et des déclarations).

    (3) C'est le meilleur moyen (le seul ?) pour la gestion événementielle inter projets.


    Le principal problème des références est celui de la "référence cassée", c'est à dire quand le chemin désigné par la référence ne permet pas de retrouver le fichier bibliothèque.

    Il y 3 parades possibles:
    • les fichiers bibliothèques sont placés dans le même dossier que le fichier projet qui les référence, alors le système de référence est automatiquement reconstruit en cas de déplacement du dossier (hyper simple)
      _
    • définir un dossier bibliothèque où les fichiers doivent nécessairement être placés qui est spécifié dans le déploiement (pas compliqué et rigoureux) voire configuré dans MicroStation pour les nouveaux projets,
      _
    • prévoir une procédure d'installation qui reconstruit les références (plus délicat, à éviter si possible).


    En revanche, si tu as plus une approche de type chargement/déchargement de projets à la volée, de façon "opportuniste" et extensible (architecture ouverte à l'ajout de nouvelles bibliothèques), alors il vaut mieux oublier les références VBA et utiliser les mécanismes proposés par MicroStation (chargement, déchargement, manuel ou automatique, appel de procédure) mais tu ne pourras pas exploiter tout le potentiel de VBA.
    _
    Hélas le client a plutot choisi la seconde solution pour charger et décharger ses projets à la volée. Et je n'ai pas encore compris comment ça marche pour pouvoir en profiter dans ma macro. Je me pencherais sérieusement sur le sujet d'ici quelques jours lorsque je n'aurais plus le choix de réutiliser les fonctions des autres projets.

    Depuis ce matin je suis parti dans le ModalHandler pour effectuer des conversions par lot. Je suis tombé sur quelques os à cause de la seconde fenêtre qui s'ouvre ... Je cherche, je cherche

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Avant tout, je ne suis ni utilisateur, ni développeur MicroStation.
    Donc je ne peux qu'être assez général dans mes réponses.

    Citation Envoyé par Remi_Simon Voir le message
    J'ai ajouté l'utilisation de la référence Scripting Runtime récemment mais le client n'est pas trop emballé pour devoir cocher la case sur tous les postes lors du déploiement
    Les références sont mémorisées dans le projet UNE FOIS POUR TOUTE, d'accord !?
    Et ce travail de créer les références se fait à la conception.

    La question de cocher (créer) des références ne se pose pas au déploiement, sauf si tu voulais référencer des projets dont tu ne connais pas l'emplacement sur le PC de déploiement (et ça tu ne le feras pas, n'est-ce pas).

    Quant à la bibliothèque Scripting Runtime (et toutes les bibilothèques ActiveX Exe, ActiveX DLL, OCX et TLB), elle est recensée dans la base de registre de Windows et, de ce fait, son emplacement réel n'a aucune importance.

    Citation Envoyé par Remi_Simon Voir le message
    Est-ce que par hasard tu saurais comment on fait ça ? J'ai fait quelques recherches google sans succès sur ce sujet suite à ton post. Ce serait super pratique effectivement
    [...]
    Hélas le client a plutot choisi la seconde solution pour charger et décharger ses projets à la volée. Et je n'ai pas encore compris comment ça marche pour pouvoir en profiter dans ma macro. Je me pencherais sérieusement sur le sujet d'ici quelques jours lorsque je n'aurais plus le choix de réutiliser les fonctions des autres projets.
    Il existe au moins une communauté en ligne (enregistrement gratuit) qui peut t'aider, supportée par Bentley : "Be Communities"

    Voilà deux documents à lire, dont tu devrais avoir une copie papier ou accessible dans une aide en ligne pour travailler correctement (sinon demande à qui de droit !). Ces liens concernent seulement MicroStation:
    Getting Started with Visual Basic
    Developing Code in VBA

    Bon courage !
    _

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 22
    Par défaut
    Les références sont mémorisées dans le projet UNE FOIS POUR TOUTE, d'accord !?
    A ben voila il suffisait de le dire Vu que pour le moment je développe en monoposte, je n'ai pas pu vérifier. C'est nickel !

    Merci beaucoup pour les deux liens. Il me reste à potasser et passer sur le forum de Bentley.

    Merci beaucoup, je vais en avoir besoin de courage

Discussions similaires

  1. Utilisation des methodes d'autres classes
    Par Viscapon dans le forum Langage
    Réponses: 3
    Dernier message: 10/05/2008, 22h53
  2. [Python] Est-ce une bonne idée d'utiliser des modules pour stocker des objets ?
    Par Neolander dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 05/04/2008, 14h45
  3. Intégrer des classes d'autre projets dans son JAR
    Par romaintaz dans le forum Maven
    Réponses: 7
    Dernier message: 20/02/2008, 12h02
  4. [MEX] Comment appeler des modules dans un projet
    Par fatenov dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/11/2007, 22h58
  5. [VB]utilisation des modules en vb
    Par zidenne dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/01/2006, 11h19

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