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

VB.NET Discussion :

Utiliser fonctions VB.Net depuis VBA dans Excel


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Par défaut Utiliser fonctions VB.Net depuis VBA dans Excel
    Bonjour,

    Je vous précise un peu tout ça, car j'ai du mal à trouver de la documentation là-dessus. Soit une application Windows Forms réalisée en VB.Net. L'objectif est de pouvoir faire appel aux fonctions de la classe "Excel" de cette application depuis une macro VBA dans un classeur Excel.

    Comment faire ?

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    A priori ça doit être possible vu que lorsque j'ouvre un fichier avec l'objet ExcelApplication le code d'ouverture de fichier s'exectue (dans le cas qui me revient en tête ce code affichait un formulaire).

    Pour executer une macro on peut passer par:


  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Par défaut
    Citation Envoyé par sinople Voir le message
    A priori ça doit être possible vu que lorsque j'ouvre un fichier avec l'objet ExcelApplication le code d'ouverture de fichier s'exectue (dans le cas qui me revient en tête ce code affichait un formulaire).

    Pour executer une macro on peut passer par:

    Merci sinople, mais en fait c'est l'inverse que je veux faire. Dans une macro du fichier Excel, je veux pouvoir appeler une fonction écrite dans une classe VB.Net.

    Mais je retiens quand même, ça pourra me servir plus tard.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Ah...

    Il y a 2 solutions (qui peuvent être mélangées!):

    Soit tu utilises la technologie VSTO (pas possible avec les version express de Visual Studio), ce qui consiste à utiliser du .Net à la place de VBA.

    Autrement faut que ta fonction .Net soit balancée dans une fichier de librairie (.dll) ou objet (COM)? que tu dois pouvoir attaquer depuis ta macro en VBA. Mais n'ayant jamais fait ce genre de truc mon aide s'arrête là.

    Je me souviens d'un collègue qui utilisait un prog .net pour envoyer des mail depuis Access, donc c'est possible!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Par défaut
    Citation Envoyé par sinople Voir le message
    Autrement faut que ta fonction .Net soit balancée dans une fichier de librairie (.dll) ou objet (COM)? que tu dois pouvoir attaquer depuis ta macro en VBA. Mais n'ayant jamais fait ce genre de truc mon aide s'arrête là.
    Oui, c'est ce que je cherche à faire, mais c'est pas évidement et très peu documenté. Merci quand même pour ta réponse.

  6. #6
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut UDF dans excel,fonctions utilisateurs en vb.net
    bonjour
    Creer les fameux UDF en vb.net et les integrer à Excel?
    Oui c'est possible, et c'est une des lacunes des VSTO dont beaucoup d'utilisateurs Excel se plaignent.

    1/creer un projet librairies de classes normal
    2/renommer la classe dans le nom que vous voulez.
    3/mettre un namespace avec un nom court de preference(il faciltera la recherche de la lib)
    4/pas la peine de mettre visible pour com(il est mis par code)
    voici un exemple avec une fonction chaine,2 fonctions numeriques.
    ici le code :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    '1/ Imports InteropService est necessaire pour permettre l'interactiion avec
    ' une application com(excel)
    '2/noter qu'il ne s'agit que de fonctions utilisateurs UDF(user defined function)
    '3/si l'on veut des sub on utilise les add-in VSTO
    Imports System.Runtime.InteropServices
    <ClassInterface(ClassInterfaceType.AutoDual), ComVisible(True)> _
        Public Class LibFonctionsExcel
        'fonction chaine
        Public Function EchoInput(ByVal v1 As Integer) As String
            Return "You entered " & v1.ToString
        End Function
        'fonction numerique 1
        Public Function DiviserParDeux(ByVal D As Double) As Double
            Return D / 2
        End Function
        'fonction numerique 2
        Public Function DivideParQuatre(ByVal D As Double) As Double
            Return D / 4
        End Function
        'cree un guid et une cle sur le serveur
        <ComRegisterFunctionAttribute()> _
        Public Shared Sub RegisterFunction(ByVal type As Type)
            Microsoft.Win32.Registry.ClassesRoot.CreateSubKey("CLSID\\{" & _
    type.GUID.ToString().ToUpper() + "}\\Programmable")
        End Sub
        'supprime la cle sur le serveur
       <ComUnregisterFunctionAttribute()> _
        Public Shared Sub UnregisterFunction(ByVal type As Type)
            Microsoft.Win32.Registry.ClassesRoot.DeleteSubKey("CLSID\\{" & _
    type.GUID.ToString().ToUpper() + "}\\Programmable")
        End Sub
    End Class
    4/ creer l'executable dll
    5/ lancer excel à l'exterieur de visual studio
    6/outils excel->macro complementaires->automatisation
    7/dans la boite de dialogue rechercher la lib :namespace.nomclasseUDF
    8/OK (si le message mscoree.dll cannot be found,repondre non et ok)
    9/allez dans la feuille 1 ,function et rechercher vos functions bien pretes.

    Une autre approche est de creer une librairie normale en .net,visible com , de la referencer en vba(car interopcom creer un fichier TBL pour ce faire) ,de mettre en place une macro qui appelle cette fonction...

    bon code..............

Discussions similaires

  1. Mailing en utilisant VBA dans Excel
    Par martyfourbe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/03/2013, 12h35
  2. [XL-2007] Appeler Une fonction VBa Dans Excel
    Par stevekho dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/08/2010, 14h06
  3. piloter access depuis macro vba dans excel
    Par debmlc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2007, 13h41
  4. [VBA-E] Auto incrémentation en VBA dans Excel
    Par gantec dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/02/2007, 13h00
  5. Export automatique VBA dans Excel
    Par eddyG dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/12/2006, 23h34

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