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 :

ListView Extration des icônes associé au type de fichier


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2015
    Messages : 19
    Par défaut ListView Extration des icônes associé au type de fichier
    Bonjour à tous,

    Je rentre un problème pour extraire les icônes associés à un type de fichier.

    En effet sur un Form j'ai d'un coté un TreeView qui liste les répertoires d'un dossier, de l'autre un ListView qui affiche les fichiers contenu dans le répertoire cliqué sur le TreeView.

    Cela fonctionne à moitié, je m'explique. Lors du clic sur un des répertoires (Node) du TreeView, un coup les icônes s'affichent, un coup non, c'est aléatoire

    Nom : 2018-04-08_14h48_06.png
Affichages : 1091
Taille : 12,5 KoNom : 2018-04-08_15h05_02.png
Affichages : 922
Taille : 11,0 Ko

    Je cherche depuis un moment, mais ne trouve pas le problème.

    Voici le code du Form:

    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
     
    Dim tw As MSComctlLib.TreeView, fs
     
    Private Sub TreeView1_Click()
    Dim Root As String, Chemin As String
        Me.ListView1.ListItems.Clear
        Me.ImageList1.ListImages.Clear
     
        Root = TreeView1.SelectedItem.Key
        Me.TextBox1 = Mid(Root, 9)
        Chemin = Mid(Root, 9)
        Call LV.ElementsRepertoire(Chemin, ListView1, ImageList1)
    End Sub
     
    Private Sub UserForm_Initialize()
     
      pere = "C:\Jurick Cloud\PV.HEBRAUD\DOSSIERS"
      If pere = "" Then Exit Sub
      If pere = "C:\" Then Stop
      Set tw = Me.TreeView1
      P = InStrRev(pere, "\"): tmp = Mid(pere, P + 1)
      tw.Nodes.Add(, , "NoeudMat" & pere, tmp).Expanded = True
     
      Set fs = CreateObject("Scripting.FileSystemObject")
      Set dossier_racine = fs.GetFolder(pere)
     Lit_dossier dossier_racine, 1
     
    End Sub
     
    Sub Lit_dossier(ByRef dossier, ByVal niv)
        On Error GoTo sortie
        pere = dossier.Path
        For Each d In dossier.SubFolders
          fils = d.Path
          P = InStrRev(fils, "\"):   tmp = Mid(fils, P + 1)
          tw.Nodes.Add("NoeudMat" & pere, tvwChild, "NoeudMat" & d.Path, tmp).Expanded = False
          Lit_dossier d, niv + 1
        Next
    sortie:
      Exit Sub
    End Sub
    Le code du module pour l’extraction:
    Contient deux Fonctions
    - Une pour trouver l'exécutable du fichier
    - Une pour L'extraction de l'icône
    La Sub qui alimente le ListView et ImageList
    Volontairement j'ai enlevé l'affichage de la date ainsi que de la taille des fichiers et commentaire.
    Je précise que le code d'origine ci-dessous n'ai pas de moi (https://silkyroad.developpez.com/VBA/ListView/#LII-I)

    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
     
    Option Explicit
     
    Public Const MAX_FILENAME_LEN = 256
     
    Public Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _
          (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
     
    Public Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" _
           (ByVal pszPath As Any, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, _
            ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
     
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
          (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
           ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Public Declare Function FindExecutableA Lib "shell32.dll" _
          (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
     
    Public Type PicBmp
       Size As Long
       tType As Long
       hBmp As Long
       hPal As Long
       Reserved As Long
    End Type
     
    Public Type GUID
       Data1 As Long
       Data2 As Integer
       Data3 As Integer
       Data4(7) As Byte
    End Type
     
    Public Type SHFILEINFO
       hicon As Long
       iIcon As Long
       dwAttributes As Long
       szDisplayName As String * 260
       szTypeName As String * 80
    End Type
     
     
    Public Function GetIconFromFile(FileName As String, IconIndex As Long, _
            UseLargeIcon As Boolean) As IPicture
        '**************************************************************
        'Necessite d'activer la reference "Standard OLE Types"
        '**************************************************************
        Dim b As SHFILEINFO
        Dim retval As Long
        Dim pic As PicBmp
        Dim IPic As IPicture
        Dim IID_IDispatch As GUID
     
        retval = SHGetFileInfo(FileName, 0, b, Len(b), &H100)
        With IID_IDispatch
            .Data1 = &H20400
            .Data4(0) = &HC0
            .Data4(7) = &H46
        End With
     
        With pic
            .Size = Len(b)
            .tType = 3 'vbPicTypeIcon
            .hBmp = b.hicon
        End With
     
        Call OleCreatePictureIndirect(pic, IID_IDispatch, 1, IPic)
        Set GetIconFromFile = IPic
     
    End Function
     
    '************************************************************
    '         Charge les fichiers dans ListView                 *
    '************************************************************
     
    Sub ElementsRepertoire(Chemin As String, LV As Object, IL As Object)
     
        Dim objShell As Object, objFolder As Object, strFileName As Object
        Dim x As Integer, nbFichiers As Integer, SecuriteSlash As Integer
        Dim Tableau() As String
        Dim Direction As String, Executable As String
    '**************************************************************************************
    On Error Resume Next
    ' Vide ListView
        LV.ListItems.Clear
        IL.ListImages.Clear
     
    'lister les fichiers du repertoire
    Direction = Dir(Chemin & "\*.*")
     
    Do While Len(Direction) > 0
     
    nbFichiers = nbFichiers + 1
    ReDim Preserve Tableau(1 To nbFichiers)
    Tableau(nbFichiers) = Direction
    Direction = Dir()
    Loop
    '**************************************************************************************
     
    With IL
      .ListImages.Clear
      .ImageWidth = 20
      .ImageHeight = 20
    End With
     
    If nbFichiers > 0 Then
     
    For x = 1 To nbFichiers
        Executable = FindExecutable(Chemin & "\" & Tableau(x)) 'cherche l'executable associé au fichier
        IL.ListImages.Add , "A" & x, GetIconFromFile(Executable, 0, False) 'recupere le 1er icone
        'Debug.Print GetIconFromFile(Executable, 0, False)
    Next x
     
    LV.SmallIcons = IL
     
     
    With LV
        With .ColumnHeaders
            .Clear
            .Add , , "Nom du Fichier", 135
            '.Add , , "Taille", 70
            .Add , , "Date", 60
            '.Add , , "Commentaire", 280
        End With
     
        For x = 1 To nbFichiers
        .ListItems.Add , , Tableau(x)
        '.ListItems(x).ListSubItems.Add , , FileLen(Chemin & "\" & Tableau(x)) '& " octets"
        .ListItems(x).ListSubItems.Add , , Format(FileDateTime(Chemin & "\" & Tableau(x)), "DD/MM/YYYY")
        .ListItems(x).SmallIcon = "A" & x
        Next
    End With
     
    End If
    End Sub
     
     
     
    'trouve quel executable ouvre le fichier cible
    Public Function FindExecutable(S As String) As String
    Dim I As Integer, S2 As String
    S2 = String(MAX_FILENAME_LEN, 32) & Chr$(0)
    I = FindExecutableA(S & Chr$(0), vbNullString, S2)
    If I > 32 Then
       FindExecutable = Left$(S2, InStr(S2, Chr$(0)) - 1)
    Else
       FindExecutable = ""
    End If
    End Function
    Merci pour votre coup de main!

    Notes:
    Windows 10 32 Bits
    Excel 16
    VBA 7.1

  2. #2
    Inactif  

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

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    avec olecreate picture tu peux mettre l'icone sur un controls
    mais avec un listview il se peut que certains iconne plus précisement (les DATA du GUID) ne soit pas compatible
    deja pour l'extraction des iconne
    je te propose un peu de lecture
    https://www.developpez.net/forums/d1...highlight=icon

    tu y verra l'utilisation d'une api isclipboardavailable elle n'est pas utilisée pour rien
    entre 2 creation d'image pour ta listeview il faut un temps pour que le clipboard se mette a jour
    si tu va trop vite tu a q'une portion de donnée du guid et forcement l'image n'est pas valide

    Mais perso!!!!
    pour me simplifier la vie avec ses iconne je ferait une insertion oleobject pdf,etc... puis un copy picture puis un paste dans un chart et un export en gif
    et dans ta boucle tester si une extention n'a pas été deja faite
    autrement dit tu devrait te retrouver avec des fichiers pdf.jpg,txt.jpg,word.jpg etc.....
    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

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2015
    Messages : 19
    Par défaut
    Bonjour PatrickToulon,

    Merci pour ton retour.
    J'aurai quelques questions:

    - Si les data du GUID ne sont pas compatible, pourquoi le chargement est aléatoire?
    Par exemple il y a des répertoires ou il y à 20 fichiers, et cela fonctionne normalement, et d'autre qui contienne que 2 fichiers, et la les icônes ne se charge plus.
    Ou encore, cela peux fonctionner sur tout les répertoires pendant 1/2 heure, et puis cela peut s’arrêter...

    - Pour l'utilisation de isclipboardavailable, je ne connais pas du tout!, tout ce que je sais c'est qu'on se sert du presse papier de win.
    On ce sert du clipboard en "tampon"?
    Je viens de jeter un œil dans le fichier de la contrib que tu à fais, et j'ai du mal à savoir comment m'en servir sur ce que j'ai déjà.

    - Ne peut 'on pas attendre que le clipboard se mette à jour afin d'avoir toute la donnée du Guid avant de continuer?

    Pour ton idée via un oleobject, je ne comprend pas très bien, aurai tu un peu d'information à me fournir ? et ou m'aider sur cette piste?

    Merci

  4. #4
    Inactif  

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

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    - Ne peut 'on pas attendre que le clipboard se mette à jour afin d'avoir toute la donnée du Guid avant de continuer?
    l'api dont je parle sert a ca et pile ton probleme
    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

  5. #5
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2015
    Messages : 19
    Par défaut
    Donc si je comprend bien et reprend moi si il faut,
    le but étant de se servir de l'API isclipboardavailable pour créer un tampon entre la fonction getIconFromFile et la Sub.
    De plus il faut donc copier la donnée de la fonction dans le presse puis la reprendre dans la Sub de qui assurera la complétude de la donnée.

    Est-ce l'idée?

  6. #6
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Septembre 2015
    Messages : 19
    Par défaut
    Bonsoir,

    Alors en regardant ta contrib, je voir voir la similitude de ta fonction avec celle que j'utilise et vois bien l'utilisation du clipboard.

    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
     
    Function CreatePicture() As IPicture
     
        Dim h As Long, hPicAvail As Long, hPtr As Long, hPal As Long, lPicType As Long, hCopy As Long
        Dim r As Long, uPicInfo As PicBmp, IID_IDispatch As GUID, iPic As IPicture
     
        lPicType = CF_ENHMETAFILE
        hPicAvail = IsClipboardFormatAvailable(lPicType)
     
        If hPicAvail <> 0 Then h = OpenClipboard(0&)  ' si il y a quelque chose de valide on ouvre ce quelque chose dans le  clipboard
        If h > 0 Then hPtr = GetClipboardData(CF_ENHMETAFILE): hCopy = CopyEnhMetaFile(hPtr, vbNullString)
        h = CloseClipboard    'fermeture du clipboard
        If hPtr <> 0 Then
            With IID_IDispatch    ' Creation de l'Interface GUID (for the IPicture interface)
                .Data1 = &H7BF80980
                .Data2 = &HBF32
                .Data3 = &H101A
                .Data4(0) = &H8B
                .Data4(1) = &HBB
                .Data4(2) = &H0
                .Data4(3) = &HAA
                .Data4(4) = &H0
                .Data4(5) = &H30
                .Data4(6) = &HC
                .Data4(7) = &HAB
            End With
            With uPicInfo
                .Size = Len(uPicInfo)
                .tType = 4
                .hBmp = hCopy
                .hPal = 0
           End With
     
            r = OleCreatePictureIndirect(uPicInfo, IID_IDispatch, 0, iPic)    ' creation de l'object picture
            Set CreatePicture = iPic    ' la fonction devient le picture.
        End If
     
        hCopy = 0: hPtr = 0
    End Function
    J'essaye donc de m'en servir, mais j'ai des difficultés à bien comprendre.
    Voila ci dessous mon 1er test, mais sans succès pour l'instant.
    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
     
    Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Integer) As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
    Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" _
          (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, iPic As IPicture) As Long
    Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" _
           (ByVal pszPath As Any, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, _
            ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long
     
    Private Const MAX_FILENAME_LEN = 256
    Private Const CF_ENHMETAFILE = 14
     
    Public Type PicBmp
       Size As Long
       tType As Long
       hBmp As Long
       hPal As Long
       Reserved As Long
    End Type
     
    Public Type GUID
       Data1 As Long
       Data2 As Integer
       Data3 As Integer
       Data4(7) As Byte
    End Type
     
    Public Type SHFILEINFO
       hicon As Long
       iIcon As Long
       dwAttributes As Long
       szDisplayName As String * 260
       szTypeName As String * 80
    End Type
     
    Function CreatePicture() As IPicture
        Dim h As Long
        Dim hPtr As Long
        Dim hPal As Long
        Dim hCopy As Long
        Dim hicon As Long
     
        Dim r As Long
        Dim uPicInfo As PicBmp
        Dim IID_IDispatch As GUID
        Dim iPic As IPicture
     
        Dim retval As Long
        Dim FileName As String
        Dim b As SHFILEINFO
     
        retval = SHGetFileInfo(FileName, 0, b, Len(b), &H100) '
        hPicAvail = IsClipboardFormatAvailable(retval)
     
     
        If hPicAvail <> 0 Then h = OpenClipboard(0&)  ' si il y a quelque chose de valide on ouvre ce quelque chose dans le  clipboard
     
        If h > 0 Then hPtr = GetClipboardData(retval): hCopy = CopyEnhMetaFile(hPtr, vbNullString)
        h = CloseClipboard    'fermeture du clipboard
        Debug.Print hPtr
        If hPtr <> 0 Then
            With IID_IDispatch    ' Creation de l'Interface GUID (for the IPicture interface)
                .Data1 = &H7BF80980
                .Data4(0) = &H8B
                .Data4(7) = &HAB
            End With
     
            With uPicInfo
                .Size = Len(uPicInfo)
                .tType = 4
                .hBmp = b.hicon 'hicon
                .hPal = 0
            End With
     
            r = OleCreatePictureIndirect(uPicInfo, IID_IDispatch, 1, iPic)    ' creation de l'object picture
            Set CreatePicture = iPic    ' la fonction devient le picture.
        End If
     
        'hCopy = 0: hPtr = 0
    End Function
    Merci de pour votre aide

  7. #7
    Membre éclairé Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 805
    Par défaut
    Bonjour,
    J'ai exactement le même problème avec listview1 pour lister les dossiers et au clique je charge listview2 avec les fichiers
    Les icônes s'affichent une fois sur 2 et aléatoirement
    Office 365 64bits
    C'est déconcertant

    Merci pour votre aide
    Meilleures salutations
    Philippe

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 122
    Par défaut
    Citation Envoyé par goninph Voir le message
    Bonjour,
    J'ai exactement le même problème avec listview1 pour lister les dossiers et au clique je charge listview2 avec les fichiers
    Les icônes s'affichent une fois sur 2 et aléatoirement
    Office 365 64bits
    C'est déconcertant

    Merci pour votre aide
    Meilleures salutations
    Philippe
    Bonjour Philippe
    La discussion date de 2018, ouvre une nouvelle discussion et publie un fichier excel où tu rencontre un problème.
    Perso j'éprouve des difficultés déjà avec le treeview (arborescence des dossiers). Dans VBE je ne vois pas dans l'explorateur d'objets : les éléments, propriétés et méthodes, ... que faut t'il mettre dans les références , je suis également en Office 365?

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/09/2013, 09h13
  2. Réponses: 3
    Dernier message: 13/09/2011, 16h42
  3. Associer programme à type de fichier (registry)
    Par Belegkarnil dans le forum Windows XP
    Réponses: 2
    Dernier message: 31/08/2006, 08h49
  4. Association de types de fichiers
    Par Janitrix dans le forum Windows
    Réponses: 2
    Dernier message: 08/04/2006, 22h06
  5. Icône d'un type de fichier
    Par daladim dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 28/01/2006, 18h59

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