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

Contribuez Discussion :

Etiquettes de colonnes mutltilingues pour tableaux structurés


Sujet :

Contribuez

  1. #1
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 924
    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 : 12 924
    Points : 28 914
    Points
    28 914
    Billets dans le blog
    53
    Par défaut Etiquettes de colonnes mutltilingues pour tableaux structurés
    La petite histoire
    En début de ce mois alors que je dispensais une formation VBA à quelques personnes d’une organisation internationale, j’ai été confronté à une question intéressante de l’une des participantes.
    La semaine précédente, je leur avais montré tout l’intérêt de quitter l’usage des listes de données classiques pour se tourner vers les tableaux structurés.
    Cette participante ayant suivi à la lettre mes conseils m’a donc interpellé ce jour-là pour me dire qu’il y avait un souci car les étiquettes de colonnes des tableaux qu’ils utilisaient précédemment s’adaptaient automatiquement à la langue de l’utilisateur grâce à une formule qui affichait les titres suivant le choix de la langue alors qu'avec les tableaux structurés il y avait un problème.
    En effet, il est impossible d’avoir des formules dans la ligne des titres d’un tableau structuré.
    J’ai promis une solution pour le lendemain et le soir qui a suivi cette formation j’ai programmé une petite procédure qui permet de visualiser les titres dans la langue sélectionnée par l’utilisateur et c'est cette procédure que je vous propose.

    Quelle astuce ai-je utilisé ?
    L’astuce consiste à utiliser le format personnalisé d’excel ce qui permet de conserver l’intégrité totale de la valeur présente dans la cellule
    Exemple :
    En A1, tapons lblName et ensuite allons dans le format de cellule personnalisé et tapons ;;; "Nom" après confirmation, nous pouvons visualiser Nom mais dans la cellule, nous avons bien lblName
    L’astuce ayant été trouvée, il suffisait de l’adapter en VBA

    Que faut-il faire pour traduire cela en VBA ?
    • construire une table de Mapping
    • une liste déroulante avec la liste des langues utilisées
    • une procédure qui modifiera la propriété NumberFormat de l’objet Range
    • une procédure événementielle qui invoquera la procédure

    Les outils
    Pour obtenir cela.

    Nom : NumberFormat.png
Affichages : 286
Taille : 24,0 Ko

    La ligne de titre du tableau structuré
    Nom : ListObject_HeaderRange.png
Affichages : 279
Taille : 12,2 Ko

    La table de Mapping
    Cette table nommée T_mapLanguages est présente dans la feuille dont le CodeName est shtParameter.
    Pour ajouter une nouvelle langue, il suffit d'ajouter une colonne en entrant en première ligne le code de la langue et ensuite d'y insérer la traduction correspondante.
    Attention : Pour que cette nouvelle langue soit prise en compte par la liste déroulante il y a lieu d'insérer cette colonne avant la dernière (EN)

    Nom : T_mapLanguages.png
Affichages : 398
Taille : 30,1 Ko

    La procédure TranslationLabel
    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
    Function TranslationLabel(TableToTranslate As ListObject, _
                              LanguageUsed As String, _
                              LookupTable As ListObject) As Boolean
      ' Author  : Philippe Tulliez http://magicoffice.be
     
      ' Arguments
      '   TableToTranslate  Table où se trouve les titres à traduire
      '   LanguageUsed      Langue utilisée
      '   LookupTable       Table de mappage (Clé + mots traduits par colonne de langue)
      '
      ' Déclaration
      Const Mask As String = ";;;""[NewLabel]"""
      Dim Cell As Range
      Dim CelLanguage As Range
      ' Translation
      With LookupTable
        For Each Cell In TableToTranslate.HeaderRowRange 'LookupTable.ListColumns(1)
          Set CelLanguage = .ListColumns(1).Range.Find(What:=Cell.Value, LookAt:=xlWhole)
          If Not CelLanguage Is Nothing Then
             Cell.NumberFormat = Replace(Mask, "[NewLabel]", CelLanguage.Cells(1, .ListColumns(LanguageUsed).Index))
          End If
        Next
      End With
      Set Cell = Nothing: Set CelLanguage = Nothing
    End Function
    La procédure événementielle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
      If Target.Address(external:=True) = Range("pLanguage").Address(external:=True) Then
         mMultilingualManager.TranslationAll
      End If
    End Sub
    La procédure TranslationAll
    Cette procédure est appelée par la procédure événementielle Workbook_SheetChange.
    Elle parcoure toutes les feuilles du classeur (ThisWorkbook) et invoque la fonction TranslationLabel pour chaque tableaux structurés présents dans une feuille de ce classeur à l'exception de ceux qui seraient présents dans la feuille dont la propriété CodeName est shtParameter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub TranslationAll()
      ' Procédure parcourant l'ensemble des ListObject du classeur pour y effectuer la traduction
      Dim oSht As Worksheet
      Dim oLst As ListObject
      For Each oSht In ThisWorkbook.Worksheets
        If oSht.ListObjects.Count And StrComp(oSht.CodeName, "shtParameter") Then
           For Each oLst In oSht.ListObjects
             TranslationLabel oLst, Range("pLanguage"), shtParameter.ListObjects("T_mapLanguages")
           Next
        End If
      Next
    End Sub
    Tutoriels à lire pour en savoir plus


    Le fichier exemple à télécharger
    Fichiers attachés Fichiers attachés

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Yeah!! Bravo Philippe.

    C'est Noël sur DVP! Quatre contributions en quelques jours qui, en plus, tournent autour des tableaux structurés qui sont incontournables pour une utilisation professionnelle d'Excel et une programmation plus souple, plus sécurisée, pérenne et évolutive en VBA...

    Continue!! On en redemande

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut

    Uff, génial ce truc. En plus le nom de la colonne ne change pas... du coup inutile de bricoler dans les macros pour faire la correspondance.

    Merci !!
    J'aime les forums de partage

    (Bon, il va falloir mettre les bouchées doubles!)
    ++
    Qwaz

Discussions similaires

  1. [Tableaux] Structure PHP pour variable complexe
    Par winnie82 dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2006, 13h53
  2. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02
  3. Réponses: 1
    Dernier message: 09/02/2006, 11h03
  4. [Tableaux] structure C/C++
    Par pittacos dans le forum Langage
    Réponses: 4
    Dernier message: 21/12/2005, 17h55
  5. Réponses: 1
    Dernier message: 18/05/2005, 18h18

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