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

VB.NET Discussion :

Passage par macro d'une matrice d'objets de VB.NET vers Excel VBA


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut Passage par macro d'une matrice d'objets de VB.NET vers Excel VBA
    Bonjour,

    J'ai un projet VB.NET qui attache une feuille Excel. Dans le projet VB, j'utilise une classe perso avec une vingtaine de membres de données essentiellement numériques.
    Un tableau dynamique d'objets de cette classe est instanciée dans VB.NET, j'y fais un bon nombre de calculs.
    Pour m'assurer le passage de données vers Excel, j'ai copié la définition de ma Classe dans un autre projet de type Class Library, et j'ai ajouté une Référence à la feuille Excel (XLSM) pour pouvoir l'utiliser. J'ai d'abord pensé faire un copié-collé de la définition de la Classe dans VBA mais ça ne fonctionne pas.
    Dans le programme VB.NET, je passe un 'pointeur' à Excel grace à une macro, et la macro récupère bien les données.

    Toutefois, après plusieurs essais, il s'avère que je n'arrive à passer les données que si le type de l'objet (la matrice) n'est pas définie dans la macro (donc Variant).
    Comme il me semble qu'il n'y pas de 'typecasting' dynamique en VBA, je ne sais pas comment faire mieux.
    Bref, j'ai mes données mais je n'ai pas accès aux membres de la classe pourtant correctement définie (enfin je pense...), et ma question est la suivante:
    Comment faire la même chose plus 'proprement', c'est à dire, pouvoir retrouver la classe sous VBA comme je l'utilise en VB.
    Merci d'avance
    Bruno

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonkour

    Il faut que ton class soit defini comme un Class Com donc visible en Com pour qu'il soit référencé par VBA (outils-> ajouter une référencé )

    sur ce lien intitulé "Walkthrough: Creating COM Objects with Visual Basic | Microsoft Docs" (creation pas à pas d"un Com Class)

    https://docs.microsoft.com/en-us/dot...ng-com-objects
    bon code...

  3. #3
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Je crois que la vraie question est : Comment référencer dans VBA Excel la dll écrite et compilée sous VS ?
    Il semble simple d'ajouter une référence (Outils/Références.../Parcourir ...),
    mais le message en retour est "Impossible d'ajouter une référence au fichier spécifié" !
    Je veux bien la réponse ...

  4. #4
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut
    Je ne me suis sans doute pas exprimé clairement dans mon premier message.
    Tout fonctionne plus ou moins comme je le voulais:
    La classe (importée dans mon projet a été compilée de manière séparée en COM et j'y accède dans Excel après l'avoir ajoutée en référence.
    Le passage de données par macro marche parfaitement. La seule chose est que la macro reçoit la matrice en référence comme une variable non définie même si lorsque je teste avec TypeName elle semble bien être du type la classe.
    Je peux accéder à toutes les méthodes mais VBA ne reconnait pas de facto le type. Il faut donc connaître la structure de la classe pour l'utiliser dans VBA.

  5. #5
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    OK, alors tout va bien chez toi (ou presque) et c'est chez moi que ça ne va pas cette fois : Comment fais-tu pour référencer ta DLL dans le projet VBA ?
    Je conçois que tu doives bien connaître ta classe pour pouvoir l'utiliser et je voudrais tester, mais je n'ai pas accès à ma DLL !
    Voici mon problème en quelques illustrations :
    Nom : DLLXLS1.jpg
Affichages : 375
Taille : 56,9 KoNom : DLLXLS2.jpg
Affichages : 379
Taille : 18,7 Ko
    Si tu as de quoi me dépanner ...

  6. #6
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut
    As tu compilé ta Class Library (DLL) avec l'option Com Interop ?
    https://www.screencast.com/t/EyflS9VWucZ
    Ensuite dans Excel VBA, il suffit de la référencer avec le fichier TLB.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Je ne sais pas si cela pourra t'aider, mais voici en lien deux sujets traitant de ce genre de problèmatique.
    Echange d'info vb.net vb6 - post 27.
    et
    exe vb6 et dll vb.net - post 10.
    Tu trouvera peut être des similitudes avec vba ou des pistes.

    A+
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  8. #8
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Merci Bruno, merci rv,
    je vais travailler un peu ces pistes.
    Très bonne journée à vous ...

    Suite ...

    @Bruno
    Ta copie d'écran super explicite m'a permis de résoudre le référencement de ma dll dans Excel.
    Effectivement, il faut connaître la classe pour pouvoir l'exploiter dans Excel.
    J'ai tenté la documentation xml du code de la DLL mais Excel n'y voit rien.
    ...Nom : DLLXLS3.jpg
Affichages : 345
Taille : 21,0 Ko

  9. #9
    Membre confirmé
    Homme Profil pro
    Trader / Formateur / Développeur Options CBOE
    Inscrit en
    Septembre 2018
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Trader / Formateur / Développeur Options CBOE
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 86
    Par défaut
    Hervé, j'ai parcouru les liens et je me pose une question sur le même sujet (pourquoi je n'ai pas accès aux 'accessors' dans VBA):
    Pourrait il y avoir une non-équivalence (genre Integer dans VB.NET et Long en VBA) qui troublerait VBA et empêcherait la bonne interprétation de la classe même si par le casting dynamique de ces types de base, tout marche en fin de compte ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/08/2010, 14h58
  2. Réponses: 8
    Dernier message: 03/12/2006, 17h46
  3. Passage en parametre d'une matrice NON carrés
    Par Steffane dans le forum C
    Réponses: 11
    Dernier message: 02/08/2006, 14h10
  4. Réponses: 4
    Dernier message: 26/12/2005, 17h01
  5. [VB6]Passage par référence d'une prop. d'objet à une fct
    Par -gYs- dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 02/09/2002, 08h55

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