Page 1 sur 1

[Calc] Traduction en anglais de fonction en langue locale

MessagePublié: 29 Jan 2009 23:33
par Loopingss
Cette procédure permet de traduire en anglais une fonction de Calc en Langue Locale. Cette traduction est indispensable pour utiliser une fonction Calc dans une procédure Basic. Elle fonctionne avec les formules complexes.
Merci à L Godard et B Marcelly dont j'ai adapté la procédure décrite dans "Programmation OpenOffice.org2 - Macros et API, p 370 et suivantes pour pouvoir être utilisée dans n'importe quel fichier.
Code : Tout sélectionner   AgrandirRéduire
REM  *****  BASIC  *****

Option Explicit

Sub NomAnglaisFonctionCalc()
REM **************************************************
REM Cette procédure affiche le nom anglais d'une fonction saisie en Français
REM Pour être utilisée dans n'importe quel fichier, les coordonnées de la feuille
REM et de la cellule où a été saisie la formule en langue locale sont demandées
REM Fonctionne également avec les formules composées
REM par Loopingss - 2009
REM procédure proposée pour Suprème de Code le 29/01/2009
REM **************************************************

Dim oSht as Object, oCell as Object, sFormuleF as String, sFormuleA as String
Dim sShtAdres as String, sCellAdres as String

REM Saisie des coordonnées de Feuille/Cellule où est stockée le formule à traduire
sShtAdres = InputBox("Sur quelle feuille se trouve la fonction [Ex : Feuille1] ?")
sCellAdres = InputBox("Dans quelle cellule se trouve la fonction [Ex : A12] ?")

oSht = ThisComponent.Sheets.getByName(sShtAdres) 'Accès à la Feuille
oCell = oSht.getCellRangeByName(sCellAdres) 'Accès à la cellule
sFormuleF = oCell.FormulaLocal 'Formule en langue locale
sFormuleA = oCell.Formula 'Formule en langue anglaise à utiliser dans Basic
Print "Formule locale : ", sFormuleF, spc(1)
Print "Formule anglaise : ", sFormuleA, spc(1)
End Sub

[Calc] N'utilisez plus FormulaLocal

MessagePublié: 24 Nov 2012 17:39
par bm92
Dans différents codages sur ce forum on remplit une cellule avec une formule en utilisant la propriété FormulaLocal. Par exemple :
maCellule.FormulaLocal = "=SI(A2<100;A2;ARRONDI(A2;1))"
Cette méthode a l'avantage d'être simple, car on exprime la formule telle qu'elle apparaît sur le tableur.
L'alternative est d'utiliser la pseudo-propriété Formula, qui a l'inconvénient d'être -apparemment- en anglais.
maCellule.Formula = "=IF(A2<100;A2;ROUND(A2;1))"
En fait, Formula contient la formule exprimée de manière interne à OpenOffice. Si une fonction de la formule est un add-in, l'expression interne est assez bizarre :
maCellule.FormulaLocal = "=ALEA.ENTRE.BORNES(5;10)"
maCellule.Formula = "=com.sun.star.sheet.addin.Analysis.getRandbetween(5;10)"


Ainsi l'usage de FormulaLocal semble bien plus simple que Formula.
C'est en pratique suffisant dans un environnement français. Par contre dans un contexte multinational, où l'interface utilisateur n'est pas toujours en français, FormulaLocal ne convient pas : un nom de fonction français ne sera pas reconnu sur un Calc en langue allemande ou anglaise.

D'autre part LibreOffice a introduit depuis sa version 3.4 un nouvel onglet d'options pour satisfaire les nostalgiques d’Excel.
OptionsFormule.png
Options LibreOffice pour les formules

Le menu Outils > Options > LibreOffice Calc > Formule offre les réglages suivants :
  • Choix de la formule :
    • Calc A1 : adressage classique
    • Excel A1 : adressage différent pour une ligne entière (13:13) ou une colonne entière (A:A)
    • Excel L1C1 : adressage relatif ou absolu en numéro de ligne et de colonne
  • Coche : utiliser les noms de fonction anglais
  • Choix du séparateur pour :
    • arguments de fonction
    • colonne de matrice
    • ligne de matrice
Ceci concerne l’interface utilisateur, en apparence. Mais la conséquence est qu'un choix de ces options par l'utilisateur a un impact sur FormulaLocal.
Par exemple, si l'utilisateur a configuré son Calc pour afficher les noms anglais des fonctions, FormulaLocal devra être rempli avec des noms anglais de fonction.

Suivant l'option activée, la lecture de FormulaLocal peut donner un résultat différent de ce qu'on a écrit!
Par exemple si l'utilisateur a configuré son Calc pour utiliser le repérage Excel A1, on peut écrire FormulalLocal avec la syntaxe Excel A1 ou la syntaxe Calc, mais la relecture de FormulaLocal renverra toujours la syntaxe ExcelA1.

Si un utilisateur a réglé son Environnement Linguistique sur Français(Suisse), ceci implique l'affichage du point décimal (au lieu de la virgule). Alors, LibreOffice rectifie automatiquement le séparateur d'arguments de fonction pour imposer la virgule (à la place du point-virgule). Pour écrire FormulaLocal on devra toujours utiliser le point-virgule, alors que la lecture de FormulaLocal renverra une virgule comme séparateur.

Les options d'affichage ont des effets assez bizarres. Essayez donc diverses options avec ce document, vous serez surpris.
FormulaLocal_LibO.ods
Document pour essais
(12.99 Kio) Téléchargé 330 fois


Conclusion
Comme Formula est la représentation interne à Calc de la formule, sa syntaxe est indépendante des options d'affichage que peut choisir l'utilisateur. Une formule écrite par programme avec Formula restera toujours valable, alors qu'une formule écrite avec FormulaLocal peut n'être valide que pour une configuration donnée de l'interface utilisateur.

Re: [Calc] N'utilisez plus FormulaLocal

MessagePublié: 24 Nov 2012 21:27
par Dude