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 :

Ouvrir un fichier pdf depuis Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 889
    Par défaut Ouvrir un fichier pdf depuis Excel
    Bonjour,

    J'ouvre un fichier pdf depuis Excel avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim stAppName As String
     
     'stAppName = "C:\Program Files\Adobe\Acrobat 6.0\Reader\AcroRD32.exe C:\le_nom_de_ton_document.pdf"
     
     Call Shell(stAppName, 1)
    Le chemin ou la version de Acrobat Reader peut être différent suivant les postes.

    Est-il possible d'aller chercher son chemin quelque part dans le registre?

    Merci

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    effectivement cet exemple est assez statique.

    Ci joint du code pour utiliser ShellExecuteEx pour lancer l'application liée à ton fichier. ShellexecuteEx te permet de récupérer le Hwnd de l'application lancé et aussi alors de l'arrêter.

    Dans ton cas ce n'est pas nécessaire. Tu pourrais simplement de contenter de simplifier et d'utiliser ShellExecute en lieu et place.

    Dans module
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
     
    Option Explicit
     
    'Flags ShellExecuteEx
    Private Const SEE_MASK_NOCLOSEPROCESS = &H40
    Private Const SEE_MASK_FLAG_NO_UI = &H400
     
    'Constantes ERREUR ShellExecuteEx
    Private Const SE_ERR_FNF As Byte = 2
    Private Const SE_ERR_PNF As Byte = 3
    Private Const SE_ERR_ACCESSDENIED As Byte = 5
    Private Const SE_ERR_OOM As Byte = 8
    Private Const SE_ERR_SHARE As Byte = 26
    Private Const SE_ERR_ASSOCINCOMPLETE As Byte = 27
    Private Const SE_ERR_DDETIMEOUT As Byte = 28
    Private Const SE_ERR_DDEFAIL As Byte = 29
    Private Const SE_ERR_DDEBUSY As Byte = 30
    Private Const SE_ERR_NOASSOC As Byte = 31
    Private Const SE_ERR_DLLNOTFOUND As Byte = 32
     
    'Constantes AFFICHAGE ShellExecuteEx
    Private Const SW_SHOWNORMAL = 1
    Private Const SW_SHOW = 5
    Private Const SW_SHOWDEFAULT = 10
     
    Private Type SHELLEXECUTEINFO
        cbSize As Long
        fMask As Long
        hWnd As Long
        lpVerb As String
        lpFile As String
        lpParameters As String
        lpDirectory As String
        nShow As Long
        hInstApp As Long
        lpIDList As Long
        lpClass As String
        hkeyClass As Long
        dwHotKey As Long
        hIcon As Long
        hProcess As Long
    End Type
     
    'OpenProgram
    Private Declare Function ShellExecuteEx Lib "shell32.dll" _
    (SEI As SHELLEXECUTEINFO) As Long
     
     
    'CloseProgram
    Private Declare Function CloseHandle Lib "kernel32" _
    (ByVal hObject As Long) As Long
     
    Private Declare Function TerminateProcess Lib "kernel32" _
    (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
     
    Private Declare Sub Sleep Lib "kernel32" _
    (ByVal dwMilliseconds As Long)
     
    Public Const WM_CLOSE = &H10
    Const GW_HWNDNEXT = 2
    Dim mWnd                    As Long
    Dim PhWnd                   As Long
    Dim P_Attachement_file      As String
    Private AppCible            As String
     
     
    ' ***********************************************************
    ' *
    ' * Lance le programme par défaut associé à un fichier (en fonction de son
    ' * extension ) et retourne le hWnd de la fênetre du programme lançé.
    ' *
    ' ***********************************************************
     
    Public Function OpenProgram(ByRef Filename As String, ByRef OwnerhWnd As Long) As Long
        Dim SEI As SHELLEXECUTEINFO
     
        On Error GoTo ErrorHandler
     
        'Vérifie si le fichier à lancer est un exécutable (.exe)
        If GetExtension(Filename) = "exe" Then
            If vbNo = MsgBox("ATTENTION, êtes-vous sûr de vouloir lancer ce programme exécutable ?", vbExclamation + vbYesNo) _
            Then
                OpenProgram = 0
                Exit Function
            End If
        End If
     
        With SEI
            .cbSize = Len(SEI)
            .fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_FLAG_NO_UI
            .hWnd = OwnerhWnd
            .lpVerb = "open"
            .lpFile = Filename
            .lpParameters = vbNullChar
            .lpDirectory = vbNullChar
            .nShow = SW_SHOW
            .hInstApp = OwnerhWnd
        End With
     
        OpenProgram = ShellExecuteEx(SEI)
     
        If SEI.hInstApp <= 32 Then
        'Erreurs
            OpenProgram = 0
     
            Select Case SEI.hInstApp
                Case SE_ERR_FNF
                    OpenProgram = SEI.hProcess
                Case SE_ERR_PNF
                    MsgBox "Le chemin du fichier à ouvrir est incorrect.", vbExclamation
                Case SE_ERR_ACCESSDENIED
                    MsgBox "Accès au fichier refusé.", vbExclamation
                Case SE_ERR_OOM
                    MsgBox "Mémoire insuffisante.", vbExclamation
                Case SE_ERR_DLLNOTFOUND
                    MsgBox "Dynamic-link library non trouvé.", vbExclamation
                Case SE_ERR_SHARE
                    MsgBox "Le fichier est déjà ouvert.", vbExclamation
                Case SE_ERR_ASSOCINCOMPLETE
                    MsgBox "Information d'association du fichier incomplète.", vbExclamation
                Case SE_ERR_DDETIMEOUT
                    MsgBox "Opération DDE dépassée.", vbExclamation
                Case SE_ERR_DDEFAIL
                    MsgBox "Opération DDE echouée.", vbExclamation
                Case SE_ERR_DDEBUSY
                    MsgBox "Opération DDE occupée.", vbExclamation
                Case SE_ERR_NOASSOC
                    'Ouvrir avec...
                    Call Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " + Filename, vbNormalFocus)
            End Select
        Else
            'Retourne le hWnd du programme lançé par ShellExecuteEx
            OpenProgram = SEI.hProcess
        End If
     
        Exit Function
    ErrorHandler:
        OpenProgram = 0
    End Function
     
    ' ***********************************************************
    ' *
    ' * Ferme un programme à partir du hWnd de sa fenêtre.
    ' *
    ' ***********************************************************
     
    Public Function CloseProgram(hWnd As Long) As Boolean
        Dim lExitCode As Long
     
        If hWnd = 0 Then
            Exit Function
        End If
     
        On Error Resume Next
        CloseProgram = CBool(TerminateProcess(hWnd, lExitCode))
        'On Error Resume Next
        CloseHandle hWnd
        DoEvents
        Sleep (100)
     
    End Function
     
    Public Function GetExtension(Filename As String) As String
    Dim tablo() As String
    tablo = Split(Filename, ".")
    GetExtension = tablo(UBound(tablo))
    End Function
    Appel pour ouvrir (fileFullname = string du nom complet du fichier (avec path):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                        'Show file With Default Viewer
                        PhWnd = OpenProgram(FileFullName, 0)
    Appel pour tuer la tache de visu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                             Call CloseProgram(PhWnd)
    J'espère que cela réponds à ta question.

    A+

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 889
    Par défaut
    ok merci

    il n'y a pas la possibilité de lancer une application sans préciser son chemin?

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Re,
    tu n'as pas compris.

    L'application et son chemin tu ne t'en occupes nullement, d'où l'intérêt du systeme.

    le FullFilename est celui du fichier a visualiser, dans ton cas le .PDF.

    Comprendi ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 889
    Par défaut
    ok merci


    et pour :
    Appel pour tuer la tache de visu
    il ne suffit pas de refermer le pdf?

    Merci

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si tu fermes Acrobat manuellement tu ne dois pas le fermer par soft sous peine d'erreur.
    Par contre, si tu crée une instance du fichier, tu dois la supprimer ensuite (set Gnagnanomdufichier = Nothing)
    Je n'ai pas regardé le code, peut-être n'y a-t-il pas d'instance créée...)

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 889
    Par défaut
    merci, qu'est-ce que "créer une instance du fichier"?

  8. #8
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation de Ousk'
    Si tu fermes Acrobat manuellement tu ne dois pas le fermer par soft sous peine d'erreur.
    Non. Le code gère cela sans problème.

    Daejung, Tu peux en fait garder ShelexecuteEx et ignore la fonction de close si tu femes manuellement. It's up to you.

    Salut Ousk. Ce code marche du feu de dieu. Principe d'après Ucfoutu, code beta trouvé sur le web. Customization bibi.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Citation de Ousk'
    Si tu fermes Acrobat manuellement tu ne dois pas le fermer par soft sous peine d'erreur.
    Non. Le code gère cela sans problème.
    Non ? Eh bien si ! Car... si le code gère "cela" c'est que, pour "gérer cela", il inclut une "gestion d'erreur"... Mais s'il inclut une gestion d'erreur, c'est pour gérer les erreurs... Et parmi les erreurs possibles tu as celle consistant à tenter de fermer par le code un pdf préalablement fermé manuellement... Tentative qui génère donc une erreur... Donc, je dis "Si ! Même si le code gère ça sans problème.
    C'est vrai, quoi, dans l'absolu !
    D'ailleurs, à ce propos, pour interrompre une procédure en cas d'erreur tu peux utiliser la voie directe et remplacer les 30 lignes de code gérant "tout cela" par un seul "On error goto fin" conduisant à un message d'erreur unique et sortant de la procédure.
    ... A moins que tu aies affaire à un utilisateur particulièrement averti

    Simplifiée, la procédure se limiterait à ça : http://www.developpez.net/forums/d69...ersion-epuree/

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 889
    Par défaut
    Je peux ne pas utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call CloseProgram(PhWnd)
    fermer manuellement ou pas alors

  11. #11
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation de Ousk.
    Non ? Eh bien si !
    Pointillieux va. Allez hop, j'abdique, juste pour te faire plaisir.

    Citation de Daejung
    Je peux ne pas utiliser
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call CloseProgram(PhWnd)
    Sorry , je me suis planté. Pas de call, juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CloseProgram(PhWnd)
    vu que c'est une fonction.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 889
    Par défaut
    ok mais je peux fermer manuellement ou pas?

    sans passer par

    une fois le fichier ouvert c'est plus naturel pour les utlisateurs de le refermer d'un clic

  13. #13
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Yes, 1000000000 fois yes.

    Si tu trouves quelquechose qui t'en empêche, oubie le.

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Godzestla
    Sorry , je me suis planté. Pas de call, juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CloseProgram(PhWnd)
    vu que c'est une fonction.
    Eh ben non, si tu fais ça tu auras une erreur :
    Si tu appelles une subroutine c'est
    et si c'est une fonction c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result = CloseProgram(PhWnd)
    Zut ! Faut toujours passer derrière toi

  15. #15
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour à tous.

    Il me semble que pour une procédure c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Call MaProc(Args)
    'ou
    MaProc Args
    Et pour une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Result = MaFct(Args)
    'ou en perdant la valeur retournée
    Call MaFct(Args)
    Du coup je ne vois pas où était l'erreur dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call CloseProgram(PhWnd)
    Sauf si on a ensuite besoin du résultat.

    PGZ

  16. #16
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    houlala,

    Dans la faq Access, il y a une solution qui fonctionne bien

    http://access.developpez.com/faq/?pa...n#shellexecute

    Et moins longue.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  17. #17
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation Ousk
    Eh ben non, si tu fais ça tu auras une erreur :
    Ben oui, t'as raison grand inquisiteur.
    M'apprendra à ne même pas savoir lire MON code.

    C'est bien une fonction, comme le dit sa définition dans mon code, et le résultat est un Boolean.

    Zut ! Faut toujours passer derrière toi
    Avoue que cela te plait, non ?
    (Et je me marre car tu vas encore devoir passer la balayette )


    Mais en finalité, on s'en f... car il ne veut pas utiliser la fonction puisque l'utilisateur fermera lui-mêm la fenêtre.

  18. #18
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    houlala,

    Dans la faq Access, il y a une solution qui fonctionne bien

    http://access.developpez.com/faq/?pa...n#shellexecute

    Et moins longue.

    De fait. Dommage qu'on ne m'en ait pas parlé quand je cherchait une solution pour afficher et fermer l'appli associé.

    Bonne soirée. Je jette l'éponge et vais ... déprimer.

  19. #19
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    De fait. Dommage qu'on ne m'en ait pas parlé quand je cherchait une solution pour afficher et fermer l'appli associé.

    Bonne soirée. Je jette l'éponge et vais ... déprimer.
    Fallait demander.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  20. #20
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    J'avais demandé......

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

Discussions similaires

  1. Ouvrir un fichier pdf depuis une macro
    Par Maluje dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/03/2008, 17h51
  2. Ouvrir un Pdf depuis Excel
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/10/2007, 16h34
  3. ouvrir fichier PDF dans excel et userform
    Par lindette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/08/2007, 22h56
  4. Ouvrir un fichier PDF depuis un formulaire
    Par yao67 dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/06/2007, 09h40
  5. [VBA] Ouvrir plusieurs fichiers textes depuis Excel
    Par Stephane_123 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/12/2006, 17h45

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