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

VB.NET Discussion :

Filtrage complexe sur plusieurs champs dans un Table.select [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut Filtrage complexe sur plusieurs champs dans un Table.select
    Bonjour à tous,

    J'avance sur mon appli.
    Mais je me bats encore un peu avec les table.select multicritères.

    Est-il possible dans un select de passer une expression de filtrage complexe sur plusieurs champs comme celle-ci ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( ( Acteur1 = 'Tom Hardy' ) OR ( Acteur2 = 'Tom Hardy' ) OR ( Acteur3 = 'Tom Hardy' ) OR ( Acteur4 = 'Tom Hardy' ) )
    Je cherche mon erreur.

    Merci de vos aides

  2. #2
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 411
    Points : 2 162
    Points
    2 162
    Par défaut
    Bonjour,
    J'imagine que tu parles de la Close where?

    Commences par supprimer toutes tes parentèse.

    Maintenant j'avou ne comprends pas ce que veut dire Table.select!

  3. #3
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    Tout d'abord merci de ton aide.

    J'ai une DataTable avec la méthode Select de la DataTable, je veux filtrer et récupérer les DataRows qui correspondent à mes critères.
    Ma valeur de filtrage peut se situer dans quatre champs précis de ma DataTable.

    Du coup, j'essaie de créer une expression qui sera prise par la méthode Select de mon DataTable et qui me renverra les DataRows dans lesquels cette valeur apparaît au moins dans un des quatre champs de ma DataTable.

    Bien à toi

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Peut-être devrais-tu nous envoyer ta phrase de code complète, ce que tu as envoyé n'en n'est qu'une patrie.
    Par ailleurs, sauf erreur de ma part, toute la clause doit être une chaine. On devrait donc y trouver des guillemets et les apostrophes encadrant les valeurs chaines (ce qui semble avoir été fait).
    Enfin, il serait intéressant pour que nous t'aidions, que nous sachions ce qui ne va pas : aucun résultat ? message d'erreur ? autre chose ?

    ...

  5. #5
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    Merci !

    J'ai regardé encore la littérature
    Mais je ne comprends pas mon erreur...

    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
    Public Function FiltreBibliotheque(ByVal ParamGenre As String, ByVal ParamTitre As String, ByVal ParamActeur As String, ByVal ParamRealisateur As String, ByVal ParamAnnee As String, ByVal ParamLimiteAge As String) As DataRow()
     
            'Instancie l'expression à construire
            Dim Expression(6) As String
            'Instancie un compteur
            Dim k As Byte
     
            'Construit Expression en fonction du genre
            If ParamGenre <> "" Then
                Expression(1) = "Genre1 = '" & ParamGenre & "' OR Genre2 = '" & ParamGenre & "' OR Genre3 = '" & ParamGenre & "'"
            End If
     
            'Construit d'abord Expression en fonction du titre
            If ParamTitre <> "" Then
                Expression(2) = "Titre = '" & ParamTitre & "'"
            End If
     
            'Construit Expression en fonction de l'acteur
            If ParamActeur <> "" Then
                Expression(3) = "Acteur1 = '" & ParamActeur & "' OR Acteur2 = '" & ParamActeur & "' OR Acteur3 = '" & ParamActeur & "' OR Acteur4 = '" & ParamActeur & "'"
            End If
     
            'Construit Expression en fonction du réalisateur
            If ParamRealisateur <> "" Then
                Expression(4) = "Realisateur = '" & ParamRealisateur & "'"
            End If
     
            'Construit Expression en fonction de l'année
            If ParamAnnee <> "" Then
                Expression(5) = "Annee = '" & ParamAnnee & "'"
            End If
     
            'Construit Expression en fonction de la limite d'age
            If ParamLimiteAge <> "" Then
                Expression(6) = "LimiteAge = '" & ParamLimiteAge & "'"
            End If
     
            'Réunit l'expression globale
            For k = 1 To 6 Step 1
                If Expression(k) <> "" Then
                    If Expression(0) <> "" Then
                        Expression(0) = "(" & Expression(0) & ") AND (" & Expression(k) & ")"
                    Else
                        Expression(0) = Expression(k)
                    End If
                End If
            Next
     
            Return DttBibliotheque.Select(Expression(0), "Titre ASC")
     
            Exit Function
     
        End Function
    Pourtant, cela me semble juste.

    Il me met : System.Data.EvaluateException*: 'Impossible d'effectuer une opération '=' sur System.Int32 et System.String.'

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Sans fouiller beaucoup, je vois que tu as des champs de type numérique (LimiteAge, Annee). Si ces champs sont effectivement numériques, il faut enlever leurs apostrophes.
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            If ParamAnnee <> "" Then
                Expression(5) = "Annee = " & ParamAnnee
            End If
     
            'Construit Expression en fonction de la limite d'age
            If ParamLimiteAge <> "" Then
                Expression(6) = "LimiteAge = " & ParamLimiteAge
            End If

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour

    Outre la question des types numériques dont je parlais dans mon message précédent, il existe un autre problème dans ton code.
    Lorsque tu écris ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Réunit l'expression globale
    '.....
                    If Expression(0) <> "" Then
                        Expression(0) = "(" & Expression(0) & ") AND (" & Expression(k) & ' ......
    Je suppose que tu veux faire une concaténation des Expressions mais avec AND tu réalises une valeur logique qui n'a rien à voir avec le but cherché. Sauf erreur de ma part sur ton intention algorithmique, il faut remplacer AND par &.
    ...

  8. #8
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    En repassant par là, je relis mon dernier message et je constate qu'il tout-à-fait inapproprié. Abus d'apéro ... je ne sais plus.
    Merci de ne pas tenir compte de ce message à propos du AND.
    ....

  9. #9
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    Bonjour,

    En repassant par là, je relis mon dernier message et je constate qu'il tout-à-fait inapproprié. Abus d'apéro ... je ne sais plus.
    Merci de ne pas tenir compte de ce message à propos du AND.
    ....


    Tu m'as fait bien rire avec ton apéro !

    Merci en tout cas de toutes vos aides.
    En fait, j'ai trouvé ce qui allait pas. Ce sont les parenthèses. Je mettais des espaces et du coup, il comprenait pas.
    Ca pas maintenant.

    Mais en lisant Phil, il a raison, ça ne devrait pas passer quand même car j'ai mis des '' autour de valeurs numériques.
    Ca devrait planter.
    Et pourtant, en rectifiant les espaces entre les parenthèse, ça passe quand-même...

    En tout cas, j'ai mis au propre ma fonction :

    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
    Public Function FiltreBibliotheque(ByVal ParamGenre As UShort, ByVal ParamTitre As String, ByVal ParamActeur As UShort, ByVal ParamRealisateur As UShort, ByVal ParamAnnee As UShort, ByVal ParamLimiteAge As UShort) As DataRow()
     
            'Instancie l'expression à construire
            Dim Expression(6) As String
            'Instancie un compteur
            Dim k As Byte
     
            'Construit Expression en fonction du genre
            If ParamGenre > 0 Then
                Expression(1) = "Genre1 = " & CStr(ParamGenre) & " OR Genre2 = " & CStr(ParamGenre) & " OR Genre3 = " & CStr(ParamGenre)
            End If
     
            'Construit d'abord Expression en fonction du titre
            If ParamTitre <> "" Then
                Expression(2) = "Titre = '" & ParamTitre & "'"
            End If
     
            'Construit Expression en fonction de l'acteur
            If ParamActeur > 0 Then
                Expression(3) = "Acteur1 = " & CStr(ParamActeur) & " OR Acteur2 = " & CStr(ParamActeur) & " OR Acteur3 = " & CStr(ParamActeur) & " OR Acteur4 = " & CStr(ParamActeur)
            End If
     
            'Construit Expression en fonction du réalisateur
            If ParamRealisateur > 0 Then
                Expression(4) = "Realisateur = " & CStr(ParamRealisateur)
            End If
     
            'Construit Expression en fonction de l'année
            If ParamAnnee > 0 Then
                Expression(5) = "Annee = " & CStr(ParamAnnee)
            End If
     
            'Construit Expression en fonction de la limite d'age
            If ParamLimiteAge > 0 Then
                Expression(6) = "LimiteAge = " & CStr(ParamLimiteAge)
            End If
     
            'Réunit l'expression globale
            For k = 1 To 6 Step 1
                If Expression(k) <> "" Then
                    If Expression(0) = "" Then
                        Expression(0) = Expression(k)
                    Else
                        Expression(0) = "(" & Expression(0) & ") AND (" & Expression(k) & ")"
                    End If
                End If
            Next
     
            Return DttBibliotheque.Select(Expression(0), "Titre ASC")
     
            Exit Function
     
        End Function
    Je pense que ça doit être bon...

  10. #10
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Héhé...

    Pour ce qui est des numériques, ils peuvent être réellement numériques dans la DB et se trouver sous forme de chaînes dans le DataTable, les requêtes sur la DB ne retournant (je crois) que des chaînes.
    Si les types n'ont pas été explicités pour les champs du DataTable, ce sont des chaînes.

    ...

  11. #11
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    En gros, si tu as raison, je m'ennuie pour rien alors ?

    Mes DataTables héritant de ma base de données contienent que des chaines ?
    Alors, je fais tout pour rien.
    J'ai juste à traiter des strings...

    Faut que je teste cela...

  12. #12
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    Rebonjour,

    Du coup, je viens de tester et ma DataTable me renvoie bien type soit string, soit int32 selon le champs.
    Donc Fill garde bien le type de données de la base de données initiale.

  13. #13
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Tu as raison !
    Probablement que Option Strict Off permettant les conversions implicites cache cette réalité.... J'aurais dû me souvenir du fonctionnement de Fill.
    Mais alors la meilleure solution pour toi n'est-elle pas d'utiliser la surcharge des fonctions concernées ? Elle nécessitera moins de chipotages algorithmiques que l'ajout de paramètres, même Optional
    Bonne journée

  14. #14
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    C'est possible Phil.
    Je code toujours en Option Strict On pour me forcer à bien écrire les conversions.

    Je vais me renseigner sur la surcharge car je ne connais pas le principe.

    Merci de ton aide très précieuse.

  15. #15
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bravo de tout coder en Strict On !

    La surcharge c'est l'dxl'exemple que je t'ai envoyé avec les signatures différentes. Tu peux écrire autant de variantes qu'il te plait.


    ...

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 072
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 072
    Points : 1 566
    Points
    1 566
    Par défaut
    Au fait, Exit Function à la fin ne sert à rien, on sort de la fonction par le return juste avant

  17. #17
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    J'ai fais plusieurs tests.

    Pour faire simple, ma base de données OLE contient des données Int32 et String.
    La méthode Fill du DataAdapter remplit alors le DataTable avec ce type de données initial (String ou Int32).

    Si on crée par le code un DataTable de toute pièce avec des champs de type String et UInt16 (UShort) pour gagner de la place en mémoire, la méthode Fill convertit bien les données Int32 en UINT16 au moment du remplissage du DataTable.

    De même, il faut également que les entêtes du DataTable créé soient exactement les mêmes que ceux de la base de données, sinon la méthode Fill ne remplit pas ce champ là dans le DataTable.

    Voilou, voilou

    Du coup, je vais en début d'application, créer des DataTables (String et UShort) et les remplir.

  18. #18
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    La table que tu charges de la DB n'est-elle pas toujours la même ? Auquel cas, un seul DataTable suffirait avec les champs numériques et les champs chaines, chacun à le bonne place, les datas viendraient eux aussi à leur bonne place grâce à Fill (sans qu'il soit nécessaire de créer préalablement le DataTable, le DataAdapter le fait avec Fill).

    J'avoue que je ne comprends pas trop pourquoi ces différences de type te donnent des soucis.

    ...

  19. #19
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 411
    Points : 2 162
    Points
    2 162
    Par défaut
    Bonjour,
    peut importe la méthode au final les champs du datatable sont forcément typé!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select Case MyTable.Columns(N°COLONNE).GetType.Name.ToString
        Case "DBNull" : 'Traitement
        Case "Boolean" :  'Traitementing() : End Try
        Case "Decimal", "Int32", "Int64", "Double" : 'Traitement
        Case "DateTime" : Try : 'Traitement
        Case "Byte[]"'Traitement
        Case Else : 'Traitement
    End Select

  20. #20
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2022
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2022
    Messages : 76
    Points : 56
    Points
    56
    Par défaut
    En fait, pour être clair, j'ai une base de données faite de tables liées entre elles. Il y a une table générale et des tables qui s'y raccrochent.
    Clés, valeurs numériques et string.

    La base de données, je l'ai faite sous access. Pas sûr que ce soit le meilleur moyen. Mais que ça à ma disposition.
    Du coup, toutes les valeurs numériques (clés et num) sont des Int32.
    Et quand je récupère avec DataAdapter.Fill les données dans un DataTable, il crée des champs soit String soit Int32 (logique jusque-là).

    Ce qu'il y a, c'est que j'aurais jamais autant de lignes dans mes tables de la base de données, et aussi les valeurs numériques n'iront jamais aussi loin.
    Je peux très bien limiter toutes ces valeurs numériques à UShort (juste 2 octets en mémoire au lieu de 4 octets pour un Int32).

    Du coup, je voulais optimiser mon application et traiter toutes mes données numériques en type UShort.
    C'est pour cela que je proposais de créer des tables avec des types UShort et String et de les remplir avec le Fill du DataAdapter.

    Comme cela après, je n'ai en mémoire que des UInt16 (2 octets), prend moins de ressources et pas besoin à l'ordinateur de conversion CUShort ou CInt dans l'autre sens.

    Vous en pensez quoi?


    Pour le bout de code, je l'ai copier/coller dans ma bibliothèque de cours que je me suis créé, ça peut resservir et c'est très intéressant. Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2003] Problème de test sur plusieurs champs dans une table
    Par Cavart dans le forum Access
    Réponses: 1
    Dernier message: 23/11/2011, 15h51
  2. [AC-2003] Tri sur plusieurs champs dans zone de liste
    Par Orakle dans le forum IHM
    Réponses: 3
    Dernier message: 18/06/2009, 10h12
  3. [HTML] mettre un DIV sur plusieurs champs d'une table
    Par Nixar dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2007, 16h13
  4. Comparer 2 ou plusieurs champs dans 1 table access
    Par stefan13 dans le forum VBA Access
    Réponses: 9
    Dernier message: 30/07/2007, 14h42
  5. Effacer plusieurs champs dans une table
    Par kurkaine dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/08/2006, 09h22

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