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 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|