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

VBA Discussion :

Ouvrir un fichier PDF en plein écran


Sujet :

VBA

  1. #21
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Pourtant ça devrait marcher car le nom de la classe pour Adobe est le bon.
    J'ai fait un test pour le confirmer avec l'API GetClassName (en 32 bits) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
    J'ai ouvert Adobe sur un fichier et j'ai lancé le programme suivant, qui retourne le handle avec TrouverFenetre, puis demande le nom de la classe de ce Handle et j'ai bien AcrobatSDIWindow.
    On peut le vérifier en faisant l'opération inverse :

    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
    '------------------------------------------------------------------------------------------------------
    Private Sub TestClasseAdobe()
    '------------------------------------------------------------------------------------------------------
    ' Déclaration des Variables:
    Dim lpClassName As String, RetVal As Long, Hdc As Long
    lpClassName = Space(256)
    ' Retourne le Handle de Adobe (après avoir ouvert Adobe):
    Hdc = TrouverFenetre("*Adobe*")
    ' Affiche le Hdc:
    Debug.Print Hdc
    ' Touve le nom de la classe de cette fenêtre:
    RetVal = GetClassName(Hdc, lpClassName, 256)
    lpClassName = Left$(lpClassName, RetVal)
    ' et l'affiche:
    Debug.Print lpClassName
    ' Retourne le Handle de la classe::
    RetVal = FindWindowA("AcrobatSDIWindow", vbNullString)
    ' Si tout est OK alors affiche une valeur ou 0 si erreur:
    Debug.Print RetVal
    End Sub
    et j'ai en affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     19204516 
    AcrobatSDIWindow
     19204516

  2. #22
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Laurent,

    Je viens d'effectuer un essai
    Toujours dans la configuration de JP.

    Dans la procédure
    Hdc_EnvoyerTouches
    Si je place un point d'arrêt sur une instruction par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox "Vous avez trouvé."
    Le débugger une fois relancé, l'applicatif PDF s'affiche bien en grand écran.

    Si je ne place pas de point d'arrêt, alors le code s'exécute mais aucune Msgbox n'apparaît.
    On dirait qu'Excel perd la main.
    J'avoue ne pas comprendre.

    A toute fin utile, voici mon 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
    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
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    Option Explicit
     
    Option Compare Binary
     
    #If Win64 Then
    ' Pour le presse-papiers:
    Private Declare PtrSafe Function OpenClipboard Lib "User32" (ByVal hWnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function SetClipboardData Lib "User32" (ByVal wFormat As LongPtr, ByVal hMem As LongPtr) As LongPtr
    Private Declare PtrSafe Function CloseClipboard Lib "User32" () As LongPtr
    Private Declare PtrSafe Function GetClipboardData Lib "user32.dll" (ByVal wFormat As Long) As Long
    Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As LongPtr) As LongPtr
    Private Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
    Private Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As LongPtr) As Long
    Private Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As LongPtr
    Private Declare PtrSafe Function EmptyClipboard Lib "User32" () As LongPtr
    Private Declare PtrSafe Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As LongPtr)
     
    ' Pour gérer les fenêtres actives:
     
    'Laurent Ott
    'Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
     
    'Jurassik Pork
    Declare Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
    Private Declare PtrSafe Function GetWindow Lib "User32" (ByVal hWnd As LongPtr, ByVal wCmd As Long) As LongPtr
    Private Declare PtrSafe Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hWnd As LongPtr, ByVal lpString As String, ByVal cch As LongPtr) As Long
    Private Declare PtrSafe Function SetForegroundWindow Lib "User32" (ByVal hWnd As LongPtr) As LongPtr
    Private Declare PtrSafe Function SetFocus Lib "User32" (ByVal hWnd As LongPtr) As LongPtr
    #Else
    ' Pour le presse-papiers:
    Private Declare Function OpenClipboard Lib "User32" (ByVal hWnd As Long) As Long
    Private Declare Function SetClipboardData Lib "user32.dll" (ByVal wFormat As Long, ByVal hMem As Long) As Long
    Private Declare Function CloseClipboard Lib "User32" () As Long
    Private Declare Function GetClipboardData Lib "User32" (ByVal wFormat As Long) As Long
    Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal dwBytes As Long) As Long
    Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
    Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
    Private Declare Function EmptyClipboard Lib "User32" () As Long
    Private Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    ' Pour gérer les fenêtres actives:
    Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
    Private Declare Function GetWindow Lib "User32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
    Private Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
    Private Declare Function SetFocus Lib "User32" (ByVal hWnd As Long) As Long
    #End If
     
    Private Const CF_TEXT = 1
    Private Const MAXSIZE = 65536
    Private Const GMEM_MOVEABLE = &H2
    Private Const GMEM_ZEROINIT = &H40
    Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
     
    'https://www.developpez.net/forums/d2092762/logiciels/microsoft-office/general-vba/ouvrir-fichier-pdf-plein-ecran/#post11629879
     
    '------------------------------------------------------------------------------------------------------
    Sub Ouvrir_PDF_bis()
    '------------------------------------------------------------------------------------------------------
     
    Dim lerép As String
    lerép = "lechemincomplet"
     
    Dim lefichier As String
    lefichier = lerép & Application.PathSeparator & "Organigramme.pdf"
     
    ' Ouvre le fichier PDF:
    Shell "C:\windows\explorer.exe " & lefichier, vbMaximizedFocus
     
    Dim t As Single
     
    GoTo Jurassik_Pork
    'GoTo Laurent_Ott
    '---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    'Processus Laurent Ott
    Laurent_Ott:
     
    Dim Hdc As LongPtr
     
    'Boucle tant que le Handle de Adobe n'est pas trouvé:
    t = Timer
    Do
        Hdc = Hdc_Trouver("*Adobe*")
    Loop While Hdc = 0 And t + 10 > Timer
     
    ' Place le focus sur l'application et envoie Control L:
    If Hdc <> 0 Then
            'Call Hdc_EnvoyerTouches(hWndApp:=Hdc, Combinaison:=lacombine)
            Hdc_EnvoyerTouches Hdc, vbKeyControl, vbKeyL
            'Développement l 8 octobre 2020 - Cde fonctionnel
            'Hdc_EnvoyerTouches Hdc, vbKeyShift, vbKeyControl, vbKeyS
    End If
    GoTo lafin
    '---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    'Processus Jurassik Pork
    Jurassik_Pork:
    Dim Hdc2 As Long
     
    Do
        Hdc2 = FindWindowA("AcrobatSDIWindow", vbNullString)
    Loop While Hdc2 = 0 And t + 10 > Timer
     
    SetForegroundWindow Hdc2
    SetFocus Hdc2
     
    'Dim lacombine As Variant
    'lacombine = Array(vbKeyControl, vbKeyL)
     
    ' Place le focus sur l'application et envoie Control L:
    If Hdc2 <> 0 Then
            'Call Hdc_EnvoyerTouches(hWndApp:=Hdc, Combinaison:=lacombine)
            Hdc_EnvoyerTouches Hdc2, vbKeyControl, vbKeyL
            'Développement l 8 octobre 2020 - Cde fonctionnel
            'Hdc_EnvoyerTouches Hdc, vbKeyShift, vbKeyControl, vbKeyS
    End If
     
    '---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    lafin:
    End Sub
     
    '------------------------------------------------------------------------------------------------------
    Public Function Hdc_Trouver(StrFenetre As String) As LongPtr
    '------------------------------------------------------------------------------------------------------
    ' Retourne le Handle de la fenêtre passé en argument. Utilise l'opérateur Like donc accepte * et ?
    ' et autres, voir l'aide.
    ' Retourne 0 si la fenêtre n'est pas trouvée.
    '------------------------------------------------------------------------------------------------------
    Dim Ret As LongPtr
    Dim MyStr As String
     
    ' Boucle sur les fenêtres actives:
    Ret = FindWindow(ByVal 0&, ByVal 0&)
    Do While Ret <> 0
     
        ' Cherche le nom de la fenêtre:
        MyStr = String(100, Chr$(0))
        GetWindowText Ret, MyStr, Len(MyStr)
     
        ' Si c'est la fenêtre recherchée alors renvoie l'Hdc:
        If Left(MyStr, InStr(1, MyStr, Chr(0)) - 1) Like StrFenetre Then
            Hdc_Trouver = Ret
            Exit Do
        End If
     
        ' Cherche la fenêtre suivante:
        Ret = GetWindow(Ret, 2)
     
    Loop
     
    End Function
     
    '------------------------------------------------------------------------------------------------------
    Public Sub Hdc_EnvoyerTouches(hWndApp As Variant, ParamArray Combinaison() As Variant)
    '------------------------------------------------------------------------------------------------------
    ' Envoie des touches à une application.
    ' hWndApp : est soit le numéro Hdc de la fenêtre (ou 0 si fenêtre active), soit son nom.
    ' Combinaison : touche(s) a envoyer. Ce peut être une chaîne ou une variable vbKey.
    '------------------------------------------------------------------------------------------------------
    ' Exemples : Hdc_EnvoyerTouches Hdc, "Bonjour"
    '            Hdc_EnvoyerTouches Hdc, vbKeyMultiply
    '------------------------------------------------------------------------------------------------------
    ' Astuce : l'impression écran est impossible avec Sendkeys, utilisez Hdc_EnvoyerTouches 0, vbKeySnapshot
    ' ou pour n'avoir que le forumaire actif: Hdc_EnvoyerTouches 0, vbKeyMenu, vbKeySnapshot
    ' Exmple pour la calculatrice (si déjà ouverte) : Hdc_EnvoyerTouches "*Calculatrice*", vbKeyMenu,  vbKeySnapshot
    ' puis pour coller dans Excel : Sheets("Feuil1").Paste Range("A1")
    '------------------------------------------------------------------------------------------------------
    MsgBox "Vous avez trouvé."
     
    Dim i As Integer, j As Integer, s As String, Etat As Boolean, Maj As Boolean
     
    'Pour Laurent Ott
    'Dim Hdc As LongPtr
     
    'Pour Jurassik Pork
    Dim Hdc As Long
     
    If IsNumeric(hWndApp) = True Then
        Hdc = hWndApp
    Else
        Hdc = Hdc_Trouver(CStr(hWndApp))
    End If
     
    ' Vide la presse-papiers:
    ClipBoard_Clear
     
    ' Place le focus sur la fenêtre demandée (si son numéro est passé <> 0):
    If Hdc <> 0 Then
        SetForegroundWindow Hdc
        SetFocus Hdc
    End If
     
    ' Si une chaîne de carractères est passée en argument:
    If VarType(Combinaison(0)) <> vbInteger Then
        ' L'envoie dans le presse-papiers:
        If ClipBoard_SetData(CStr(Combinaison(0))) = True Then
            ' Si cela réussi alors colle avec Ctrl+V:
            keybd_event vbKeyControl, 0, 0, 0
            keybd_event vbKeyV, 0, 0, 0
            keybd_event vbKeyControl, 0, 2, 0
            keybd_event vbKeyV, 0, 2, 0
        End If
    ' Si c'est une combinaison numérique qui est passée en argument:
    Else
        ' Active:
        For i = LBound(Combinaison()) To UBound(Combinaison())
            keybd_event Combinaison(i), 0, 0, 0
        Next i
        ' Relache:
        For i = LBound(Combinaison()) To UBound(Combinaison())
            keybd_event Combinaison(i), 0, 2, 0
        Next i
    End If
    DoEvents
     
    End Sub
     
    '---------------------------------------------------------------------------------------
    Public Function ClipBoard_Clear() As Boolean
    '---------------------------------------------------------------------------------------
    If OpenClipboard(0) = 0 Then Exit Function ' Could not open the Clipboard.
    EmptyClipboard
    If CloseClipboard() <> 0 Then ClipBoard_Clear = True
    End Function
     
    '---------------------------------------------------------------------------------------
    Private Function ClipBoard_SetData(MyString As String) As Boolean
    '---------------------------------------------------------------------------------------
    ' Envoie une chaîne de caractères dans le presse-papiers.
    ' MyString : Chaîne à envoyer
    '---------------------------------------------------------------------------------------
    ' Sources : 32-bit code by Microsoft: <a href="http://msdn.microsoft.com/en-us/library/office/ff192913.aspx" target="_blank">http://msdn.microsoft.com/en-us/libr.../ff192913.aspx</a>
    '---------------------------------------------------------------------------------------
    Dim hGlobalMemory As LongPtr, lpGlobalMemory As LongPtr
    Dim hClipMemory As LongPtr
     
    ' Gestion de la taille maximale du message a envoyer au clavier:
    If Len(MyString) >= MAXSIZE Then  ' "Chaîne trop grande"
        Exit Function
    End If
     
    ' Gestion des chaînes vides:
    If MyString = "" Then Exit Function
     
    ' Allocate moveable global memory.
    hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1)
     
    ' Lock the block to get a far pointer to this memory.
    lpGlobalMemory = GlobalLock(hGlobalMemory)
     
    ' Copy the string to this global memory.
    lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)
     
    ' Unlock the memory.
    If GlobalUnlock(hGlobalMemory) <> 0 Then '"Could not unlock memory location. Copy aborted."
       GoTo OutOfHere
    End If
     
    ' Open the Clipboard to copy data to.
    If OpenClipboard(0&) = 0 Then ' "Could not open the Clipboard. Copy aborted."
       Exit Function
    End If
     
    ' Clear the Clipboard.
    EmptyClipboard
     
    ' Copy the data to the Clipboard.
    hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
     
    OutOfHere:
    If CloseClipboard() <> 0 Then ClipBoard_SetData = True
     
    End Function
    '---------------------------------------------------------------------------------------
    '---------------------------------------------------------------------------------------

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  3. #23
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Je n'ai pas testé mais si tu es en 64 bits il faut déclarer Hdc2 en LongPrt et pas en Long.
    Mais tu ne nous a toujours pas dit tu es en 32 ou 64 bits ?

  4. #24
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Laurent

    OK Merci. Code Fonctionnel.

    Reste un point, s'il te plaît, quant à la déclaration d'un paramètre Paramarray.
    Ma question n°2 du 8 octobre à 16 h 09.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  5. #25
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Sur ce dernier point, je pense que l'appel que tu souhaitais faire n'est pas supporté par le VBA.
    Il faut passer les arguments en dur.
    À mon avis.

  6. #26
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Cela revient donc à dire que l'on ne peut déclarer ses paramètres si l'un d'eux est de nature ParamArray.
    Je vais ouvrir une discussion.

    Merci, Laurent.

    Passe une bonne journée.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [JDBC]ouvrir un fichier pdf à partir d'un blob
    Par souletis dans le forum JDBC
    Réponses: 5
    Dernier message: 25/01/2007, 21h03
  2. [C#] Ouvrir un fichier PDF dans une autre fenetre
    Par ZePostman dans le forum ASP.NET
    Réponses: 3
    Dernier message: 15/03/2006, 13h41
  3. [CGI] Ouvrir un fichier pdf
    Par Luffy Duck dans le forum Autres langages pour le Web
    Réponses: 2
    Dernier message: 09/12/2005, 09h21
  4. [FLASH MX2004] Ouvrir un fichier PDF
    Par james west dans le forum Flash
    Réponses: 1
    Dernier message: 28/09/2005, 10h42
  5. Réponses: 9
    Dernier message: 20/06/2005, 16h47

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