Macros multi-langue en excel

cs_marcandres Messages postés 2 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 28 février 2011 - 28 févr. 2011 à 16:51
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 1 mars 2011 à 18:33
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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 févr. 2011 à 20:02
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
0
cs_marcandres Messages postés 2 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 28 février 2011
28 févr. 2011 à 20:21
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
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 févr. 2011 à 20:50
Bonjour,

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

Mon site
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
1 mars 2011 à 18:33
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.
0
Rejoignez-nous