none
Appel d'une Structure VB 2005 dans un module VBA / Excel RRS feed

  • Question

  • Bonjour,

    J'ai installé un code de calcul matriciel dévelopé en vb.net qui définit une structure "Matrice" comme suit :

    Imports System.Runtime.InteropServices
    <ComVisible(True)> <ComClass()> _
    Public Class DLL_Matrix

     Public Structure Matrice
      Private A(,) As Long
      Private mDim1 As Long, mDim2 As Long

    #Region "Constructeurs et propriétés"

      Public Sub New (ByVal dim1 As Long, ByVal dim2 As Long)
       Dim longA(dim1, dim2) As Long
       A = longA
       mDim1 = dim1
       mDim2 = dim2
      End Sub
     etc ...

    J'ai généré sans pb la dll ActiveX sous le nom DLL_Matrix.dll (ainsi que le fichier .tlb) et catalogué dans le GAC.

    --------

    Côté Excel, j'ai un petit module de test VBA qui se plante en compile pour une raison qui m'échappe

    Public Sub main()

     Dim A As New matrice '=> Message : "Type défini par l'utilisateur non défini"

    ou bien

     Dim A As New matrice (3,3) '=> Message : "Erreur de syntaxe"

    Pourtant DLL_Matrix est bien cochée dans les références disponibles du VBA et le menu contextuel qui s'ouvre après le déclaration New le mentionne.

    Que manque-t-il à votre avis ? Merci de votre aide.

    mercredi 22 août 2007 16:49

Toutes les réponses

  • Je ne sais pas trop quoi répondre, puisque je n'ai jamais développer en .Net pour Excel, mais tu pourrais peut-être regarder ce lien (en anglais).
    mercredi 22 août 2007 17:18
    Modérateur
  • Merci Biche pour ce post que j'ai examiné attentivement et dans lequel j'ai retrouvé pas mal de choses que j'avais vues lors de mes premiers essais de couplage Excel / VB 2005 (au passage je précise que je travaille avec la version Express ce qui n'est peut-être pas neutre).

     

    Pas de problème singificatif pour faire causer VBA et .net tant qu'il s'agit d'appeler des Sub ou des Function.
    Dans mon pb actuel, ça se passe au niveau de la reconnaissance du type défini par la déclaration Structure.

     

    Je creuse mais je sens que ça va se terminer par une solution de contournement consistant à déporter l'appel au travers d'une fonction servant de point d'entrée dans .net.

     

    Je te tiens au courant.

     

    Merci.

    mercredi 22 août 2007 21:43
  • D'après mes différents essais ça fonctionne avec une classe COM mais les difficultés viennent dès qu'apparait la notion de structure plutôt que classe. Il faut que j'approfondisse ce point.

     

    A+

    samedi 25 août 2007 21:50
  • Bonjour, je vois que tu utilises VB 2005 express et VBA excel. J'ai un gros probleme j'essai de creer une com pour l'utiliser sous excel ensuite mais je n'y arrive pas et je ne trouve pas de tutorials. j'avais creer juste avant une dll avec VB 2005 express et je l'ai appelé sous excel mais ca ne marche pas.

     

    peu m'aider SVP.

     

     

     

    vendredi 21 septembre 2007 10:36
  • Bonjour,

     

    La structure est définie comme une "classe" imbriquée dans la classe principale DLL_Matrix.

    Or la notion de classe imbriquée n'existe pas, à ma connaissance, en COM. A mon avis, la structure telle quelle est définie dans votre code source, n'est pas incorporée dans la description de l'interface pour le monde COM.

     

    Autre remarque concernant votre code, vous avez implémenté un constructeur paramétré. Or, à ma connaissance, le monde COM ne connait pas la notion de surcharge sur le constructeur.

    Donc à mon avis, la définition du constructeur surchargé ne fait pas partie de l'interface. Il n'est donc pas possible d'appeler un constructure surchargé en COM ( ie la ligne Dim A As New matrice (3,3) n'est donc pas valide)

     

    D'autre part, je vous recommende de tagger la classe ou la structure que souhaitez exposer au monde COM avec les attributs suivants:

     

     

    vendredi 21 septembre 2007 12:11