Page 1 sur 1
[R] Écrire une formule excel sans se soucier de la langue
Posté : jeu. 18 mai 2023 15:24
par TommyDDR
Bonjour à tous !
J'ai besoin de votre aide, j'ai fait un script qui écrit dans un excel, notamment des formules, mais excel à ce fâcheux défaut d'avoir traduit les formules en français.
Donc un programme qui fait un
fonctionnera très bien sur un PC avec un excel en anglais, mais n'écrira rien dans la cellule sur un PC avec un excel en français.
Même problème avec le séparateur de décimal "." (anglais) "," (français) suivant ce qui est configuré dans windows.
Si quelqu'un à une solution (autre que de parser tous les noms de fonction suivant la langue...) je suis preneur !
Re: [..] Écrire une formule excel sans se soucier de la langue
Posté : jeu. 18 mai 2023 21:45
par walkson
Bonjour Tommy
En VBA, j'ai cette formule
Range("A6").Formula = "=IF(A1>0,""AAA"",""BBB"")"
et j'obtiens sur la cellule A6
=SI(A1>0;"AAA";"BBB")
Donc la traduction est automatique
Sinon il y a la solution de déterminer la langue et de modifier le texte en fonction (laborieux !) avec
Function aa
()MsgBox (Application
.LanguageSettings.LanguageID(msoLanguageIDUI
)) '1036 francais
End Function
Const msoLanguageIDUI = 2
Re: [..] Écrire une formule excel sans se soucier de la langue
Posté : sam. 20 mai 2023 21:36
par walkson
Je suis déçu de ma proposition car lancé d'autoit, il n'y a aucune traduction. Sauf erreur de ma part, il faut passer avec du VBA
Le moyen le plus simple est de créer un fichier BAS
Attribute VB_Name
= "Modulenouveau"Sub laMacro1
()Range
("A7").Formula = "=IF(A1>0,""AA"","""")"Range
("A7").Interior.Color = 65535End Sub
Sub laMacro2
()Range
("E10").Formula = "=SUM(E1:E8)"Range
("E10").Interior.Color = 65535End Sub
Sub laMacro3
()Range
("C1").Formula = "=NOW()"Range
("C1").Interior.Color = 65535End Sub
Sub laMacro4
()Range
("E11").Formula = "=POWER(E1,E2)"Range
("E11").Interior.Color = 65535End Sub
Sub laMacro5
()Range
("E12").Formula = "=ROUND(145.236,2)"Range
("E12").Interior.Color = 65535End Sub
Sub supprimerUnModule
() With ThisWorkbook
.VBProject.VBComponents .Remove .Item("Modulenouveau") End
WithEnd Sub
et de l'importer dans le classeur excel puis de lancer les macros par autoit (le module est détruit à la fin)
#include <Excel.au3>Local $oExcel = _Excel_Open()$oWorkbook = _Excel_BookNew($oExcel)$oExcel.Range("A1").Value = 1For $i = 1 To 8$oExcel.Cells($i,5).Value = 1 + $iNext$oWorkbook.VBProject.VBComponents.Import(@DesktopDir & "\module.bas")$oExcel.Run("laMacro1")$oExcel.Run("laMacro2")$oExcel.Run("laMacro3")$oExcel.Run("laMacro4")$oExcel.Run("laMacro5")$oExcel.Run("supprimerUnModule")$oExcel.Columns("C:C").EntireColumn.AutoFit
Toutes les fonctions sont traduites en français dans mon cas
Une chose importante que j'oublie, pour que $oWorkbook.VBProject.VBComponents.Import(@DesktopDir & "\module.bas") fonctionne il faut
Visual basic For Application Extensibility 5.3 activé dans visual basic (outils=>références)
et Options (dans Excel)=> centre de gestion de la confidentialité => parametre du centre de gestion => parametre des macros => Faire confiance au projet Visual Basic
Re: [..] Écrire une formule excel sans se soucier de la langue
Posté : dim. 21 mai 2023 13:49
par TommyDDR
Merci pour vos réponses, malheureusement c'est un programme que je partage et le but est de ne pas toucher aux options (sinon je leur dirais juste de passer en anglais

).
Je crois que je ne vais pas avoir d'autres choix que de détecter la langue d'excel (si quelqu'un l'a déjà fait, je vous écoute !) Et de parser les formules avant écriture.

Re: [..] Écrire une formule excel sans se soucier de la langue
Posté : dim. 21 mai 2023 16:19
par walkson
MsgBox (0,"",$oExcel.Application.LanguageSettings.LanguageID(2)) ;1036 pour le francais de France

Voir
https://excel-malin.com/tutoriels/vba-t ... nd_article
Re: [..] Écrire une formule excel sans se soucier de la langue
Posté : dim. 21 mai 2023 21:39
par TommyDDR
Merci <3