XL 2013 Appeler procédure variable

D4_

XLDnaute Nouveau
Bonjour,

Dans le but de rendre mon application accessible aux utilisateurs de différents pays au sein de la société, je souhaiterai donner la possibilité à l'utilisateur de sélectionner sa langue pour utiliser l'application lors de son identification (via un combobox dans un premier userform "Login").

Explication détaillée de ce que je fais :
Dans un onglet "Languages" seront réunies toutes les langues disponibles pour les utilisateurs :
- La colonne A sert de source au combobox de sélection de la langue lors de l'identification de l'utilisateur.
- Les colonnes B à D seront à renseigner en fonction des userforms, des objets, msgbox, etc.. contenant du texte à afficher selon la langue sélectionnée par l'utilisateur.
- La mention "chosen" s'affiche sous la langue sélectionnée par l'utilisateur pour déterminer la traduction à utiliser durant toute l'utilisation de l'application.​

L'idée est donc de récupérer le contenu de chaque cellule en colonne D et d'y ajouter la traduction à apporter (Colonnes B ou C); ce qui donne :
menu.caption="Menu"

selon le code suivant :

VB:
Private Sub UserForm_Initialize()
'Définition langue sélectionnée en Login
Set langue = Sheets("Languages").Cells.Find("chosen", lookat:=xlWhole).Offset(-1, 0)

'Initialisation des textes dans la langue sélectionnée
Dim cel As Range
Dim action As String
For Each cel In Sheets("Languages").Range("d3:d999")
If cel <> "" Then
action = cel & "=" & """" & cel.Offset(0, -2) & """"
MsgBox (action)
End If
Next cel

End Sub

Après ce code test, je récupère bien, en variable string nommée "action", le bout de code que je souhaiterai executer.

Voilà où se trouve le problème :
à la place du test MsgBox, je souhaiterai intégrer une ligne de code disant quelque chose du genre : Call action, afin de traduire chaque élement du userform 1 par 1 lors de l'initialisation.

Cette idée de base me semblait être la façon la plus simple d'initialiser les traductions.
Peut-être avez vous une autre idée, ou me direz-vous que ce que je souhaite est irréalisable..

Merci par avance de votre aide,

D4_
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    33.6 KB · Affichages: 30

D4_

XLDnaute Nouveau
Salut Staple,

Merci, mais j'ai déjà réussi à déterminer quelle langue afficher dans le code mentionné au dessus, via un combobox renseigné au préalable par l'utilisateur.

Le problème se situe au niveau de l'initialisation des traductions, pour justement ne pas avoir à taper une ligne de code par langue disponible en utilisant If comme tu proposes.
Il me suffira donc d'ajouter des colonnes dans l'onglet Languages et intégrer les traductions une seule fois pour les mettre à disposition des utilisateurs.

Peut-être ne suis-je pas très clair..

J'aimerai me servir de ce que j'ai réussi à récupérer pour chaque ligne de l'onglet Languages :
menu.commandbutton1.caption="Send email" afin de traduire chaque objet de chaque userform présent dans mon application.
 

Staple1600

XLDnaute Barbatruc
Bonsoir

Excel sait détecter automatiquement quel est la langue utilisée sur l'ordinateur.
(d'où ma proposition qui évite à l'utilisateur de choisir une langue)
En remaniant ton code, selon le Country Code renvoyé, la traduction idoine sera affichée.

Exemple succinct
Le code VBA dans l'userform
Le Label1 a comme Tag la valeur A
et selon la langue utilisée sur le PC, la bonne traduction s'affichera.
VB:
Private Sub UserForm_Initialize()
Country_Code = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
StrG = CStr(Country_Code & Label1.Tag)
Label1 = Application.VLookup(StrG, [Base], 4, 0)
End Sub
01Translate.jpg
 

D4_

XLDnaute Nouveau
Bonjour,

Je comprend mieux ta démarche maintenant, merci.
Cependant je ne souhaite pas me servir de la langue directement utilisée sur la machine.

L'application étant utilisée dans un milieu professionnel où les PC sont paramétrés par défaut en Anglais et où il est nécessaire de demander les droits admin pour modifier le moindre paramètre windows, je souhaite laisser la possibilité aux utilisateurs de choisir leur langue avant de lancer l'application (un peu à l'image de SAP. Voir screenshot ci-dessous :
L'utilisateur sélectionne sa langue (code language en 2 lettres) ici, l'application est intégralement traduite en Russe pour toute la durée d'utilisation du logiciel.
 

Pièces jointes

  • sap.JPG
    sap.JPG
    75.3 KB · Affichages: 29

merinos

XLDnaute Accro
Tu peux facilement créer un sélecteur de langue. (voir attachment)

Puis tu ajoutes une macro sur la feuille qui réagisse à la sélection par le chargement des paramètres

voici un exemple de code réagissant à une sélection.

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next

  If Not Intersect(Range("client_selector"), Target) Is Nothing And Target.Count = 1 Then
    '  ***
    ActiveSheet.PivotTables("PivotTable2").PivotFields("unique").CurrentPage = Range("client_selector").Value
    ' ***
  Else
     '***
    Me.ComboBox1.Visible = False
    '***
  End If

End Sub

Merinos
 

Pièces jointes

  • selectioneur langue.xlsx
    8.9 KB · Affichages: 15
Dernière édition:

Discussions similaires

Réponses
8
Affichages
619

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof