Accueil > Forum > > > > Utiliser une librairie C# en VBA d'un fichier Excel
Utiliser une librairie C# en VBA d'un fichier Excel
vendredi 23 septembre 2005 à 17:09:44 |
Utiliser une librairie C# en VBA d'un fichier Excel

finarfin95
|
Bonjour à toutes/tous,
Voila mon souci, qui je dois l'avouer, commence à me taper sur le système... et comme je n'y connais pas grand chose je rame à mort!
J'utilise une application Excel avec des contrôles fesant appel des méthodes VBA. Or d'un autre côté j'ai développé une librairie en C# pour les gros algorithmes. Mon souci est que je n'arrive pas à appeler cette librairie.
Mode de génération de la librairie en C#: 1. Création d'un projet "Librairie de classe" 2. Développement, tests des méthodes etc... 3. Génération de la librairie (non chiffrée, peut-être que ça vien de là, mais je ne vois pas pourquoi j'en aurais besoin...)
Appel de la librairie dans le VB: 1. Copie de la dll dans le répertoire du fichier Excel 2. Insertion dans le code VB de : Public Declare Function maSomme Lib "MyLibrary.dll" (ByVal a As Integer, ByVal b As Integer) As Integer (en passant j'aimerais bien savoir comment intégrer la libraire dans sa totalité, car si je dois déclarer cheque méthode je suis pas rendu :p) 3. Appel de ma fameuse méthode dans le code: Sub maSommeVBA()
a = Feuil1.Cells(1, 1) b = Feuil1.Cells(1, 2)
Feuil1.Cells(1, 4) = maSomme(a, b)
End Sub
Resultat: Erreur d'exécution '453': Point d'entrée maSomme d'une dll introuvable dans MyLibrary.dll
Voila, peut-être que ce que je viens d'écrire parait abhérant, peut-être pas, mais en tout cas, toute aide sera grandement appréciée. Parceque là... je craque :p:p:p:p:p
Merci!
Romain
|
|
vendredi 23 septembre 2005 à 21:05:46 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel

coq
|
Salut,
Tu ne peux pas procéder de la même manière qu'avec une méthode exportée d'une dll C/C++, tu dois passer par COM.
Exemple :
Soit un projet de bibliotheque de classe appelé "CSharp" : - sortie : "CSharp.dll" - "Inscrire pour COM Interop" à true dans les propriétés du projet
Classe "CSharp", fichier CSharp.cs : -------------- using System; using System.Runtime.InteropServices;
namespace CSharp { [ClassInterface(ClassInterfaceType.None)] [ComVisible(true)] public class CSharp : ICSharp { [ComVisible(true)] public int Somme(int a, int b) { return a+b; } } } --------------
Interface "ICSharp" (fichier ICSharp.cs) : -------------- using System;
namespace CSharp { public interface ICSharp { int Somme(int a, int b); } } --------------
A la compilation, VS effectue l'inscription pour l'emplacement actuel de l'assembly .Net.
Dans ton VBA il ne te reste plus qu'à faire quelquechose de ce genre : Dim csharp As Object Dim result As Integer Set csharp = CreateObject("CSharp.CSharp") result = csharp.Somme(1, 3) MsgBox (result) Set csharp = Nothing
Cocoricoooooooo !!!! coq MVP Visual C#
|
|
samedi 24 septembre 2005 à 06:02:23 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel
|
samedi 24 septembre 2005 à 08:45:00 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel

coq
|
Ah oui j'ai oublier les liens MSDN qui vont bien, merci du complément :-)
Cocoricoooooooo !!!! coq MVP Visual C#
|
|
dimanche 25 septembre 2005 à 12:58:58 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel

finarfin95
|
Merci beaucoup,
Je travaillerais dans ce sens lundi.... ben oui, là, on est diamnche faut pas abuser :D Je pense que ça devrait aller avec une explication pareille :) sinon je vous tiens au courant!
Romain
|
|
lundi 26 septembre 2005 à 09:41:15 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel

finarfin95
|
mmm j'ai un problème persistant... je n'arrive pas à référencer ma librairie en VB. Donc je n'arrive pas à créer l'objet CSharp.CSharp. Je suis sur le problème, mais si quelqu'un connais une erreur fréquente à ce propos je suis tout ouïe :)
Romain
|
|
lundi 26 septembre 2005 à 10:08:43 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel

finarfin95
|
En fait, si je référence le fichier .tlb généré par Visual Studio, j'ai l'erreur suivante:
Erreur d'exécution '429': Un composant ActiveX ne peut pas créer d'objet
sur la ligne
Set myClass1 = CreateObject("MyLibrary.Class1")
Faut-il référencer la librairie dans le VB avec un importlib ou quelque chose du genre? Le fait de référencer par "Outils/Références/MyLibrary.tlb" est-il suffisant? Pour l'instant je n'ai mis que ça dans le VB:
Sub maSommeVBA() Dim myClass1 As Object Set myClass1 = CreateObject("MyLibrary.Class1")
a = Feuil1.Cells(1, 1) b = Feuil1.Cells(1, 2) Feuil1.Cells(1, 4) = myClass1.maSomme(a, b)
Set myClass1 = Nothing End Sub
Merci, romain
|
|
lundi 26 septembre 2005 à 19:40:22 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel

coq
|
Il n'y a rien à référencer, juste s'assurer de bien faire l'enregistrement à COM, ce qui apparemment n'est pas le cas chez toi. Moi côté VBA il n'y avait que ce que j'ai mit, rien de plus :-)
Cocoricoooooooo !!!! coq MVP Visual C#
|
|
mardi 27 septembre 2005 à 09:27:22 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel

finarfin95
|
Argh! Je vois pas du tout là... bon je sais que ça fait glandeur, mais voici ce que j'ai fait pas à pas, si tu vois une erreur ou unh oubli quelque part ça me débloquerait peut-être...
Côté Visual Studio .NET: 1. Création d'un projet de type librairie de classes 2. Contenu 2 classes: ----------------------------------------------------------------------------------------------------- Class1.cs ----------------------------------------------------------------------------------------------------- using System; using System.Runtime.InteropServices; namespace MyLibrary { /// <summary> /// Summary description for Class1. /// </summary> [ClassInterface(ClassInterfaceType.None)] [ComVisible(true)] public class Class1:IClass1 { [ComVisible(true)] public int maSomme(int a, int b) {return a+b;} } } ----------------------------------------------------------------------------------------------------- IClass1.cs ----------------------------------------------------------------------------------------------------- using System; namespace MyLibrary { /// <summary> /// Summary description for IClass1. /// </summary> public interface IClass1 { int maSomme(int a, int b); } }
3. Compilation du projet avec "Register for COM interop" = true => génération de MyLibrary.pdb, MyLibrary.dll et MyLibrary.tlb
Côté VBA: 1. Référencement de MyLibrary.tlb par "Outils/Références/add..." 2. Le code VBA est le suivant: --------------------------------------------------------------------------------------------- Module1 --------------------------------------------------------------------------------------------- Sub maSommeVBA() Dim myClass1 As Object Set myClass1 = CreateObject("MyLibrary.Class1")
a = Feuil1.Cells(1, 1) b = Feuil1.Cells(1, 2) Feuil1.Cells(1, 4) = myClass1.maSomme(a, b)
Set myClass1 = Nothing End Sub
Erreur générée sur le CreateObject : Erreur d'exécution '429': Un composant ActiveX ne peut pas créer d'objet
Voila tout ce que j'ai :( Je suis vraiment désolé de balancer tout mon code comme ça pour que tu m'aides à trouver l'erreur, mais je te rassure, je ne joue pas aux cartes pendant ce temps :))
Merci beaucoup! Romain
|
|
mardi 27 septembre 2005 à 18:16:29 |
Re : Utiliser une librairie C# en VBA d'un fichier Excel

finarfin95
|
Réponse acceptée !
Bon j'ai trouvé un mix de tout ce que 'jai pu entendre sur la question qui fonctionne bien:
1. générer ma librarie sans ajouter quoi que ce soit et sans mettre COM interop = true. 2. insérer cette lib dans le GAC (gacutil -i ...) 3. référencer la librairie (regasm ....)
et ça marche....
En tout cas merci de votre aide, je pense de toute façon qu'il y a plusieurs solutions lorsqu'il sagit de librairies... maintenant de là à connaitre la plus efficace... c'est autre chose :)
De toute façon j'ai un autre post en cours sur le même sujet pour ceux que ça intéresse héhéhé :D
Romain
|
|
Cette discussion est classée dans : fichier, vba, appel, excel, librairie
Répondre à ce message
Sujets en rapport avec ce message
appel d'un fichier excel [ par achraf66 ]
je veux savoir comment appeler un fichier excel à partir d'une application visual C#
Generer un fichier Excel ou Configurer une librairie COM dans visual studio [ par hasen ]
Messieurs, Mesdames bonjour!Je voudrais generer un fichier Excel depuis mon code C# et j'avais trouvé une solution grace à la librairie (dans COM) Mic
Afficher le contenu d'une Hashtable dans un fichier Excel [ par decoalaa ]
Bonjour, voila mon problème, j'ai stocké des données dans une hashtable et je veux afficher le contenu dans un fichier Excel, J'ai crée mon fichier et
Csharp et EXCEL ? [ par ansizak ]
Bonjour,Je travaille actuellement sur un projet dans lequel il m'est demandé de générer des fichiers Excel avec les options de mises en forme qui s'en
Ouverture d'un fichier Excel depuis une page web [ par hasen ]
Bonjour, bonjour!Je viens une fois de plus vous voir pour vous demander des indices, pistes ou meme solutions pour le problème que je rencontre.Donc j
Créer un fichier Excel .xls [ par vagg ]
Bonjour, J'ai besoin de créer un fichier .xls mais je ne sais pas vraiment comment faire.J'ai déjà un fichier .txt mais je ne suis pas obligé de m'en
Liaison VBA - Excel [ par jenaye83 ]
Bonjour tout le monde,J'ai développe une application en C#. Dans l'une des classes, j'ai renseigne les fonctions de register/unregister qui permettent
dataset et excel [ par Rymone ]
Bonjour,je suis en train de développer une application avec C# .NET 2.0je doit récupérer des données depuis un fichier excel puis les mettre dans ma b
Comment ouvrir/modifier/ecrire dans un fichier EXcel c#.net WINFORM [ par vinzemuls ]
Bonjour,après pas mal de recherches, j'ai réussi à trouver comment lire un fichier EXCEL. or je ne trouve pas le moyen d'écrire à la suite du fichier
récuperer des données depuis fichier excel [ par samir_enim ]
Salut tout le monde,je dois developper une application qui a besoin de recuperer certains parametres depuis des fichiers excel.Mon problème est commen
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|