VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Moriaben

XLDnaute Nouveau
Bonjour à tous,

Je cherche à réaliser l'opération suivante:

un fichier *.xla inclut toutes mes fonctions et mes subs
il existe plein de workbooks xls qui appellent le même sub (codé dans le xla)
dans le sub du fixhier xla, je souhaite appeler une fonction, qui elle, sera écrite dans les fichiers xls

chaque fichier xls possède donc une fonction ayant le même nom, mais avec des calculs différents

est-ce possible? si oui, comment faire?
merci!

à noter qu'il n'y a qu'un seul fichier xls ouvert, jamais deux!
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Bonjour,

perso pas trop bien compris la question... peux tu mettre le code de la fonction présent dans la xla, et détailler un peu plus ta demande...

bonne journée
@+
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

merci pour ton aide Pierre.

alors, étape par étape:

1/ appel d'un sub dans un des nombreux fichiers excel, code écrit dans un module du fichier excel qui appelle un sub écrit dans le fichier xla:

Sub Pricer_SingleAsset_int()
PricerXLA.Pricer_SingleAsset ThisWorkbook, ActiveSheet
End Sub


2/ fichier xla

Sub Pricer_SingleAsset(CurrentWB As Workbook, CurrentWS As Worksheet)
...
...
result = Payoff(K1,K2,K3)
...
...
End Sub


3/ Payoff est une fonction écrite non pas dans le fichier xla, mais dans le fichier xls car chaque workbook possède sa propre fonction "Payoff" (qui calcule un truc différent)


Le problème, c'est que la xla ne reconnait pas la fonction "Payoff" (meme si elle est définie en Public dans le module du fichier xls)


Merci !
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Re,

essaie peut être ainsi :
Code:
'sans passage d'argument
Application.Run "classeur1.xls!payoff"
'avec passage d'argument
Application.Run "classeur1.xls!payoff", "argumentstring"
 

James007

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Bonjour, salut Pierrot93 :)

Une autre petite variante ... à tester pour récupérer le résultat :
Code:
result = Application.Run("Monfichier.xls!Module1.Payoff", K1, K2, K3)
A +
:)
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

en utilisant la méthode de James, je n'ai plus d'erreur sur la ligne "result = application.run ("..." ) ) mais j'ai un autre bogue ce qui fait que je peux pas encore tester l'ensemble:

dans le fichier xla:

Sub Pricer_SingleAsset(CurrentWB As Workbook, CurrentWS As Worksheet)
Dim TodayDate As Double
TodayDate = CurrentWB.Range("TodayDate").Value

TodayDate est donc une case nommée dans le classeur xls, et CurrentWB est un argument du sub
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Re, bonjour James

"CurrentWB" est bien initialisé ???
 

PMO2

XLDnaute Accro
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Bonjour à tous,

Peut-être

Code:
Sub Pricer_SingleAsset(CurrentWB As Workbook, CurrentWS As Worksheet)
Dim TodayDate As Double
TodayDate = CurrentWB.CurrentWS.Range("TodayDate").Value
Cordialement.

PMO
Patrick Morange
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

A priori oui étant donné que j'accède aux autres données du workbook (lorsque les cases ne sont pas nommées)

le sub du fichier xla est appelé ainsi:

PricerXLA.Pricer_SingleAsset ThisWorkbook, ActiveSheet
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

je viens de remarquer si je tape uniquement le code suivant, ça marche:

Sub Pricer_SingleAsset(CurrentWB As Workbook, CurrentWS As Worksheet)
Dim TodayDate As Double
TodayDate = Range("TodayDate").Value

mais c'est quand meme très étrange et c'est pas très propre (on sait jamais si une autre celle "todaydate" existe dans un autre fichier quelconque ouvert)
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

je viens de remarquer si je tape uniquement le code suivant, ça marche:

Sub Pricer_SingleAsset(CurrentWB As Workbook, CurrentWS As Worksheet)
Dim TodayDate As Double
TodayDate = Range("TodayDate").Value

mais c'est quand meme très étrange et c'est pas très propre (on sait jamais si une autre celle "todaydate" existe dans un autre fichier quelconque ouvert)
re, bonjour Patrick
doit fonctionner si la plage nommée est dans le classeur actif...

Il semblerait que tu n'ais pas vu le post de Patrick à 11h30...
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

J'ai bien vu le message de Patrick, cependant cela ne fonctionne pas. J'ai pour l'instant mis de côté le nom de la cellule et je tape directement dans l'adresse de celle-ci. Cela fonctionne mais par contre le problème initial persiste

Impossible d'appeler la fonction écrite dans le fichier xls, la méthode de James ne marche pas.

Merci à tous pour votre aide en tout cas, c'est vraiment gentil !
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Re,

regarde peut être ceci :
Code:
Dim x As String, y() As String
x = Mid(c.Names("TodayDate").Value, 2)
y = Split(x, "!")
MsgBox CurrentWB.Sheets(y(0)).Range(y(1)).Value
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Pierre,

j'ai pour le moment mis de côté le problème des cellules nommées en fournissant directement l'adresse de la cellule au lieu du nom associé. par contre, je n'arrive toujours pas à appeler la fonction écrite dans le fichier xls depuis le code xla
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Re,

désolé, comprends plus trop....
en utilisant la méthode de James, je n'ai plus d'erreur sur la ligne "result = application.run ("..." ) )
l'appel fonctionne ou pas ???
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

ah en fait la méthode de James fonctionne! j'avais simplement oublié le ' ' car le nom du fichier xls contient des espaces!

result = Application.Run("'mon fichier.xls'!montest", 0)

par contre, idéalement, je souhaiterais que l'appel de la fonction ne nécessite pas le nom du fichier.. pensez-vous que cela est possible?

merci beaucoup!
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Re,

essaye en utilisant une variable objet de type "workbook" dont tu utiliseras la propriété "name"....
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

j'essaye avec:
result = Application.Run("'CurrentWB.Name'!montest", 5)
et
result = Application.Run("CurrentWB.Name!montest", 5)

dans les propriétés de CurrentWB, je vois bien que "Name" possède le nom correct du fichier xls à appeler, mais dans les deux cas, cela ne fonctionne pas.
par contre je sens qu'on est vraiment pas loin de la solution ! :)
 

Pierrot93

XLDnaute Barbatruc
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

Re,

essaye ainsi :
Code:
result = Application.Run(CurrentWB.Name &  "!montest", 5)
fonctionne chez moi sans les quotes....
 

Moriaben

XLDnaute Nouveau
Re : VBA: Appel d'une fonction (dans un module d'un fichier xls) depuis fichier xla

génial !! merci beaucoup Pierre !!

voici la syntaxe quand le fichier comporte des espaces:

result = Application.Run("'" & CurrentWB.Name & "'!montest", 5)

encore Merci !
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas