Bonjour,
Je souhaite réaliser un programme assez simple (donnant le prix d'une option financière).
J'ai codé une fonction en C. Lorsque j'exécute le .exe issu de ce code, tout fonctionne comme je le souhaite (le prix est cohérent, le calcul ne prend pas de temps, etc.)
Je dois ensuite créer une interface excel permettant de rentrer les différents arguments. Je souhaite donc créer une macro allant chercher ces arguments dans un classeur puis appeler ma fonction codée en C depuis mon code en VBA. Pour cela, j'ai fabriqué une .dll (qui pour l'instant est dans mon dossier System32 pour faciliter la tâche).
Le problème est le suivant : l'appel à la fonction Prix(Arguments) fonctionne quand je l'exécute depuis le .exe de mon code C, mais un message d'erreur "espace pile insuffisant" apparaît lorsque je souhaite y faire appel depuis mon code en VBA (alors que les arguments sont les mêmes).
Quelqu'un a-t-il déjà rencontré ce problème ? Existe-t-il des paramètres Excel à modifier pour allouer plus de mémoire aux calculs ?? (Je programme rarement en VBA)
Merci beaucoup !
Voici mon code VBA :
Et mon code en C :
N.B : J'ai notamment essayé de modifier la taille (arbitraire) du tableau G crée dans le code en C, mais meme avec une taille de 2 cases le message réapparaît ...
Je souhaite réaliser un programme assez simple (donnant le prix d'une option financière).
J'ai codé une fonction en C. Lorsque j'exécute le .exe issu de ce code, tout fonctionne comme je le souhaite (le prix est cohérent, le calcul ne prend pas de temps, etc.)
Je dois ensuite créer une interface excel permettant de rentrer les différents arguments. Je souhaite donc créer une macro allant chercher ces arguments dans un classeur puis appeler ma fonction codée en C depuis mon code en VBA. Pour cela, j'ai fabriqué une .dll (qui pour l'instant est dans mon dossier System32 pour faciliter la tâche).
Le problème est le suivant : l'appel à la fonction Prix(Arguments) fonctionne quand je l'exécute depuis le .exe de mon code C, mais un message d'erreur "espace pile insuffisant" apparaît lorsque je souhaite y faire appel depuis mon code en VBA (alors que les arguments sont les mêmes).
Quelqu'un a-t-il déjà rencontré ce problème ? Existe-t-il des paramètres Excel à modifier pour allouer plus de mémoire aux calculs ?? (Je programme rarement en VBA)
Merci beaucoup !
Voici mon code VBA :
Code:
Declare Function Prix Lib "BSA.Dll" Alias "_Prix@36" (NbJours As Integer, r As Double, sigma As Double, S0 As Double, K As Double)
'
Sub Exec()
'
' Exec Macro
'
Range("A1").Select
ActiveCell.Value = Prix(100, 0.02, 0.03, 100, 100)
'
End Sub
Et mon code en C :
Code:
#include <math.h>;
#define export __declspec (dllexport)
double pow(double x, int i){
if (i==0) return 0;
else if (i==1) return x;
else return x*pow(x, i-1);
}
double max(double x, double y){
if(x>y) return x;
else return y;
}
// Valeur intrinseque du call si le sous jacent est monté i fois et descendu t-i
double VI(int i, int t, double S0, double K, double up){
return max(S0*pow(up,i)*pow(1/up, t-i) - K, 0);
}
// Fonction finale
// NbJours est le nombre de jours ou le ss jacent a pu évoluer
export double __stdcall Prix(int NbJours, double r, double sigma, double S0, double K){
int americain = 1;
double G[10000];
int i,j;
double DeltaT = 0.004;
double up = exp(sigma*sqrt(DeltaT));
double p = (exp(r*DeltaT) - 1/up) / (up - 1/up);
double coeff = exp(r*DeltaT);
for (i=1; i< NbJours+2; i++) {
G[i]=VI(NbJours-i+1, NbJours, S0, K, up);
}
for (i=1; i<NbJours+1; i++){
for (j=1; j < NbJours -i + 2; j++){
G[j] = max( coeff*(p*G[j] + (1-p)*G[j+1]), americain*VI(NbJours - i - j +1, NbJours - i, S0, K, up));
}
}
return G[1];
}
N.B : J'ai notamment essayé de modifier la taille (arbitraire) du tableau G crée dans le code en C, mais meme avec une taille de 2 cases le message réapparaît ...