IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Afficher des UserForm multilingue [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Comptable
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut Afficher des UserForm multilingue
    Bonjour,
    J'aimerais rendre les userforms de mon classeur multilingue.
    J'ai créé une feuille UserFormCaptions qui contient les informations nécessaires pour gérer les textes en différentes langues

    Colonne A: Nom du UserForm
    Colonne B: Nom du contrôle
    Colonne C: Type du contrôle
    Colonne D: Valeur "Caption" en FR
    Colonne E: Valeur "Caption" en DE
    Colonne F: Valeur "Caption" en EN
    Nom : Sheet.png
Affichages : 1041
Taille : 34,8 Ko

    J'avais imaginé utiliser la procédure SUB UserForm_Initialize()
    1. Je récupère la langue sélectionnée par l'utilisateur
    2. Je recherche le nom du formulaire sur la feuille UserFormCaptions (colonne A)
    3. Je crée une boucle Do Loop

    Mais voilà... Je ne sais pas comment faire pour modifier la valeur Caption des contrôles de ma liste!

    Je vous remercie pour votre aide
    Amicalement
    Charles

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour travailler en mode multi-langue, j'utilise la fonction EQUIV (MATCH pour version anglaise et VBA), tu cherches la langue et EQUIV te renvoie le numéro de la colonne de la langue cherchée
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Tu devrais en profiter pour remettre en cause tes traductions;
    Non résident ne se traduit par exemple en anglais pas par "not resident" (qui n'aurait aucun sens en anglais) mais par "non resident"

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Dire que cela se fait les yeux fermés en VB.net.

    Puis dire que toute édition supérieure à Express de Visual Studio, permet de faire des applications compilées pour travailler avec Excel.

    Heureusement que je suis habitué de prêcher dans le désert.

  5. #5
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Initialize()
    ColLangue = 4
    ColName = 3
    ColUserform = 1
    Set f = Worksheets("UserFormCaptions")
    dern = f.Cells(Rows.Count, ColUserform).End(xlUp).Row
     For i = 2 To dern
      If f.Cells(i, ColUserform).Value <> Me.Name Then
      Else
       Me.Controls(f.Cells(i, ColName).Value).Caption = f.Cells(i, ColLangue).Value
      End If
     Next
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    Comptable
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Pour travailler en mode multi-langue, j'utilise la fonction EQUIV (MATCH pour version anglaise et VBA), tu cherches la langue et EQUIV te renvoie le numéro de la colonne de la langue cherchée
    Bonjour et merci ta réponse, mais mon problème n'est de trouver la colonne correspondant à la langue, mais plutôt de créer la routine pour appliquer la traduction à l'ouverture du formulaire.

  7. #7
    Membre averti
    Homme Profil pro
    Comptable
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    Tu devrais en profiter pour remettre en cause tes traductions;
    Non résident ne se traduit par exemple en anglais pas par "not resident" (qui n'aurait aucun sens en anglais) mais par "non resident"
    Merci pour l'information, je corrigerai

  8. #8
    Membre averti
    Homme Profil pro
    Comptable
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut
    Citation Envoyé par Docmarti Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Initialize()
    ColLangue = 4
    ColName = 3
    ColUserform = 1
    Set f = Worksheets("UserFormCaptions")
    dern = f.Cells(Rows.Count, ColUserform).End(xlUp).Row
     For i = 2 To dern
      If f.Cells(i, ColUserform).Value <> Me.Name Then
      Else
       Me.Controls(f.Cells(i, ColName).Value).Caption = f.Cells(i, ColLangue).Value
      End If
     Next
    End Sub
    Merci Docmarti,
    Ce code est bien ce que je cherche.
    Mais il y a un petit problème lorsque le type de contrôle est "Multipage"... Est-ce que ces contrôles doivent être traité différemment ?
    Merci pour ton aide

  9. #9
    Invité
    Invité(e)
    Par défaut
    Le multipage comporte des onglets (page) le traitement est forcement différent que ce soit dans excel qu'en vba!

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    mais mon problème n'est de trouver la colonne correspondant à la langue, mais plutôt de créer la routine pour appliquer la traduction à l'ouverture du formulaire
    Pour afficher le libellé (propriété Caption) dans la langue de l'utilisateur, il faut pourtant connaître le numéro de la colonne où se trouve le libellé de la langue correspondante. En tout cas, c'est comme cela que je pratique depuis des années avec ou sans VBA et cela fonctionne parfaitement.
    Et crois moi, les problèmes linguistiques en Belgique, on connaît
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour Philippe,

    J'ai oublié de dire que je ne te visais pas personnellement. Mais, je réalise de plus en plus que de trop pousser à "réinventer l'eau chaude", comme le dis si bien m@rina, alors que des outils mieux adaptés, et qui laissent les utilisateurs à leurs créations, en automatisant l'intendance, sont loin d'être optimales...

    Et puis, les choses que l'on fait dans l'urgence, pour se dépanner, ont tendance à se perpétuer. Surtout avec Excel...

  12. #12
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par cschauss Voir le message
    Mais il y a un petit problème lorsque le type de contrôle est "Multipage"... Est-ce que ces contrôles doivent être traité différemment ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ColUserform = 1
    ColTypename = 2
    ColName = 3
    ColLangue = 5
     
     
    Set f = Worksheets("UserFormCaptions")
    dern = f.Cells(Rows.Count, ColUserform).End(xlUp).Row
     For i = 2 To dern
      If f.Cells(i, ColUserform).Value = Me.Name Then
       If f.Cells(i, ColTypename).Value = "Page" Then
        t = Split(f.Cells(i, ColName).Value, ":") 'Exemple MultiPage1:0 (le nom du Multipage et l'index de la page)
        Me.Controls(t(0)).Pages(t(1)).Caption = f.Cells(i, ColLangue).Value
       Else
        Me.Controls(f.Cells(i, ColName).Value).Caption = f.Cells(i, ColLangue).Value
       End If
      End If
     Next

  13. #13
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Pour utiliser le nom du Multipage et le nom de la page "MultiPage1:Page1"
     
      t = Split(f.Cells(i, ColName).Value, ":") '  MultiPage1:Page1 
        Me.Controls(t(0)).Pages(CStr(t(1))).Caption = f.Cells(i, ColLangue).Value
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Pour utiliser le nom du Multipage et l'index de la page "MultiPage1:0"
     
     t = Split(f.Cells(i, ColName).Value, ":") '  MultiPage1:0 
        Me.Controls(t(0)).Pages(t(1)).Caption = f.Cells(i, ColLangue).Value

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Activate()
    Dim langue As Single, colonne As Long
    langue = (Application.LanguageSettings.LanguageID(msoLanguageIDUI))
    Select Case langue
    Case 1036, 2060, 11276, 3084, 9228, 12300, 15372, 5132, 13324, 6156, 14348, 58380, 8204, 10252, 4108, 7180: colonne = 3 'francais
    Case 1033, 2057, 3081, 10249, 4105, 9225, 15369, 16393, 14345, 6153, 8201, 17417, 5129, 13321, 18441, 7177, 11273, 12297: colonne = 4 'anglais
    Case 1031, 3079, 5127, 4103, 2055:  colonne = 5 'allemand
    End Select
    'les nom de controls etant en colonne 2 par exemple
    tu peux soit boucler sur la plage soit boucler sur les controls avec "for each" la boucle for each faisant abstraction de la hiérachie au cas ou des controls aurait un autre parent que le userform c'est plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each ctrl In Me.Controls
    'cherche ta cellule correspondant au nom veritable du controls en colonne 2 et attribu lui la caption de la colonne de la langue determiné juste avant 
    '......
    '.......
    '......
    Next
    End Sub
    'ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for each cel in plage'(plage a determiner)
    me.controls(cel.value).caption=cel.offset(x)' x etant  la colonne determiné plus haut moins 1
    next
    tu pourrais meme ajouter par exemple un language forcé au cas ou un americain viendrais a utiliser le fichier avec un pc francais
    bref
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    un petit test vite fait dans un userform
    la langue est automatique en fonction du language system et tu a un bouton pour changer la langue successivement a chaque click
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Option Explicit
    Dim ind As Long
    Private Sub CommandButton4_Click()'c'est le bouton pour changer la langue
    ind = ind + 1
    If ind = 6 Then ind = 3
    change_langue ind
    End Sub
    Private Sub UserForm_Activate()
    Dim langue As Single, colonne As Long, plage As Range, cel As Range
    ind = 3
    langue = (Application.LanguageSettings.LanguageID(msoLanguageIDUI))
    Select Case langue
    Case 1036, 2060, 11276, 3084, 9228, 12300, 15372, 5132, 13324, 6156, 14348, 58380, 8204, 10252, 4108, 7180: colonne = 3 'francais
    Case 1033, 2057, 3081, 10249, 4105, 9225, 15369, 16393, 14345, 6153, 8201, 17417, 5129, 13321, 18441, 7177, 11273, 12297: colonne = 4 'anglais
    Case 1031, 3079, 5127, 4103, 2055:  colonne = 5 'allemand
    End Select
    Set plage = Range("B2:B5").Cells
    For Each cel In plage
    Debug.Print cel
    Me.Controls(cel.Text).Caption = Cells(cel.Row, colonne).Text
    Next
    End Sub
    Private Sub change_langue(indexlangue)
    Dim plage As Range, cel As Range
    Set plage = Range("B2:B5").Cells
    For Each cel In plage
    Debug.Print cel
    Me.Controls(cel.Text).Caption = Cells(cel.Row, indexlangue).Text
    Next
    End Sub
    Nom : demo2.gif
Affichages : 867
Taille : 91,7 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Membre averti
    Homme Profil pro
    Comptable
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Par défaut Afficher UserForm Multilingue - Résolu
    Bonjour,

    Je tiens à tous vous remercier pour votre aide et le temps que vous m'aurez consacré.
    Vous êtes super...

    Voici ma Sub.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub UserForm_Initialize()
              Dim wkWord As Worksheet
              Dim intCol As Byte
              Dim rgeCel As Range
              Dim strCap As String
     
    10        On Error GoTo UserForm_Initialize_Error
     
    20        If GetSetting("XLFisc", "Parameter", "Language") = "" Then SaveSetting "XLFisc", "Parameter", "Language", "FR"
     
    30        If GetSetting("XLFisc", "Parameter", "Language") <> "FR" Then
    40            Set wkWord = ThisWorkbook.Worksheets("Wording")
    50            intCol = wkWord.Range("1:1").Find(What:=GetSetting("XLFisc", "Parameter", "Language"), LookIn:=xlValues, LookAt:=xlWhole).Column - 2
     
    60            Set rgeCel = wkWord.Range("B:B").Find(What:="ufBDDisplay_P", LookIn:=xlValues, LookAt:=xlWhole)
    70            Do While rgeCel = Me.Name
    80                strCap = rgeCel.Offset(0, intCol)
    90                If rgeCel.Offset(0, 2) = "Form" Then
    100                   If strCap <> "" Then Me.Caption = strCap & " - " & sCopyright
    110               ElseIf rgeCel.Offset(0, 2) = "Page" Then
    120                   Me.Controls(rgeCel.Offset(0, 3).Value).Pages(rgeCel.Offset(0, 1).Value).Caption = strCap
    130               Else
    140                   Me.Controls(rgeCel.Offset(0, 1).Value).Caption = strCap
    150               End If
    160               Set rgeCel = rgeCel.Offset(1, 0)
    170           Loop
    180       Else
    190               Me.Caption = "Base de données - Personnes Privées  -  " & sCopyright
    200       End If
     
    UserForm_Initialize_Exit:
    210       On Error GoTo 0
    220       Set wkWord = Nothing
    230       Set rgeCel = Nothing
    240       Exit Sub
     
    UserForm_Initialize_Error:
     
    250       MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure UserForm_Initialize, line " & Erl & "."
    260       Resume UserForm_Initialize_Exit
    End Sub
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Afficher des données dans un UserForm avec condition
    Par CmzxNene dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 17/01/2013, 02h42
  2. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07
  3. [débutant] filtrer un fichier pour afficher des infos
    Par Valichou dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 21/04/2004, 11h44
  4. Réponses: 3
    Dernier message: 11/03/2004, 16h11
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo