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 :

Création d'une commandbar multilingue


Sujet :

Macros et VBA Excel

  1. #21
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Salut.

    Peut-être te compliques-tu la vie? A quoi sert réellement le fait de récupérer des headers entre deux headers? A quoi sert de récupérer des headers non contigus? A quoi sert de vouloir travailler sur des colonnes complètes? Sauf à s'amuser, ça ne sert pas à grand chose dans l'utilisation de tables de données, d'où la relative complexité de mettre cela en oeuvre. Si ça servait vraiment à quelque chose, il y a fort à parier qu'Excel aurait simplifié la manip.

    D'une façon générale, les tables de données, utilisées à bon escient ( => pour stocker des "fiches" de données), simplifient énormément la vie, tant en Excel qu'en VBA, et la manipulation des références structurées est simple et là aussi, le VBA y gagne en lisibilité et en simplicité. Il faut bien sûr pour cela que les tableaux soient bien construits
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  2. #22
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    bon j'ai testé et ca n'est pas cela que je cherche Philippe[...]
    Il n'y a pas de référence structurée pour des colonnes non contiguës, comme il n'y a pas de syntaxe pour des colonnes non contiguës dans Excel...

    La question est donc: Que cherches-tu à réaliser?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #23
    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 729
    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 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour Patrick,
    Je suis d'accord avec Pierre, tu n'avais pas précisé au départ que les colonnes n'étaient pas contiguës et effectivement je n'y vois pas d'intérê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

  4. #24
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Si tu as "un truc de fou" à formuler, c'est probablement que ton tableau n'est pas construit correctement (critique technique, pas d'attaque personnelle dans mon propos)...

    A nouveau, montre ton tableau et explique ce que tu souhaites réaliser...

    Normalement, avec une table de données, on a besoin d'une cellule particulière (RECHERCHEV, INDEX-EQUIV, ...), une colonne particulière et, en Excel en tout cas, beaucoup plus rarement d'une ligne entière de la table. Ca n'a pas d'intérêt de devoir travailler sur un bloc de lignes ou de colonnes. La table de données n'est pas faite pour cela.

    En VBA, on peut travailler sur une ligne entière en la considérant comme un "recordset" de la table de données. Mais là aussi, les outils existants, éventuellement améliorés par une couche d'abstraction, sont suffisants. Mon prochain tuto illustrera la mise en place de cette couche d'abstraction.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #25
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re

    je veux pouvoir les récupérer header inclus ou pas pour les transférer

    bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test158()
    'déterminer un plage non contigüe dans le tableau header ou pas avec la fonction
        Set maplage = NoContigRange("Tableau2", Array("fr", "it", "de"), False)    'true ou false pour le headers inclus)
        MsgBox maplage.Address
    End Sub
    '
    Function NoContigRange(Tname, arr, Optional head As Boolean = False)
       'construction de l'adresse  non contigüe
         For I = LBound(arr) To UBound(arr)
            If head Then arr(I) = "[#ALL],[" & arr(I) & "]]" Else arr(I) = "[" & arr(I) & "]]"
            arr(I) = Tname & "[" & arr(I)
        Next
        Set NoContigRange = Range(Join(arr, ","))
    End Function
    j'aurais pu les unir directement avec union au lieu de travailler en string jusqu'au bout
    oui je sais que ca vous plait pas
    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

  6. #26
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    @pierre
    finalement les formules c'etaient pas top

    j'ai donc changé mon fusil d'épaule
    j'ai utiliser l'évènement change mais pour toute la partie langue
    autrement que ce soit un Français ,un anglais, italien allemand qui tape dans sa colonne la traduction se fera sur les autre

    je pourrait ajouter autant de colonnes langue que je veux a partir du moment ou elle se trouve avant "DE" et je n'aurais pas besoins de changer le code

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim col As Long, ligne As Variant, l1 As String, i As Long
        col = Target.Column
        ligne = WorksheetFunction.Index(Range("Tableau2[[#Headers],[FR]:[DE]]").Value, 1, 0)    'on recupere les valeur du header de "FR" a "DE"
        Set Cel = Cells(Target.Row, "C").Resize(1, UBound(ligne))    'on determine la cells  1 pour la premiere langue on la dimention au nombre de colonne
        If Target.Count = 1 And Target.Row > 3 Then    'condition apres header et count 1
            If Target.Value <> "" Then    'si valeur différente de vide
                l1 = Cells(3, Target.Column).Text    'on recupere la langue de depart  de la colonne du target  dans le header
                'boucle sur tout les item de ligne et construction de l'url et apel de translate et insertion du resultat
                For i = LBound(ligne) To UBound(ligne)
                    ligne(i) = Translate(urlI:="https://translate.google.pl/m?hl=" & l1 & "&sl=" & l1 & "&tl=" & ligne(i) & "&ie=UTF-8&prev=_m&q=" & Target.Text)
                Next
                Cel.Value = ligne    'insertion de l'array ligne  a partir de "c" sur la ligne du target
                Debug.Print Join(ligne, vbCrLf)    ' juste une verif
            Else
                Cel.Value = ""
            End If
        End If
    End Sub
    Nom : demo2.gif
Affichages : 203
Taille : 512,8 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

  7. #27
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour Patrick,
    J'ai simplement sélectionné la cellule F1 et j'ai écrit "=" et ensuite j'ai sélectionné les cellules en question et puis pour avoir la traduction, je vais dans la fenêtre d'exécution et j'écris simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Range("F1").Formula
    Ensuite Copier/Coller et je l'insère dans mon code VBA
    bien pratique ca
    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

  8. #28
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    désolé Philippe mais chez moi je n'ai pas ce résultat en ce qui concerne ton astuce
    Nom : demo2.gif
Affichages : 215
Taille : 589,3 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

  9. #29
    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 729
    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 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour Patrick,
    Je crois que tu devrais aller faire un tour 10 minutes
    Regarde ce que contient la cellule E10. Il n'y a évidemment pas de miracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Range("E10").Formula
    ne peut que te renvoyer la formule qui se trouve en E10
    Comme te l'a écrit Pierre, Excel ne renvoie pas de formule structurée sur des colonnes ou cellules non contiguës
    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

  10. #30
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    oui je l'ai remarqué

    je garde quand même cette astuce pour le codage c'est bien pratique pour les contigües

    pour les non contiguë ma fonction fonctionne très bien
    merci a tous es deux
    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

  11. #31
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    A nouveau, je ne comprends pas bien le besoin de copier certaines colonnes entières du tableau structuré. Ca ne donnera pas un tableau structuré à l'arrivée, et ça relève d'un problème de conception.

    Si je dois extraire certaines colonnes d'un tableau structuré, c'est pour les remettre dans les colonnes d'un autre tableau lui aussi structuré. Donc normalement, tes deux tableaux préexistent, et c'est juste un copier/coller des données de certaines colonnes du tableau source vers les colonnes du tableau cible. Ca ne nécessite pas de connaître les headers, de choisir des colonnes non contiguës et autres manipulations bizarres, si l'on s'en tient à la finalité d'une table de données.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #32
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    [...]
    finalement les formules c'etaient pas top[...]
    Si tu le dis (On ne sait pas en quoi ce n'était pas top, mais bon...)

    Ou "l'art" de réinventer la roue, mais c'est ton choix

    Cela t'oblige à insérer tes nouvelles langues entre FR et DE et t'amène à des modifs structurelles (dans Excel et à mon avis aussi dans ton code à brève échéance) mais c'est toi qui fait la manip.

    Perso (critique technique et pas du tout personnelle), cette technique n'est pas professionnelle. Je ne comprends toujours pas l'intérêt d'aller lire sur Google/Translate à chaque création de la barre, car je doute fort que Ouvrir se dise un jour autrement que Open en anglais ou Aprire en italien, réduisant à zéro l'intérêt d'aller le rechercher à chaque fois). La construction de ton tableau amène une obligation de modification de ta structure (ajout d'une colonne) et amène également à devoir faire attention à l'insérer entre la première et la dernière colonne. Ton code impose que la première colonne linguistique soit le français et la dernière l'allemand. De plus, ton code utilise un évènement Change inutile. C'est juste du code pour rien du tout. A quoi ça sert? A rien...

    A part t'amuser (ce qui est très bien en soi), à quoi sert ce fatras dans un classeur professionnel conçu selon les règles? Tu n'as pas encore répondu, mais perso, l'intérêt d'une telle construction est nul. J'ai illustré une solution rapide à mettre en place, pérenne quant à la structure, mais aussi générique car sa structure peut être portée sur n'importe quel xlam (ou autre, mais c'est souvent dans un xlam que l'on créera cela) qui a besoin de la construction d'une commandbar (linguistique ou non).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #33
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    @pierre
    les texte de caption ne s'arrêteront pas a "ouvrir" ou autre mot relativement connus dans beaucoup de langues

    ensuite non justement mon code évènementiel sheets_change ne changera pas d'un yota même si j'ajoute des colonne langues entre FR et DE

    ceci remplace les formules
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim col As Long, ligne As Variant, l1 As String, i As Long
        col = Target.Column
        ligne = WorksheetFunction.Index(Range("Tableau2[[#Headers],[FR]:[DE]]").Value, 1, 0)    'on récupère les valeur du header de "FR" a "DE"
        Set Cel = Cells(Target.Row, "C").Resize(1, UBound(ligne))    'on détermine la cells  1 pour la première langue on la dimension au nombre de colonne
        If Target.Count = 1 And Target.Row > 3 Then    'condition après header et count 1
            If Target.Value <> "" Then    'si valeur différente de vide
                l1 = Cells(3, Target.Column).Text    'on récupère la langue de départ  de la colonne du target  dans le header
                'boucle sur tout les item de ligne et construction de l'url et apel de translate et insertion du résultat
                For i = LBound(ligne) To UBound(ligne)
                    ligne(i) = Translate(urlI:="https://translate.google.pl/m?hl=" & l1 & "&sl=" & l1 & "&tl=" & ligne(i) & "&ie=UTF-8&prev=_m&q=" & Target.Text)
                Next
                Cel.Value = ligne    'insertion de l'array ligne  a partir de "c" sur la ligne du target
                'Debug.Print Join(ligne, vbCrLf)    ' juste une verif
            Else
                Cel.Value = ""
            End If
        End If
    End Sub
    peut être devrais-je lui mettre une condition intersect pour que la traduc soit déclenchée uniquement dans ces colonnes
    en tout cas le principe est facile a saisir
    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

  14. #34
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    @pierre
    les texte de caption ne s'arrêteront pas a "ouvrir" ou autre mot relativement connus dans beaucoup de langues[...]
    Le problème n'est pas là. Que tu traduises avec Google/Translate est une chose. Je ne discute pas de ça (je doute toutefois que ça donnera un résultat fiable et linguistiquement correct dans tous les cas ). Je dis que cela n'a pas de sens de faire la traduction à chaque génération de la commandbar (probablement à chaque ouverture du fichier, si tu initialises ta barre à ce moment-là). Fais ta traduction hors vba avec ce que tu veux et qui tu veux, puis stocke les traductions dans ton fichier une fois pour toutes.


    Citation Envoyé par patricktoulon Voir le message
    [...]
    peut être devrais-je lui mettre une condition intersect[...]
    Peut-être devrais-tu suivre les conseils qui te sont donnés

    D'autant que programmer un commandbar sur les versions actuelles d'Excel, ça ne sert pas à grand-chose à part pour un menu contextuel. Il serait bien plus intéressant de créer un ruban multilingue. Mais que ce soit pour un ruban ou une commandbar, ajouter une colonne pour chaque ajout de langue n'a pas de sens alors que des architectures stables sont proposées et ont fait leurs preuves Je n'ai jamais compris pourquoi des gens qui demandent des conseils sur les forums ne les suivent pas par la suite lorsqu'ils sont argumentés et préfèrent utiliser leurs "techniques". L'architecture pour créer du multilingue est la même dans tous les langages et quelle que soit la techno, et il n'y a pas 36 design patterns valables. il peut y en avoir quelques-uns, mais ce que tu mets en place n'en fait pas partie.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  15. #35
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    @pierre
    depuis le début je parle de CommandbarPopup(menu contextuel) uniquement et non des commandbars pour le ruban
    si on parle pas de la même chose c'est sur que l'on se comprends pas

    pour les commandbars c'est un autre projet en XML en cours que je substituerais ai customUI EDITOR qui n'a pas d'interface graphique
    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. #36
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Ca ne change rien au fond du problème. Que le commandbar soit un popup ou non n'altère pas la façon dont la structure doit être créée:
    • Ca n'a pas de sens de requérir Google Translate à chaque création;
    • Ca n'a pas de sens d'insérer des colonnes alors qu'une bonne architecture permet de mettre en place un système qui ne demande pas d'insertion de colonnes;
    • Un xml ne palliera pas une mauvaise conception de fichier;
    • Un xml contenant des noeuds avec uniquement des attributs est un non-sens, même s'il est reconnu bien formé, les attributs ne servant pas à stocker des valeurs mais à différencier les noeuds. Donc là aussi, il y a un problème d'architecture;
    • Un xml n'est pas nécessaire avec Excel puisque tu peux stocker les données dans une table Excel ( a priori du xlam applicatif) pour gagner en portabilité;
    • Dans le cadre de la création d'un commanbar, ça n'a aucun sens de gérer l'évènement Change d'une feuille;
    • ...



    Ces considérations sont évoquées dans le cadre d'un développement qualifié de professionnel. Libre à chacun de s'amuser à inventer des solutions ésotériques pour faire joujou avec google/Translate et inventer de nouvelles façons de faire, mais sur un plan professionnel, les modèles de conception d'une appli multilingue ont fait leurs preuves, ont été argumentés et documentés quant à leur pertinence. Vouloir réinventer la roue peut éventuellement être louable, mais il serait alors intéressant d'argumenter sur le pourquoi du comment et de dire en quoi le modèle que tu proposes est meilleur que ceux communément admis et mis en place. Sans cela, on reste dans le bricolage sans finalité professionnelle.

    A nouveau, pour que l'on me comprenne bien, je ne démolis pas la personne ici en critiquant les techniques mises en place, je défends une façon professionnelle d'aborder le problème de l'application multilingue et le caractère professionnel des solutions proposées en remplacement de la tienne qui, quoique tu puisses en penser, reste du domaine du bricolage.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #37
    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 729
    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 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ca n'a pas de sens de requérir Google Translate à chaque création;
    Je trouve aussi.
    Imaginons que l'on n'ait pas d'accès internet au moment où l'on a besoin de l'application. Super
    Ce n'est effectivement pas professionnel
    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

  18. #38
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    OK
    pour que les choses soient claires entre nous

    le projet:
    creéer un tableau

    les entêtes parlent d'elle même :
    parent|type|fr|en|it|de|id ou faceID|OnAction|beginGroup|enabled
    alors les langues au départ n'étaient pas prévues mais bon ca mange pas de pain
    pour la traduction translate ou autre on s'en fou (pour le moment c'est translate)
    alors pour le moment il y a 4 langues et je pense que le tableau doit être modifiable car demain je veux ajouter une langue le russe par exemple il faut bien l'ajouter quelque part
    dans le principe que j'ai mis en place en corrélation avec le code de l'évènement change fait que je peux ajouter autant de langue avant "de" sans changer un seul caractere du code de traduction


    pour la création du popup la lecture se fera par ligne et la caption en fonction de la langue choisie comme je le fait déjà avec mes array codé en dur qui de déplaisent tant

    si pour l'organisation du tableau tu pense que c'est pas bon, il faut être plus précis, je suis dur de la comprenette

    il faut bien comprendre que ce sont des menu perso qui seront créés et donc des captions qui seront tout sauf des mots classiques ou génériques, même si il y en aura quelques uns

    parti de la tu comprends bien qu' il me faut un traducteur quasi instantané qui me donne les captions dans toutes les colonnes langue

    on en ai donc pour le moment a l'organisation ou structure du tableau qui selon toi n'est pas bon

    après encore une fois d'après l'évènement que j'ai codé, je peux avoir un tableau avec seulement FR et EN et avoir un bouton pour ajouter une langue temporairement si tu veux
    la encore mon code événement et translate ne changera pas a part "de"/"en" pour la fin
    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

  19. #39
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    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 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Je reviendrai sur l'utilité de créer un tableau en VBA en fin de post. Je reviendrai aussi sur l'inutilité totale de vouloir créer une nouvelle langue "à chaud" avec Google Translate.


    Tu me parles de tes entêtes FR|IT|... Mais elles ne servent à rien puisque ce n'est pas là que tu dois mettre tes textes. Tu me parles de devoir ajouter une colonne pour ajouter une langue alors que j'ai illustré comment l'ajout d'une langue doit se passer... Le fait que ce soit des menus perso ne change rien au fait qu'ils ne doivent pas être traduits à la volée, et la "complexité" du texte n'a rien à voir avec cela.

    Je joins un fichier qui illustre comment on met cela en place.

    Ce fichier contient trois tableaux (Langues, Textes, Boutons du menu contextuel). Au départ, il contient 2 langues et les traductions pour ces deux langues. Dans le tableau des textes, on voit qu'il y a les textes pour les boutons, mais aussi pour les contrôles du userform ainsi que pour le caption du userform lui-même. Est présent aussi le texte du message qui sera affiché après le déchargement du userform. Ceci illustre le fait que l'on a un seul tableau pour les traductions, et que sa structure n'est pas modifiée par l'ajout des textes d'une nouvelle langue. Il suffira d'ajouter les textes à la suite du tableau, avec les bons ID et le code de langue choisi. Il faudra aussi, bien sûr, ajouter le code de la langue dans le tableau des langues*.

    Nom : 2019-05-24_135232.png
Affichages : 192
Taille : 22,7 Ko

    Le code est en deux parties, un module standard et le module du userform. On voit bien qu'à aucun moment dans le code il n'est question de modifier un tableau. La structure est en place une fois pour toutes.

    Module standard appelé Languages
    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
    Option Explicit
     
    Sub ShowUsf()
      Dim Language As String
     
      With usfMultilanguages
        .cboLanguage.List = Range("t_languages[Language]").Value
        .Show
        Language = .cboLanguage.Value
      End With
      Unload usfMultilanguages
      MsgBox getText("AlertMsg", Language)
    End Sub
     
    Sub CreateCommandbar(Language As String)
      Dim cb As CommandBar
      Dim Ctrl As CommandBarControl
      Dim Cell As Range
      Dim Caption As String
     
      CommandBars("Test").Delete
      Set cb = CommandBars.Add("Test", msoBarPopup)
      For Each Cell In Range("t_Controls[id]")
        Set Ctrl = cb.Controls.Add(msoControlButton)
        With Ctrl
          .Caption = getText(Cell.Value, Language)
          .OnAction = Cell(1, 3).Value
        End With
      Next
    End Sub
     
     
    Function getText(ByVal ID As String, Language As String) As String
      Dim Formula As String
     
      Formula = "index(t_texts[Text],match(1,(t_texts[id]=""{id}"")*(t_texts[language]=""{language}""),0))"
      Formula = Replace(Formula, "{id}", ID, , , vbTextCompare)
      Formula = Replace(Formula, "{language}", Language, , , vbTextCompare)
      getText = Evaluate(Formula)
    End Function

    Module du userform
    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
    Option Explicit
     
    Private Sub btnValidate_Click()
      Me.Hide
    End Sub
     
    Private Sub cboLanguage_Change()
      AdaptUsf
    End Sub
     
    Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
      If Button = 2 Then Application.CommandBars("Test").ShowPopup
    End Sub
     
    Sub AdaptUsf()
      Dim Captions
      Dim Counter As Long
     
      Languages.CreateCommandbar cboLanguage.Value
      Captions = VBA.Array("lblLanguage", "btnValidate", "usfMultiLanguages")
      For Counter = 0 To UBound(Captions)
        If Captions(Counter) Like "usf*" Then
          usfMultilanguages.Caption = Languages.getText(Captions(Counter), cboLanguage.Value)
        Else
          Me.Controls(Captions(Counter)).Caption = Languages.getText(Captions(Counter), cboLanguage.Value)
        End If
      Next
    End Sub
    Je précise ici que l'on pourrait boucler sur les contrôles du userform plutôt que de créer l'array. Dans une vraie appli, j'aurais procédé ainsi, avec un test sur le retour de Validate en cas de texte non trouvé pour un contrôle. Cette procédure devrait normalement être déplacée dans une procédure générique de la couche de présentation. J'en profite pour dire aussi qu'il faut normalement tester que l'on a choisi une langue, etc etc. J'illustre juste ici la mécanique à mettre en place pour du multilingue.

    Au départ, le useform est affiché par défaut en langue française. En choisissant une langue dans le combobox, on peut faire varier la langue affichée ainsi que le menu contextuel (clic droit dans le userform). Dans le fichier joint, il suffit de lancer la procédure Languages.ShowUsf et de tester le userform avec les deux langues présentes. Dès la langue choisie, le userform est adapté pour afficher les textes dans cette langue. Après le choix d'une langue, un clic droit dans le userform affichera le menu contextuel dans la langue choisie. Après avoir cliqué sur le bouton, le userform est détruit et le message de bonne fin apparaît dans la langue choisie.

    Langue: français
    Nom : 2019-05-24_133643.png
Affichages : 164
Taille : 4,2 Ko

    Langue: anglais, les textes et le menu contextuel ont été modifiés
    Nom : 2019-05-24_133653.png
Affichages : 167
Taille : 4,3 Ko



    Après, pour tester une autre langue (j'ai choisi l'italien), il faut réaliser les manips suivantes:
    • Ajouter IT dans le tableau des langues;
    • Ajouter les textes en italien (pour faciliter le travail ici, il suffit de couper le bloc des textes qui se trouve un peu à droite des tableaux et venir le coller juste en dessous du dernier texte ligne A18).


    Nom : 2019-05-24_135949.png
Affichages : 183
Taille : 31,6 Ko

    On peut relancer Languages.ShowUsf pour voir que la troisième langue est ajoutée et opérationnelle. On voit bien que la "complexité" des textes ne pose aucun problème et qu'il ne s'agit pas ici de traduire uniquement des "ouvrir" et "fermer", mais que l'on peut étendre la mécanique à tout texte devant être affiché à l'utilisateur (à part les entêtes des colonnes de tableau, sous peine de devoir alourdir le code VBA qui manipulerait des références structurées, mais je pense qu'il faut raison garder).


    * J'ai préféré ajouter un tableau pour les langues de manière à faciliter l'alimentation du combobox du userform. Je sais que l'on peut travailler avec un dictionary ou autre brol, mais dans une appli multilingue, on a besoin de la liste des langues disponibles à plusieurs endroits du code, donc autant créer la langue dans le tableau. Attention aussi que l'appli n'est pas sécurisée, ce n'est pas le but de la démo (il faut obligatoirement choisir une langue dans le combo, par exemple. Mettre une alerte n'est pas coûteux mais je ne l'ai pas mis en place ici, ce n'est pas le sujet du débat).


    Pour ce qui est de créer un tableau en VBA ou d'en modifier la structure, ce n'est normalement utile qu'en cas de maintenance de l'application , par exemple parce que les fichiers manipulés par le XLAM doivent être modifiés (par macro lors du déploiement de la mise à jour sur plusieurs postes utilisant l'appli). On pourrait aussi en avoir besoin pour créer une table temporaire volatile pour manipuler des données. Je suis toutefois très dubitatif sur le fait que l'on ne puisse pas prévoir le coup, et donc la structure des tables temporaires et les intégrer dans des feuilles du xlam, voire du fichier qui y est lié. Quoi qu'il en soit, il ne sera que rarement utile de devoir sélectionner des colonnes non contiguës. A nouveau, je ne vois pas de cas réel où ce genre de manip a une utilité. Quant à joindre les valeurs de plusieurs colonnes non contiguës avec Join, j'attends de voir l'utilité de la chose dans un environnement réel et professionnel alors qu'Excel possède tous les outils pour réaliser cela facilement. Et encore une fois, cela se réalise en général dans un environnement prévisible.


    Pour ce qui est de vouloir ajouter du russe ou n'importe quelle autre langue "à chaud" avec Google Translate, ça n'a aucune pertinence. Si l'on souhaite mettre l'appli à disposition dans une nouvelle langue, on procède comme je l'ai expliqué plus haut pour l'italien: on ajoute en dur le code de la langue dans le tableau des langues, et on ajoute les textes dans le tableau des textes en reprenant les ID par copier-coller et en spécifiant le nouveau code de langue. Puis on teste pour vérifier que l'on n'a pas fait d'erreur. Après cela, on déploie le nouveau xlam. Compter sur Google Translate pour réaliser cela "à chaud" et sans vérifications, désolé, mais cela relève pour moi de l'amateurisme.
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #40
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    re
    je viens de télécharger ton fichier
    j'ai testé
    au passage a la première création même pour les autre d'ailleurs

    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
    Sub CreateCommandbar(Language As String)
      Dim cb As CommandBar
      Dim Ctrl As CommandBarControl
      Dim Cell As Range
      Dim Caption As String
      
      On Error Resume Next
      CommandBars("Test").Delete
      On Error GoTo 0
      Set cb = CommandBars.Add("Test", msoBarPopup)
      For Each Cell In Range("t_Controls[id]")
        Set Ctrl = cb.Controls.Add(msoControlButton)
        With Ctrl
          .Caption = getText(Cell.Value, Language)
          .OnAction = Cell(1, 3).Value
        End With
      Next
    End Sub
    ensuite

    on a ici deux langues et en plus tu n'a pas prévu de hiérarchie a plusieurs étages barre,bouton,submenu,bouton,bouton2, etc.......

    et cela avec ton system de 2 tableaux, ca va être une torture a mettre en place ,je crois que c'est cela que tu n'a pas compris aussi dans mon tableau
    je continu d'étudier ton fichier je reviens plus tard
    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

Discussions similaires

  1. Ajouter une ligne dans un tableau
    Par kenru dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 28/10/2009, 17h10
  2. [DOM] ajouter une ligne a un tableau
    Par realkilla dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/02/2009, 17h51
  3. Réponses: 1
    Dernier message: 12/12/2008, 18h06
  4. Réponses: 9
    Dernier message: 15/06/2008, 12h13
  5. [vb6] Ajouter une ligne dans un tableau excel
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 13/06/2006, 17h41

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