[résolu] utiliser une DLL .NET depuis VBA Excel 2003

utiliser une DLL .NET depuis VBA Excel 2003 [résolu] - C#/.NET managed - Programmation

Marsh Posté le 11-02-2005 à 15:02:37    

Avant de faire le test, je me renseigne, au cas où quelqu'un aurait déjà été confronté au cas suivant :
 
Soit une appli en .NET
Soit des feuilles Excel 2003 avec code VBA derrière
 
Comme les deux devront accéder, disons à une BDD, avec les mêmes demandes en gros, on pensait faire une DLL pour la couche d'accès aux données.
 
Si la DLL est faite avec .NET, sera-t-elle exploitable par le code VBA des macros Excel (et ce, j'imagine, probablement via un wrapper ou que sais-je d'autre)?
 
Ou faut-il plutôt la faire en VB6 pour qu'elle soit utilisable par les deux parties ?
 
Merci
Laurent


Message édité par lohworm le 16-02-2005 à 12:01:48
Reply

Marsh Posté le 11-02-2005 à 15:02:37   

Reply

Marsh Posté le 11-02-2005 à 15:05:27    

Je pense qu'il faut effectivement un wrapper :??: VBA veut des DLL COM...
 
Attend...
 
Y'a moyen d'enregistrer des DLL .NET en COM (y'a un attribut d'assembly ComVisible d'ailleurs), donc normalement y'a moyen :) /CONTENT/

Reply

Marsh Posté le 11-02-2005 à 15:09:34    

FlorentG a écrit :

Je pense qu'il faut effectivement un wrapper :??: VBA veut des DLL COM...
 
Attend...
 
Y'a moyen d'enregistrer des DLL .NET en COM (y'a un attribut d'assembly ComVisible d'ailleurs), donc normalement y'a moyen :) /CONTENT/


 
c'est dans la doc MSDN ? (si oui, je trouverai en cherchant, sinon tu as un lien ?)
 
en tout cas, merci  :jap:  
Laurent

Reply

Marsh Posté le 11-02-2005 à 15:10:19    

Normalement ouais, ça doit être dans la doc. Aussi dans les paramètres de la solution, t'as un truc genre "enregistrer pour COM Interop" :)

Reply

Marsh Posté le 16-02-2005 à 11:59:54    

j'ai donc fait le test.
 
En plus de cocher "Enregistrer pour Com Interop", il faut aussi
-soit préciser les classes à exposer, soit le spécifier une exposition globale au niveau de l'assembly si c'est toutes les classes, avec  

Code :
  1. ClassInterfaceAttribute(ClassInterfaceType.AutoDual)


-coder un constructeur vide
 
cf http://www.microsoft.com/france/ms [...] omvba.html
 
et bien sûr, pour les fonctions renvoyant des valeurs et pour les arguments, il faut que cela soit compatible avec les types (élémentaires ?) disponibles en VBA (ainsi, par exemple, la Collection de .NET ne passe pas le cap de la compilation pour ComInterop)
 
voilà où j'en suis pour l'instant
 
Merci à FlorentG
laurent

Reply

Marsh Posté le 16-02-2005 à 12:00:55    

Y'a aussi un attribut ComVisible au niveau de l'Assembly

Reply

Marsh Posté le 16-02-2005 à 12:05:33    

FlorentG a écrit :

Y'a aussi un attribut ComVisible au niveau de l'Assembly


 
c'est pour être plus fin sur ce qui est visible ou pas, c'est ça ?

Reply

Marsh Posté le 16-02-2005 à 12:07:33    

C'est pour indiquer si l'Assembly est visible. Après, il y a des attributs au niveau des classes pour masquer celles qui faut

Reply

Marsh Posté le 16-02-2005 à 12:10:08    

bizarre, ça a marché sans que je ne code d'attribut ComVisisble !?  :pt1cable:

Reply

Marsh Posté le 16-02-2005 à 12:11:49    

peut-être parce que la valeur par défaut est TRUE...

Reply

Marsh Posté le 16-02-2005 à 12:11:49   

Reply

Marsh Posté le 16-02-2005 à 12:17:12    

Oui, c'est true par défaut :D

Reply

Marsh Posté le 24-01-2006 à 16:41:39    

FlorentG a écrit :

Oui, c'est true par défaut :D


 
ch'uis bien embêtée, parce que moi, c'est false par défaut ET EN PLUS, c'est grisé...
 
Alors comment je fais pour intégrer l'assembly "qui permettra à mes utilisateurs d'ouvrir excel via mon programme Csharp"?
 
merci les jeunes!
Marikiki

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed