Partage
  • Partager sur Facebook
  • Partager sur Twitter

C#/.net DLL utilisable pour VBA Excel

Sujet résolu
    18 octobre 2018 à 15:23:00

    Bonjour,

    J'essaye de créer une DLL sous C# avec le framework .NET pouvant être utiliser sous Visual Basic (avec Excel).

    Je développe sous Virtual Studio.

    Après plusieurs recherches, le seul moyen que j'ai trouvé pour le moment c'est de passer par l'interface COM.

    Pour la suite du sujet je me suis référé à cette discussion: https://stackoverflow.com/questions/19954001/calling-a-net-library-method-from-vba

    J'ai créé un projet de type .NET/C# Library sous Virtual Studio.

    Voici mon code C#/.net complet:

    using System;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using System.Runtime.InteropServices;
    
    namespace ClassLibrary3
    {
        [InterfaceType(ComInterfaceType.InterfaceIsDual)]
        [ComVisible(true)]
        public interface _Test
        {
            string HelloWorld();
        }
    
        [ClassInterface(ClassInterfaceType.None)]
        [ComVisible(true)]
        public class Test : _Test
        {
            public string HelloWorld() {
               return "Hello, World! ";
            }
        }
    }

    L'option de build "Register for COM Interop" sous Virtual Studio est inaccessible.  

    De plus l'argument "ComInterfaceType.InterfaceIsDual" est reconnu comme obsolète par Visual Studio.

    Pour enregistrer ma DLL dans les registres j'utilise la commande suivante:

    regasm /s /codebase /tlb ClassLibrary3.dll

    Cette commande me renvoit aucune erreur, elle me génère bien un fichier .tlb que je peux importer dans excel.

    Je n'ai pas d'erreur quand je build mon programme C#.

    Sous Virtual Basic sous Excel je peux voir ma classe Test mais pas appeller ma fonction HelloWorld...

    Avez-vous des solutions ?

    Il y a t'il un autre moyen que de passer par l'interface COM ?

    Merci d'avance pour votre aide :)

    Bastien

    -
    Edité par thebastien007 18 octobre 2018 à 15:26:57

    • Partager sur Facebook
    • Partager sur Twitter
      18 octobre 2018 à 18:57:14

      Il manquerait pas quelques attribut devant la déclaration de la méthode "HelloWorld" ?
      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        19 octobre 2018 à 9:09:21

        Bon enfaite, mon code marche et l'interface _Test n'est pas indispensable...

        Mais COM est voué à devenir obsolète dans les années à venir... il y a t'il un autre moyen pour communiquer entre un code C#/.Net et un script VBA ?

        La suite dans ce sujet https://openclassrooms.com/forum/sujet/activex-avec-net-et-vba-le-futur

        -
        Edité par thebastien007 19 octobre 2018 à 10:30:53

        • Partager sur Facebook
        • Partager sur Twitter
          19 octobre 2018 à 11:36:26

          VBA est intimement lié à COM.

          Si COM disparait, VBA aussi, je pense.

          Le passage "naturel", c'est de VBA à VB.NET.

          Et comme VB.NET, c'est du .NET, le passage entre les modules C# et VB.NET est transparent.

          Si VBA doit survivre sans COM, je ne vois que 2 "technologies" d'interconnexion (outre les blagues comme DDE), .NET et les API "native" C, mais la seconde demanderait un très gros shift dans le langage VBA.

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

          C#/.net DLL utilisable pour VBA Excel

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown