Instancier une class d'un autre fichier .xlam importé

Bonjour,

Je suis actuellement entrain de programmer un module class "SAP" qui comporte des bouts de code que je compte réutiliser sur plein d'autres classeurs. Le but est de faire un objet SAP avec des fonctions pour gérer les connexions, erreurs, transactions, opérations, etc et d'en faire une bibliothèque qui permettrai à moi et a d'autres utilisateur ne s'y connaissant pas beaucoup en programmation de l'utiliser pour crée des programmes simples a l'aide d'une documentation pour automatisé SAP.

Il y'a récemment j'ai appris qu'on pouvais faire un .xlam pour crée un fichier Excel comportent des modules, je me suis donc dis que je pouvais mettre mes modules de classe dedans et l'importer dans mes autres classeurs et c'est ce que j'ai fait. Mais je n'arrive pas à instancier ma Class depuis un autre classeur alors que j'ai bien importé le .xlam, n'ayant découvert les .xlam que récemment je ne sais pas vraiment si il est possible d'appeler une class d'un .xlam depuis un autre classeur ?

J'ai testé ceci (en sachant que mon fichier ce nomme "xxxExcel.xlam")

'on est sur le Module1 d'un autre classeur avec "xxxExcel.xlam" d'importé
Sub main()
    Dim test As xxxExcel.SAP
    Set test = new xxxExcel.SAP
End Sub
'on est sur le Module1 d'un autre classeur avec "xxxExcel.xlam" d'importé
Sub main()
    Dim test As SAP
    Set test = new SAP
End Sub

Merci d'avance pour votre aide.

Bonjour,

Après essais et recherches ayant abouti à ce lien https://docs.microsoft.com/fr-fr/previous-versions/office/troubleshoot/office-developer/set-up-vb-pr..., ce ne serait pas possible directement...

En fait les classes de projets complémentaires ont une instanciation privée par défaut ou publique sans pouvoir être créée, pas très pratique...

Il faudrait donc créer une "variable" publique (plus précisément une fonction renvoyant un objet du type de la classe en question) dans un module standard (public) de ce même projet xlam :

'MODULE STANDARD de xxxExcel.xlam (SAP étant le nom de la classe à instancier/importer)
public function mySAP() as SAP
set mySAP = new SAP
end function

De cette manière, il serait possible d'obtenir dans un projet quelconque :

'Module quelconque du classeur exécutant
dim oSAP as xxxExcel.SAP
set oSAP = xxxExcel.mySAP
with oSAP
    msgbox .ForReadProperty 'propriété string fictive
end with

NB : Pour que ça marche, il faut bien mettre la propriété Instancing de la classe SAP sur PublicNotCreatable au préalable !!! Exemple à l'ouverture du fichier faisant appel à la référence :

'MODULE THISWORKBOOK DU CLASSEUR EXECUTANT
Private Sub Workbook_Open()
ChangeInstancing
End Sub

Sub ChangeInstancing()
Me.VBProject.VBE.VBProjects("xxxExcel").VBComponents("SAP").Properties("Instancing").Value = 2
End Sub

Cdlt,

Merci de ta réponse rapide ! Ca marche de mon côté, par contre je n'ai pas eu besoin de faire ce que tu as indiqué ci dessous (je ne sais pas si c'est normal mais tant que ça marche je vais pas m'en plaindre)

NB : Pour que ça marche, il faut bien mettre la propriété Instancing de la classe SAP sur PublicNotCreatable au préalable !!! Exemple à l'ouverture du fichier faisant appel à la référence :

'MODULE THISWORKBOOK DU CLASSEUR EXECUTANT

Private Sub Workbook_Open()

ChangeInstancing

End Sub

Sub ChangeInstancing()

Me.VBProject.VBE.VBProjects("xxxExcel").VBComponents("SAP").Properties("Instancing").Value = 2

End Sub

Salut Frej,

Super ! Honnêtement, je n'ai fait qu'appliquer assidûment les consignes figurant sur le lien de ma première réponse. Tant mieux si l'instanciation privée suffit. J'imagine qu'on ne bénéficie plus de la complétion dans ce cas et on se retrouve alors avec l'équivalent d'un lateblinding !?!

Cdlt,

Rechercher des sujets similaires à "instancier class fichier xlam importe"