[Résolu][Calc] Fonction EVAL() comme sous MS-Excel

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Hodebo87
Fraîchement OOthentifié
Messages : 8
Inscription : 19 juin 2014 09:21

[Résolu][Calc] Fonction EVAL() comme sous MS-Excel

Message par Hodebo87 »

Le Modérateur a écrit : :alerte: Merci de ne pas inventer et de respecter la syntaxe des balises : http://forum.openoffice.org/fr/forum/ftopic1369.html
Le balisage doit bien sûr être correctement orthographié (première lettre en majuscule puis le reste en minuscules).
Bonjour à tous,

Je suis nouveau sur le forum.

Je suis à la recherche d'une fonction similaire à la fonction EVAL() de la macro Morefunc pouvant être utilisée dans calc.
Cette fonction sert à évaluer le code contenu dans une cellule pour donner un résultat dans une autre cellule :
exemple avec EVAL() : dans la cellule A1 j'ai 45+53*30 et dans cellule A2 j'ai EVAL(A1) ce qui me donne en résultat 2940.

A tout hasard, j'aimerais savoir si une personne maîtrisant bien la programmation, pouvait me "bricoler" une petite application faisant le même boulot que EVAL().

Merci d'avance pour votre aide.
LibreOffice 4.1 sous Windows 7
SPPP
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 août 2012 15:53

Re: [Calc] Fonction EVAL() de Morefunc

Message par SPPP »

Bonjour,

mathématiquement parlant, 2940 n'est pas le bon resultat car il correspond à (45+53)*30.
Alors que 45+53*30, en prenant en compte que la multiplication est prioritaire, est égal à 1635.

2 questions :
1) Dans quel contexte allez vous utiliser ce code ?
(En interne dans une macro ?, dans une feuille à l'aide d'un bouton ?)

2) Faut-il un resultat juste (1635) ou érroné (2940) ?

La fonction est assez simple (en visant un resultat juste) : CelluleA2.FomulaLocal = "=" & CelluleA1.String
Ce qui donne:
En A1 : 45+53*30
En A2 : "=45+53*30" Soit "1635"

COOrdialement,
SPPP.
Lubuntu 14.04 - OOo 4.1.1
XP SP3 - OOo 4.1.0
XP SP3 - LOo 4.4.5.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26009
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fonction EVAL() de Morefunc

Message par Dude »

Salut,
Hodebo87 a écrit :Je suis à la recherche d'une fonction similaire à la fonction EVAL() de la macro Morefunc
Elle se trouve où cette macro Morefunc ?

Pense aussi à faire un minimum de recherche.
Cette question est déjà passée : https://forum.openoffice.org/fr/forum/v ... hilit=eval
Hodebo87
Fraîchement OOthentifié
Messages : 8
Inscription : 19 juin 2014 09:21

Re: [Calc] Fonction EVAL() de Morefunc

Message par Hodebo87 »

Elle est en téléchargement libre h**p://xcell05.free.
La modération a écrit :URL incomplète et donc inutile
LibreOffice 4.1 sous Windows 7
Hodebo87
Fraîchement OOthentifié
Messages : 8
Inscription : 19 juin 2014 09:21

Re: [Calc] Fonction EVAL() de Morefunc

Message par Hodebo87 »

SPPP a écrit : mathématiquement parlant, 2940 n'est pas le bon resultat car il correspond à (45+53)*30.
Alors que 45+53*30, en prenant en compte que la multiplication est prioritaire, est égal à 1635.
SPPP.
Effectivement, vous avez raison SPPP c'est plutôt (45+53)*30 (j'ai volontairement donné un exemple simpliste)
SPPP a écrit : 1) Dans quel contexte allez vous utiliser ce code ?
(En interne dans une macro ?, dans une feuille à l'aide d'un bouton ?)
SPPP.
Je vais l'utiliser dans une macro. C'est pour calculer des métrés pour des terrassements.
Par exemple, dans cellule A1 j'ai : ((5284+703+1547+2280+122+2135+1077+640+461)+5634+3581+1159+3055)*0.30 et dans la cellule A2 j'ai normalement le résultat avec EVAL sous excel.
Le modérateur a écrit : :alerte: Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.

En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
LibreOffice 4.1 sous Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26009
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fonction EVAL() de Morefunc

Message par Dude »

As-tu lu le lien que je te fournis ?
Il semble bien que non. :?

Un langage comme le Javascript possède nativement cette fonction.
Dès lors, on peut l'utiliser en Basic.

1) Création de la macro en Javascript
Menu Outils > Macro > Gérer les macros > Javascript.
Dans le container du document, créer une bibliothèque (Library1).
Puis dans celle-ci, créer la macro EvalCellule puis cliquer sur Editer
Dans le dialogue Rhino Javascript Debugger, effacer le code et le remplacer par :

Code : Tout sélectionner

oRet = eval(String(ARGUMENTS[0]));
Enregistrer et fermer le dialogue.

2) Création de la macro en Basic
Menu Outils > Macro > Gérer les macros > OpenOffice Basic.
Toujours dans le container du document, créer une bibliothèque.
Editer le code pour y coller :

Code : Tout sélectionner

Function Eval(s as String) as Double

   Dim oJS as Object
   Dim oScript as Object
      
   oJS = ThisComponent.getScriptProvider()
   oScript = oJS.getScript("vnd.sun.star.script:Library1.EvalCellule.js?language=JavaScript&location=document")
   
   On Error Resume Next
   Eval = oScript.Invoke(Array(s), Array(1), Array(oRet))
   On Error Goto 0
   
End Function

3) Tester
Dans une cellule, faire F2 puis saisir

Code : Tout sélectionner

=EVAL("(45+53)*30") 
Cela devrait fonctionner :
eval.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Hodebo87
Fraîchement OOthentifié
Messages : 8
Inscription : 19 juin 2014 09:21

Re: [Calc] Fonction EVAL() de Morefunc

Message par Hodebo87 »

Merci beaucoup je vais regarder cela.
LibreOffice 4.1 sous Windows 7
SPPP
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 août 2012 15:53

Re: [Calc] Fonction EVAL() de Morefunc

Message par SPPP »

Re,

Voici l'alternative avec un bouton:

Code : Tout sélectionner

Sub Main
	ThisComponent.Sheets(0).GetCellRangeByName("A2").FormulaLocal = "=" & ThisComponent.Sheets(0).GetCellRangeByName("A1").String
End Sub
@ Dude : tes fonctions javascript éveillent mon interêt :super:

COOrdialement,
SPPP.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Lubuntu 14.04 - OOo 4.1.1
XP SP3 - OOo 4.1.0
XP SP3 - LOo 4.4.5.2
Hodebo87
Fraîchement OOthentifié
Messages : 8
Inscription : 19 juin 2014 09:21

Re: [Calc] Fonction EVAL() de Morefunc

Message par Hodebo87 »

Je vois que je n'ai pas été assez précis dans ma demande. En faite, j'ai une colonne avec le détail de mes métrés et la colonne suivante j'ai le résultat avec la fonction EVAL() qui fonctionnait sous excel.

PS : voir pièce jointe
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 4.1 sous Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26009
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Fonction EVAL() de Morefunc

Message par Dude »

Il n'y a aucune macro dans ton classeur.
Comment crois-tu que cela va fonctionner ? Par l'opération du St-Esprit ?

Non seulement tu ne lis pas les liens que je donne mais tu ne suis même pas la procédure que j'ai mentionnée.
Bref, aucun effort... :twisted:
Hodebo87
Fraîchement OOthentifié
Messages : 8
Inscription : 19 juin 2014 09:21

Re: [Calc] Fonction EVAL() de Morefunc

Message par Hodebo87 »

Désolé de vous énerver mais c'était juste un copier/coller pour préciser ma demande... :roll:
J'ai tjrs l’impression de ne pas être très clair...
LibreOffice 4.1 sous Windows 7
Hodebo87
Fraîchement OOthentifié
Messages : 8
Inscription : 19 juin 2014 09:21

Re: [Calc] Fonction EVAL() de Morefunc

Message par Hodebo87 »

C'est bon ça marche...j'avais un problème avec l'application Java.
Merci bcp.
LibreOffice 4.1 sous Windows 7
SPPP
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 août 2012 15:53

Re: [Calc] Fonction EVAL() de Morefunc

Message par SPPP »

Bonjour,

La macro fontionne ? :super:

Un dernier petit effort : Baliser le sujet --> https://forum.openoffice.org/fr/forum/v ... 490#p18490

COOrdialement,
SPPP.
Lubuntu 14.04 - OOo 4.1.1
XP SP3 - OOo 4.1.0
XP SP3 - LOo 4.4.5.2