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

Access Discussion :

Gestion Stock et Requêtes [AC-2007]


Sujet :

Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Gestion Stock et Requêtes
    Bonjour,

    J'ai construit une base de données inspiré du tuto sur la création d'une base de gestion de stock :

    http://claudeleloup.developpez.com/.../gestion-de-stock/

    J'ai modifié les formules de stock pour passer par des requêtes SQL au lieu des DSum pour augmenter la rapidité. Et j'ai ajouté des critères supplémentaires pour avoir le stock en fonction de son N° de Lot et de son état de facturation.

    Cependant, quand je veux exploiter ces données avec des tables entrées et sorties qui font au moins 1800 lignes chacunes. Lorsque que je lance une requête de création de table pour avoir le stock et que dans cette requête je mets une colonne avec la fonction concerné en indiquant comme critères de formule le champ ID produit, la date de jour, le champ N° de lot et le champ facturation. La requête est assez longue à exécuter . J'aimerais connaitre un moyen d'augmenter la vitesse. Je ne sais pas si c'est la formule ou les regroupements qui ralentissent la requête.

    Faut-il que je revois mon architecture pour intégrer une table stock afin d'incrémenter les entrées et sorties ?

    Merci par avance pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Salut,

    Tu dois avoir quelque chose dans tes requêtes qui t'augmentes le temps de traitement.

    Peut être as tu utilisé trop de fonction de domaine ?

    Ensuite tu dis "Lorsque que je lance une requête de création de table", c'est à dire ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par martii843 Voir le message
    Salut,

    Tu dois avoir quelque chose dans tes requêtes qui t'augmentes le temps de traitement.

    Peut être as tu utilisé trop de fonction de domaine ?

    Ensuite tu dis "Lorsque que je lance une requête de création de table", c'est à dire ?
    La requête de sélection sans création de table prend moins de temps qu'avec la création de la table ce qui est normal je suppose. J'ai peut-être mal construit cette requête.

    Voici la version SQL Access de ce que je fais :

    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
    SELECT CStr([T_PDTS]![CIP_PK])+CStr([T_STOCK_ENTREE]![EntreeLot]) AS NumCle, 
    T_PDTS.CIP_PK, 
    T_PDTS.LIBELLE, 
    T_PDTS.[CDT° STOCKAGE], 
    T_STOCK_ENTREE.EntreeLot, 
    T_STOCK_ENTREE.EntreePeremption, 
    StockLotADate([T_PDTS]![CIP_PK],Date(),[T_STOCK_ENTREE]![EntreeLot]) AS [Stock Lot], 
    Last(R_PDTS_COMMENT_SNA.EntreeCommentaires) AS DernierDeEntreeCommentaires 
     
    INTO T_SNA
     
    FROM (T_PDTS INNER JOIN T_STOCK_ENTREE ON T_PDTS.CIP_PK = T_STOCK_ENTREE.CIP_FK) 
     
    LEFT JOIN R_PDTS_COMMENT_SNA ON (T_STOCK_ENTREE.CIP_FK = R_PDTS_COMMENT_SNA.CIP_PK) AND (T_STOCK_ENTREE.EntreeLot = R_PDTS_COMMENT_SNA.EntreeLot)
     
    GROUP BY T_PDTS.CIP_PK, T_PDTS.LIBELLE, T_PDTS.[CDT° STOCKAGE], T_STOCK_ENTREE.EntreeLot, T_STOCK_ENTREE.EntreePeremption
     
    HAVING (((StockLotADate([T_PDTS]![CIP_PK],Date(),[T_STOCK_ENTREE]![EntreeLot]))<>0));

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Autre précision voici le code de la fonction de StockLotADate utilisé :

    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
     
    Option Explicit
     
       Dim rst As DAO.Recordset
       Dim strSql As String
       Dim strTable As String
       Dim strChamp As String
       Dim strDateWhere As String
       Dim strLotWhere As String
       Dim strFact As String
     
    Public Function EntreesLotADate(Article As Long, DateAng As Date, Lot As String) As Variant
        On Error GoTo GestError
     
        ' ===== affectation =====
     
       strTable = "T_STOCK_ENTREE"
       strChamp = "EntreeQTE"
       strDateWhere = "EntreeDate"
       strLotWhere = "EntreeLot"
     
        strSql = "SELECT Sum(" & strChamp & ") AS Somme " _
                & "FROM " & strTable & " " _
                & "WHERE " & strDateWhere & "<=#" & DateAng & "# AND " _
                           & "  CIP_FK=" & Article & " AND " _
                           & "" & strLotWhere & "=" & Chr(34) & Lot & Chr(34) & ";"
     
        Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
        If Not rst.EOF Then
     
        EntreesLotADate = Nz(rst.Fields("Somme"), 0)
     
        Else
     
        EntreesLotADate = 0
     
        End If
     
        ' ===== libération =====
        rst.Close
        Set rst = Nothing
        Exit Function
     
    GestError:
     
        If Err.Number = 3061 Then
            MsgBox "Une des donnée entrée en paramètre est erronée", vbOKOnly + vbExclamation
        End If
     
    End Function
     
     
    Public Function SortiesLotADate(Article As Long, DateAng As Date, Lot As String) As Variant
        On Error GoTo GestError
     
        ' ===== affectation =====
     
       strTable = "T_STOCK_SORTIE"
       strChamp = "SortieQTE"
       strDateWhere = "SortieDate"
       strLotWhere = "SortieLot"
     
        strSql = "SELECT Sum(" & strChamp & ") AS Somme " _
                & "FROM " & strTable & " " _
                & "WHERE " & strDateWhere & "<=#" & DateAng & "# AND " _
                           & "  CIP_FK=" & Article & " AND " _
                           & "" & strLotWhere & "=" & Chr(34) & Lot & Chr(34) & ";"
     
        Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
        If Not rst.EOF Then
     
        SortiesLotADate = Nz(rst.Fields("Somme"), 0)
     
        Else
     
        SortiesLotADate = 0
     
        End If
     
        ' ===== libération =====
        rst.Close
        Set rst = Nothing
        Exit Function
     
    GestError:
     
        If Err.Number = 3061 Then
            MsgBox "Une des donnée entrée en paramètre est erronée", vbOKOnly + vbExclamation
        End If
     
    End Function
     
     
    Public Function StockLotADate(Article As Long, DateAng As Date, Lot As String) As Single
     
    StockLotADate = EntreesLotADate(Article, DateAng, Lot) - SortiesLotADate(Article, DateAng, Lot)
    End Function

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

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Pourquoi construis tu une autre table ?

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par martii843 Voir le message
    Pourquoi construis tu une autre table ?
    C'est un moyen que j'ai trouvé pour créer une table temporaire lors du lancement de l'application, mais je perds en temps dès que je la mets à jour suite à une modification sur la fermeture du formulaire qui exploite cette table temporaire.

    Au départ je n'utilisais que la requête comme source du formulaire mais vu le temps de traitement j'ai pensé qu'un lancement au démarrage de l'application serait plus efficace mais ce que je gagne à un endroit je le perds à un autre .

    La seule solution s'est de retravailler la requête en la scindant en plusieurs étapes peut-être ?

  7. #7
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    A mon avis tu as arriveras quasiment au même résultat en scindant ta requête.

    Combien de temps, à peu près, met ton traitement à se faire ?

    Peux tu mettre ton application en PJ ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Le traitement de la requête sans création de table met 16s ce qui est beaucoup.

    Malheureusement je ne peux pas mettre l'application en pièce jointe : données confidentielles de mon entreprise.

  9. #9
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    D'accord, c'est lent, tu as un soucis dans ta requête.

    Tu peux copier coller ta requête sélection STP ?

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    La voici en SQL :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T_PDTS.CIP_PK, T_PDTS.LIBELLE, T_PDTS.[CDT° STOCKAGE], T_STOCK_ENTREE.EntreeLot, T_STOCK_ENTREE.EntreePeremption, T_STOCK_ENTREE.EntreeFacturation, StockLotFactADate([T_STOCK_ENTREE]![CIP_FK],Date$(),[T_STOCK_ENTREE]![EntreeLot],[T_STOCK_ENTREE]![EntreeFacturation]) AS [Stock Total], Last(T_STOCK_ENTREE.EntreeDate) AS DernierDeEntreeDate, Last(R_PDTS_COMMENT_SNA.EntreeDate) AS [Date Commentaires], Last(R_PDTS_COMMENT_SNA.EntreeCommentaires) AS DernierDeEntreeCommentaires, r_Stk_Select.CIP_FK
    FROM ((T_PDTS INNER JOIN T_STOCK_ENTREE ON T_PDTS.CIP_PK = T_STOCK_ENTREE.CIP_FK) LEFT JOIN R_PDTS_COMMENT_SNA ON (T_STOCK_ENTREE.CIP_FK = R_PDTS_COMMENT_SNA.CIP_PK) AND (T_STOCK_ENTREE.EntreeLot = R_PDTS_COMMENT_SNA.EntreeLot)) LEFT JOIN r_Stk_Select ON (T_STOCK_ENTREE.CIP_FK = r_Stk_Select.CIP_FK) AND (T_STOCK_ENTREE.EntreeLot = r_Stk_Select.EntreeLot)
    GROUP BY T_PDTS.CIP_PK, T_PDTS.LIBELLE, T_PDTS.[CDT° STOCKAGE], T_STOCK_ENTREE.EntreeLot, T_STOCK_ENTREE.EntreePeremption, T_STOCK_ENTREE.EntreeFacturation, StockLotFactADate([T_STOCK_ENTREE]![CIP_FK],Date$(),[T_STOCK_ENTREE]![EntreeLot],[T_STOCK_ENTREE]![EntreeFacturation]), r_Stk_Select.CIP_FK
    HAVING (((StockLotFactADate([T_STOCK_ENTREE]![CIP_FK],Date$(),[T_STOCK_ENTREE]![EntreeLot],[T_STOCK_ENTREE]![EntreeFacturation]))<>0))
    ORDER BY T_PDTS.LIBELLE;

    J'ai déjà réussi à gagner en rapidité en mettant des index ce que je n'avais pas fait au départ.

  11. #11
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Merci,

    Attention avec "Last" il peut y avoir des problèmes de récupération de données et de lenteur dans le traitement.

    Peux tu aussi, STP, envoyer un Impr Ecran de ta requête en mode création pour voir tes tables ?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Pour info dans la table T_STOCK_ENTREE les champs CMUP et EntreePU ne sont pas utilisés.

    Nom : Requete Mode Création.PNG
Affichages : 375
Taille : 31,3 Ko

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Je pense avoir trouver l'essentiel du problème il s'agit de cette fonction de stock qui est une fonction DSum au format SQL qui ralentie le système quand je l'utilises sur la Table T_STOCK_ENTREE qui est la table source qui sert pour les calculs.

    Pouvez-vous m'aider à l'optimiser ?

    Merci,

    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
    Option Explicit
     
       Dim rst As DAO.Recordset
       Dim strSql As String
       Dim strTable As String
       Dim strChamp As String
       Dim strDateWhere As String
       Dim strLotWhere As String
       Dim strFact As String
     
    Public Function EntreesLotADate(Article As Long, DateAng As Date, Lot As String) As Variant
        On Error GoTo GestError
     
        ' ===== affectation =====
     
       strTable = "T_STOCK_ENTREE"
       strChamp = "EntreeQTE"
       strDateWhere = "EntreeDate"
       strLotWhere = "EntreeLot"
     
        strSql = "SELECT Sum(" & strChamp & ") AS Somme " _
                & "FROM " & strTable & " " _
                & "WHERE " & strDateWhere & "<=#" & DateAng & "# AND " _
                           & "  CIP_FK=" & Article & " AND " _
                           & "" & strLotWhere & "=" & Chr(34) & Lot & Chr(34) & ";"
     
        Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
        If Not rst.EOF Then
     
        EntreesLotADate = Nz(rst.Fields("Somme"), 0)
     
        Else
     
        EntreesLotADate = 0
     
        End If
     
        ' ===== libération =====
        rst.Close
        Set rst = Nothing
        Exit Function
     
    GestError:
     
        If Err.Number = 3061 Then
            MsgBox "Une des donnée entrée en paramètre est erronée", vbOKOnly + vbExclamation
        End If
     
    End Function
     
     
    Public Function SortiesLotADate(Article As Long, DateAng As Date, Lot As String) As Variant
        On Error GoTo GestError
     
        ' ===== affectation =====
     
       strTable = "T_STOCK_SORTIE"
       strChamp = "SortieQTE"
       strDateWhere = "SortieDate"
       strLotWhere = "SortieLot"
     
        strSql = "SELECT Sum(" & strChamp & ") AS Somme " _
                & "FROM " & strTable & " " _
                & "WHERE " & strDateWhere & "<=#" & DateAng & "# AND " _
                           & "  CIP_FK=" & Article & " AND " _
                           & "" & strLotWhere & "=" & Chr(34) & Lot & Chr(34) & ";"
     
        Set rst = CurrentDb.OpenRecordset(strSql, dbOpenDynaset)
        If Not rst.EOF Then
     
        SortiesLotADate = Nz(rst.Fields("Somme"), 0)
     
        Else
     
        SortiesLotADate = 0
     
        End If
     
        ' ===== libération =====
        rst.Close
        Set rst = Nothing
        Exit Function
     
    GestError:
     
        If Err.Number = 3061 Then
            MsgBox "Une des donnée entrée en paramètre est erronée", vbOKOnly + vbExclamation
        End If
     
    End Function
     
     
    Public Function StockLotADate(Article As Long, DateAng As Date, Lot As String) As Single
     
    StockLotADate = EntreesLotADate(Article, DateAng, Lot) - SortiesLotADate(Article, DateAng, Lot)
    End Function

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Je viens de tester une requete en indiquant de mettre uniquement le calcul de la fonction StockLotADate() que quand ils sont différents de 0, en utilisant le critère : <>0. Et la c'est le drame cela ralentie grandement la requête.

    Je vais essayer d'utiliser autre chose pour filtrer et n'afficher que les lignes qui ont du stock.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Pharmacien
    Inscrit en
    Décembre 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Pharmacien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 14
    Points : 8
    Points
    8
    Par défaut Solution Trouvée
    Afin d'accélérer les requêtes j'ai transposé la formule VBA de calcul de stock en plusieurs requêtes Access qui vont bien plus vite. Je l'ai par la suite intégré dans les requête de création de table. Et ça a marché

    Merci pour votre aide.

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

Discussions similaires

  1. [AC-2003] calcul gestion de stock par requête
    Par yieiyiei dans le forum Modélisation
    Réponses: 8
    Dernier message: 21/02/2015, 08h24
  2. Gestion Stock
    Par fb40 dans le forum Access
    Réponses: 4
    Dernier message: 11/03/2006, 23h42
  3. Réponses: 6
    Dernier message: 21/06/2005, 15h06
  4. [Procs stockées] [Débutant] Requête dynamique
    Par stailer dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2005, 14h29
  5. Procédures stockées ou requêtes SQL
    Par zoubidaman dans le forum Débuter
    Réponses: 2
    Dernier message: 18/08/2004, 02h36

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