Bonjour,

Ce sujet doit agacer les vieux routards qui le maitrisent mais je reviens vers vous parce que je ne trouve pas de réponse satisfaisante ailleurs (et aussi parce que j'aime bien développez.net).

J'essaie une nouvelle fois de créer une DLL ActiveX, en essayant de rester le plus simple possible, pour l'utiliser à partir d'une application Access VBA.
J'utilise Visual Studio 2015 et, en général, Access 2010 bien que cette partie "client" importe peu.
J'ai créé un nouveau projet VB de type Windows\bibliothèque de classe.
J'ai ajouté à ce projet un élément de type "Classe COM" nommé ComClass1.vb ce qui a eu pour effet d'activer les options "Inscrire pour COM interop" de l'onglet [Compiler] des propriétés du projet et "rendre l'assembly visible par COM" de la page "Informations de l'assembly" de l'onglet [Application].

J'ai rédigé une méthode simple dans la classe ComClass1 pour réaliser mon test. Voici l'intégralité du code de la classe:
Code VB.NET : 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
 
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
 
#Region "GUID COM"
    ' Ces GUID fournissent l'identité COM pour cette classe 
    ' et ses interfaces COM. Si vous les modifiez, les clients 
    ' existants ne pourront plus accéder à la classe.
    Public Const ClassId As String = "fd753f0c-c9bc-498a-9ac2-fede8f94b783"
    Public Const InterfaceId As String = "7957fb7e-aec5-4a6d-96a0-eb12cf13a7dc"
    Public Const EventsId As String = "6bd7cafa-2acb-4f1c-a357-180a74ba1691"
#End Region
 
    ' Une classe COM pouvant être créée doit avoir Public Sub New() 
    ' sans paramètre, sinon, la classe ne sera pas 
    ' inscrite dans le Registre COM et ne pourra pas être créée 
    ' via CreateObject.
    Public Sub New()
        MyBase.New()
    End Sub
    Public Function Multiplier(ByVal Nombre1 As Single, ByVal Nombre2 As Single) As Object
        Try
            Return Nombre1 * Nombre2
        Catch ex As Exception
            Return Nothing
        End Try
    End Function
 
End Class

Après avoir généré l'application sans erreur je ne parviens pas à inscrire la DLL dans la base de registre (j'utilise VS 2015 dans une VM où je n'ai pas office d'installé, je dois donc inscrire "manuellement" la DLL sur la machine qui dispose d'Office).
Voici le message d'erreur que je reçois:

Nom : RegSvr32.JPG
Affichages : 86
Taille : 21,4 Ko

De même, en déclarant explicitement la fonction dans le module VBA Access de la manière suivante:
Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Private Declare Function Multiplier Lib "D:\APPLICATIONS\DIVERS\ComposantVS15\bin\x86\Release\ComposantVS15.dll" _
               Alias "Mutliplier" (V1 As Single, V2 As Single)
J'obtiens une erreur
Erreur d'exécution '453': Point d'entrée Multiplier d'une DLL introuvable dans monchemindll\monprojet.dll
J'ai essayé en modifiant la plateforme cible pour forcer sur x86, mais toujours pareil.

Bref, pour l'instant ça ne fonctionne pas...

Merci pour votre aide!