Bonjours à tous,
après plusieurs jours à tourner autour du pot, j'ai fini par venir vous demander de l'aide.
Je dois utiliser une macro VBA, elle ne fonctionne pas correctement, et c'est la première fois que je doit utiliser une macro dans une feuille de calcul.
Je sais pas si c'est mieux de proposer mon sujet dans la section mathématique ou logiciel.
Je l'ai donc mis ici, puisqu'il s'agit plutôt d'un problème d'utilisation de libre office cal.
Voila le contexte de mon problème :
Je me suis fait une feuille de calcul qui me génère une courbe de forme exponentielle.
Cette courbe est destiné à corriger une courbe linéaire.
La feuille de calcul me donne directement le nombre voulu d'éléments (d'un tableau) à copier coller dans mes programmes (langage C, micro-contrôleur).
Pour information toute la feuille de calcul fonctionne parfaitement.
Voici un exemple de courbe calculé avec 6 points :
Mon niveau mathématique n'étant pas foufou, j'utilise régulièrement les solveurs mathématique, lorsque cela devient nécessaire.
J'ai deux courbes, et il me faut le point d'intersection.
courbe 1 : f(x)=x
courbe 2 : f(x)=(ex-a)-(e-a)
Il me faut donc résoudre :
x=(ex-a)-(e-a)
Le solveur de ma calculatrice (TI-83 premium) fonctionne direct, je lui donne "a" et il me donne "x", OK très bien.
Maintenant il me faut l'intégrer dans ma feuille de calcul.
Le solveur sur internet que j'utilise me donne la formule suivante :
Pour résoudre le problème il faut utiliser la fonction de Lambert W (Oméga), qui est une fonction qui fait intervenir les nombres complexe.
Voila une fonction mathématique que je ne connaissais pas.
La fonction n'existe pas dans libre office, donc je cherche une macro sur le net.
Je trouve ceci : https://www.vbforums.com/showthread....complex-number
Puis finalement je trouve quelqu'un qui l'à modifié pour calc de libre office.
Ici : https://gist.github.com/m93a/a0199c4...6810daa46dd92d
Donc je fait un nouveau module, j'insère le code, j'utilise la fonction dans ma cellule, et là ça ne fonctionne pas.
Voila mon problème :
Alors, il reconnais le nom de la fonction, déjà c'est bien.
Il rentre à l’intérieur, OK.
Par-contre il à un problème sur cette ligne (ligne n°6) :
Complex = svc.callFunction ...
Il me dis :Code:Function Complex(a As Double, b As Double) As Any Dim svc As Object svc = createUnoService("com.sun.star.sheet.FunctionAccess") Complex = svc.callFunction("COMPLEX",Array(a,b)) End Function
Erreur d'exécution BASIC.
Une exception s'est produite :
Type: com.sun.star.container.NoSuchE lementException
Message: .
Comme si il n'avais pas connaissance d'une bibliothèque, d'un module ou un truc du genre.
Peut être que je ne fait pas ce qu'il faut pour ajouter une macro.
Je rappel que c'est la première fois que j'ai a utiliser une macro, je suis donc novice novice ++ en utilisation/édition de macro.
Si quelqu'un peut m'assister pour ajouter cette macro, ce serait génial.
Ceci me permettrais d'utiliser ma feuille de calcul, sans utiliser un outil externe pour calculer ce point d'intersection.
Le fichier complet de la macro est disponible ici : https://gist.github.com/m93a/a0199c4...6810daa46dd92d.
NB : je sais que la solution à l'équation à deux solutions.
Mais, un problème à la fois, je verrais en fonction du résultat obtenu.
La première chose est de faire fonctionner cette satané macro.
-----