Creation d'une macro utilisant une DLL

Résolu
granbapt Messages postés 20 Date d'inscription jeudi 24 mai 2012 Statut Membre Dernière intervention 27 septembre 2012 - 29 mai 2012 à 13:07
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.

6 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
30 mai 2012 à 13:57
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
3
Utilisateur anonyme
29 mai 2012 à 18:56
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...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
29 mai 2012 à 19:48
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
29 mai 2012 à 20:35
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
granbapt Messages postés 20 Date d'inscription jeudi 24 mai 2012 Statut Membre Dernière intervention 27 septembre 2012 1
30 mai 2012 à 09:55
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) ?
0
granbapt Messages postés 20 Date d'inscription jeudi 24 mai 2012 Statut Membre Dernière intervention 27 septembre 2012 1
31 mai 2012 à 09:28
Merci,
Je vais regarder ça !
0
Rejoignez-nous