begin process at 2012 02 09 12:37:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C#

 > 

Archives

 > 

Au secours

 > 

Utiliser une librairie C# en VBA d'un fichier Excel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Administrateur CodeS-SourceS

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

Lutinore

Administrateur CodeS-SourceS

Très bonne explication : )

Pour les détails: [ Lien ]

samedi 24 septembre 2005 à 08:45:00 | Re : Utiliser une librairie C# en VBA d'un fichier Excel

coq

Administrateur CodeS-SourceS
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

Administrateur CodeS-SourceS
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

1 2

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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,340 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales