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

C# Discussion :

Utiliser librairie C# dans Excel


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Utiliser librairie C# dans Excel [Nouveau problème]
    Bonjour,

    Alors j'ai un problème pour utiliser du code fait en Csharp dans Excel.
    J'ai compilé mon projet C# en mettant le flag "Inscrire pour Com interop" à true (visual studio).
    Ensuite j'ai bien référencé le fichier .tdb dans mon code VBA. Seulement quand j'essaye de faire un CreateObject("MyLibrary.MyClass"), je recois comme message "Runtime Error "..." Automation error".

    J'ai surement du oublier de faire qqch mais je ne sais pas trop quoi...

    Meme si je ne pense pas que ca vienne de la, voila en gros le code de mon projet C#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    namespace MyLibrary
    { 
        public interface IMyClass
        {
            void Main(string xmlFile);
        }
        [ClassInterface(ClassInterfaceType.None)]
        [ComVisible(true)]
     
    	public class MyClass:IMyClass
    	{
            [ComVisible(true)]
                    public void Main(string xmlFile)
                    {
                        MyLibrary.MyClass2 newClass2 = new MyLibrary.MyClass2();
                        newClass2.setXML(xmlFile)
                        Application.Run(new MyClass2());
                    }
    	}
    }

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    fait voir ton code VBA.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    En fait je viens juste de trouver une solution (je ne sais pas si c'est la meilleure). J'effectue un regasm de ma dll avant d'ouvrir mon fichier excel (j'avais essayé de le faire alors que mon fichier excel etait ouvert mais ca ne fonctionnait pas...

    En revanche, maintenant je peux executer tranquillement mon programme une première fois mais lorsque je l'execute une seconde fois, j'ai une erreur "It is invalid to start a second message loop on a single thread..."

    Pour info mon fichier excel donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Sub RunCSharp()
        Dim Chart As Variant
        Set Chart = CreateObject("MyLibrary.MyClass")
        Chart.Main "Hello"
    End Sub
    avec des bouts de code sans veritable interet au milieu

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Mais tout le code et l'erreur complète
    On ne sais jamais.

    regasm -> je ne connais pas ce mot
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Mets tout le code et l'erreur complète
    On ne sait jamais.
    Honnetement le code fait vraiment beaucoup de lignes et est relativement compliqué...
    regasm -> je ne connais pas ce mot
    Ca permet d'enregistrer un assembly

    Sinon j'ai réussi à résoudre mon second problème grace à un vieux post qui trainait (fevrier 2006 qd même).
    Pour info le message d'erreur : "It is invalid to start a second message loop on a single thread..." vient du fait que je declare une instance d'une autre classe (cf MyClass2 dans MyClass). Il faut effectuer un test pour verifer si cette instance est toujours présente. Il suffit ainsi de remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run(new MyClass2())
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (cht.ShowDialog() == DialogResult.OK) Application.Run(new MyClass2());

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Bon si tu as résolu ton problème plus besoin du code VBA mais je pense que je l'aurais compris
    Ou du moins une bonne partie
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Ne t'inquiete pas j'en suis persuadé
    Je pensais juste que à trop mettre de détails on n'arrive plus à voir grand chose... C'est juste des appels à des methodes c++ et des requetes SQL pour des connections en base de données... en gros du code long et sans grand intérêt

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Alors je viens de découvrir un problème pour utiliser mon application C# sur des postes distants sur lesquels les droits d'accés sont restreints.
    J'avais en effet fait un script pour enregistrer l'assembly :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    gacutil /i ChartsDraw.dll
    regasm ChartsDraw.dll
    Mais j'obtiens les messages d'erreur suivant:
    Failure Adding assembly to the cache: Access is denied
    RegAsm error: access to the registry HKEY_CLASSES_ROOT\ChartsDraw.GraphObject is denied
    Est ce qu'il y a un moyen de contourner l'enregistrement des assemblies pour utiliser un objet .net dans Excel? Est ce qu'il y a un moyen d'eviter que regAsm écrive dans la clef HKEY_CLASSES_ROOT?

    Merci d'avance

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Refait un nouveau sujet quitte à mettre un liens vers celui-ci.
    Parce que je suis le seul à t'avoir répondu la dernière, donc le seul à voir dans mon tableau de bord que tu as fait une nouvelle réponse.
    Et comme ton titre n'a plus grand chose à voir avec ton problème actuelle, tu risques de passer à coté de personnes ayant les réponses pour résoudre ton problème.
    Car moi je n'ai pas la solution.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    OK merci je vais créer un nouveau sujet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] utilisation des données dans excel
    Par blacksf dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/12/2012, 11h07
  2. [XL-2003] VBA Excel/Access. Définir une variante par msgbox et utiliser la variante dans Excel et acess
    Par gandalf20000000 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/11/2009, 17h49
  3. Comment automatiser l'utilisation du solveur dans EXCEL
    Par nianko dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/10/2008, 07h20
  4. Utiliser librairie externe dans son plugin
    Par ghillairet dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 09/01/2008, 10h56
  5. PB d'utilisation des formulaires de données dans EXCEL
    Par adil155 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/11/2005, 16h09

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