Macros multi-langue en excel

Signaler
Messages postés
2
Date d'inscription
lundi 28 février 2011
Statut
Membre
Dernière intervention
28 février 2011
-
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
-
Bonjour,

je dois développer des macros qui doivent fonctionner en plusieurs langues (FR et anglais).

Dans mes macros j'ajoute des formules et je dois faire attention à la langue en cours sur le PC qui exécute la macro.

J'ai codé cela:
Range("S2").Select
If test_Langue_US Then
ActiveCell.FormulaLocal = "=IF(MID(F2,9,1)=""_"",IF(MID(F2,13,1)=""/"",""Item_Sol"",""Fig_Sol""),""Inv_Fig"")"
Else
ActiveCell.FormulaLocal = "=SI(STXT(F2,9,1)=""_"",SI(STXT(F2,13,1)=""/"",""Item_Sol"",""Fig_Sol""),""Inv_Fig"")"
End If
Range("S2").Select
Selection.AutoFill Destination:=Range("S2:S" & nbligneP + 1), Type:=xlFillDefault

Avec la fonction:
Function test_Langue_US()
Set objLangSet = Application.LanguageSettings
If objLangSet.LanguageID(msoLanguageIDUI) = 1033 Then
test_Langue_US = True
Else
test_Langue_US = False
End If
End Function



MAIS J'AI un gros problème concernant le séparateur de formules.
Pour certains PC, le séparateur est la virgule.
Example: =MID(F2,13,1)
Pour d'autres PC, le séparateur est le point-virgule
Example: =MID(F2;13;1)


Deux questions:
- comment passer outre de ce problème?
- sinon, comment détecter sur le PC le séparateur valable pour le Excel en cours ?



J'espère que ma question est claire.
Merci de vos réponses.

Marc

4 réponses

Messages postés
14740
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
30 novembre 2020
148
Bonjour,

A la place de FormulaLocal, préfère FormulaR1C1
Range("S2").Select
If test_Langue_US Then
ActiveCell.FormulaLocal = "=IF(MID(F2,9,1)=""_"",IF(MID(F2,13,1)=""/"",""Item_Sol"",""Fig_Sol""),""Inv_Fig"")"
Else
ActiveCell.FormulaLocal = "=SI(STXT(F2,9,1)=""_"",SI(STXT(F2,13,1)=""/"",""Item_Sol"",""Fig_Sol""),""Inv_Fig"")"
End If 


Se simplifie en (sauf erreur de ma part) :
Range("S2").FormulaR1C1==IF(MID(RC[-14],9,1)=""_"",IF(MID(RC[-14],13,1)=""/"",""Item_Sol"",""Fig_Sol""),""Inv_Fig"")"


D'autre part, évites le plus possible de faire :
Range(...).Select
ActiveCell.*

Range(...).Value est plus rapide.

Mon site
Messages postés
2
Date d'inscription
lundi 28 février 2011
Statut
Membre
Dernière intervention
28 février 2011

Merci pour ta réponse et tes conseils.

Mais je ne pense pas que tes conseils aident à mon problème principal:

J'ai un gros problème concernant le séparateur de formules.
Pour certains PC, le séparateur est la virgule.
=MID(F2,13,1)

Pour d'autres PC, le séparateur est le point-virgule
=MID(F2;13;1)



;-)

Marc
Messages postés
14740
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
30 novembre 2020
148
Bonjour,

Les séparateurs seront les mêmes quelques soit la localisation.
Enregistre une macro et regardes.

Mon site
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Bonjour,

En passant, on peut simplifier l'écriture de test_Langue_US() avec :
Function test_Langue_US() As Boolean
If Application.LanguageSettings.LanguageID(msoLanguageIDUI) 1033 Then test_Langue_US True
End Function


Amicalement,
Us.