Creation d'une macro utilisant une DLL [Résolu]

Messages postés
20
Date d'inscription
jeudi 24 mai 2012
Statut
Membre
Dernière intervention
27 septembre 2012
- - Dernière réponse : granbapt
Messages postés
20
Date d'inscription
jeudi 24 mai 2012
Statut
Membre
Dernière intervention
27 septembre 2012
- 31 mai 2012 à 09:28
Bonjour,

Après plusieurs recherches, notamment sur ce forum, je bloque toujours sur le problème que je vous soumets, en espérant ne pas faire doublon avec une autre discussion qui m'aurait échappée...

J'ai codé une fonction codée en C/C++ qui prend deux nombres en paramètres et renvoie un nombre, et il faudrait que cette fonction soit exploitable sous excel : l'utilisateur entre par exemple les valeurs des paramètres dans deux cellules et le résultat calculé par la fonction est alors affiché dans une troisième cellule.

J'ai cru comprendre avec mes premières recherches qu'il fallait passer par la création d'une DLL contenant ma fonction (ce que j'ai fait avec Visual Studio), mais c'est maintenant dans l'exploitation de cette DLL que j'échoue.

J'ai essayé de créer une macro destinée à utiliser la fameuse DLL, voici le code :
 
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 28/05/2012 par T0134406
'
Private Declare Function MyFunc Lib "MyFuncDLL.dll" (ByVal y As Double) As Double
 
Public Function MyFuncVBA(x As Double, y As Double) As Double
MyFuncVBA = MyFunc(x, y)
End Function
 
Dim Param1 As Double, Param2 As Double, Result As Double
 
Param1 = Range("A2").Value
Param2 = Range("A3").Value
 
Result = MyFuncVBA(Param1, Param2)
 
Range("B2").Value = Result
 
'
End Sub


Comme vous pouvez vous en douter si j'en parle ici, ça ne fonctionne pas (apparemment, c'est l'inclusion de la fonction qui doit poser probleme car le message d'erreur de compilation est "seuls des commentaires peuvent apparaitre après End Sub, End Function ou End Property"). Comme c'est la première fois que je fais ça et que j'ai programmé cette macro en glanant ce que je pouvais sur différents documents d'initiation, je me retrouve un peu bloqué.

J'aurais bien besoin de vos conseils pour terminer et savoir comment faire fonctionner tout ça...

Merci d'avance à tous ceux (et celles) qui pourront y jeter un oeil.
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
14500
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 juillet 2019
131
3
Merci
Bonjour,

1) Soit dans le dossier de l’exécutable (voir si c'est celui du fichier Excel ou celui d'Excel) sinon, dans le dossier System32.
2) Intéresses-toi au module de ta feuille ou alors au module WorkBook (évènement CellChange ou similaire).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
0
Merci
Bonjour,

"seuls des commentaires peuvent apparaitre après End Sub, End Function ou End Property".


Je ne sais pas si c'est la même chose en VBA ou en C, mais, en VB.net, c'est le message que j'obtiens avec des instructions en double après un effacement ou un copier-coller etc.

Par exemple

sub titi()
--
--
end sub
end sub ==> esseulé et inutile


class machinchose
---
---
end class
end class ==> esseulé et inutile


etc...
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
210
0
Merci
Bonjour,
La déclaration de la fonction ne saurait tout simplement se faire au sein même d'une procédure !
et donc !

  Private Declare Function MyFunc Lib "MyFuncDLL.dll" (ByVal y As Double)  As Double

n'a de place et de sens que dans la partie générale du module, avant toute procédure !
Public Function MyFuncVBA(x As Double, y As Double) As Double
MyFuncVBA = MyFunc(x, y)
End Function

N'a aucun sens au sein d'une procédure !:
On se demande d'ailleurs pourquoi une fonction VBA pour retourner le résultat d'une fonction C ! Pourquoi pas, pendant que nous y sommes, une fonction qui appelle une fonction qui appelle une fonction, qui appelle une fonction,... etc ... pour retourner le résultat que retournerait directement la dernière fonction appelée !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
14500
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 juillet 2019
131
0
Merci
Bonjour,

Tu as tout inclu dans une Sub, ce qui est incorrecte :

Un peu mieux :
Private Declare Function MyFunc Lib "MyFuncDLL.dll" (ByVal y As Double) As Double
 
Public Function MyFuncVBA(x As Double, y As Double) As Double
MyFuncVBA = MyFunc(x, y)
End Function
 
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 28/05/2012 par T0134406
'

Dim Param1 As Double, Param2 As Double, Result As Double
 
Param1 = Range("A2").Value
Param2 = Range("A3").Value
 
Result = MyFuncVBA(Param1, Param2)
 
Range("B2").Value = Result
 
'
End Sub


---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Commenter la réponse de NHenry
Messages postés
20
Date d'inscription
jeudi 24 mai 2012
Statut
Membre
Dernière intervention
27 septembre 2012
0
Merci
Merci pour ces corrections !

J'ai maintenant deux autres questions :
1. Où dois-je placer le fichier MyFuncDLL.dll pour qu'Excel le trouve?
2. Comment faire pour que la macro soit toujours active sans avoir besoin de lancer son exécution manuellement (et ainsi que le resultat change automatiquement lorsqu'on modifie les valeurs des paramètres) ?
Commenter la réponse de granbapt
Messages postés
20
Date d'inscription
jeudi 24 mai 2012
Statut
Membre
Dernière intervention
27 septembre 2012
0
Merci
Merci,
Je vais regarder ça !
Commenter la réponse de granbapt