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 6 et antérieur Discussion :

Comment lancer une procedure lors d'une modification de valeur d'une variable ?


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Comment lancer une procedure lors d'une modification de valeur d'une variable ?
    Bonjour,
    J'ai une question a poser à propos d'un programme en VBA.
    J'ai deja posé la question dans le forum VBA, et on m'a conseillé d'aller voir un forum vb. Mais je crois que ce problème peut tout aussi bien s'appliquer au VB.

    Voici don ma question reformulée (ou copiée-collée).

    Je cherche un moyen de lancer une procedure qui se trouve dans un module annexe, lorsqu'une variable voit sa valeur modifiée dans le programme principal.

    Plus en détails :

    Dans mon module annexe, j'y ai défini un type de varible personalisé, et des procedures particulières que j'aimerai voir executées lorsque dans le programme principal, un élement de ma variable "maison" , est modifié.

    Je m'explique, mon module annexe (qui pourrait aussi bien etre une macro competmentaire) est un module de calculs de nombres complexes. (oui je sais excel integre une macro complementaire, mais j'avais un peu de mal a l'utiliser, alors j'ai voulu le réecrire, et puis c'est plus marrant comme ca). Jusque là, il y avait tout ce qui falait pour manipuler les nombres complexes, lorsqu'ils étaient définis en réel/imaginaire. Mais pas en module phase.
    Alors dans ma variable "complex" (voir ci-dessous), j'ai voulu ajouter les elements .m (module) et .p (phase).
    Et ce que je voulais, c'etait que les elements .m et .p soient automatiquement calculés dès que .R et .i se voyaient affecté dans mon programme principal.
    Et vice-versa, que .R et .i soient calculés lorsque .m et .p sont modifiés.
    Tout cela de manière totalement transparente pour le programme principal.

    D'ou l'idée du lancement d'un procedure lorsqu'une variable est modifiée.

    Je suis débutant et je ne sais pas comment gerer les evenements.
    C'est pour cela que je voulais savoir à quoi pouvait ressembler le code qui permet de lancer une procedure, lorsqu'une variable est modifiée.

    J'ai trouvé ce post, mais je ne sais pas comment utiliser les "set et les "get" pour arriver à mes fins.
    Est-ce que je devrai necessairement avoir recours à la création d'une classe ?

    D'avance, Merci.



    Pour info, ci-dessous, le tout debut de ma macro complémentaire avec la variable type complexe, et les deux procedures qui doivent se lancer sur modification des élements de la variable.

    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
    Type Complex
    R as double        'Partie Réele
    i as double        'Partie Imaginaire
    m as double        'Module
    p as double        'Phase
    end type
     
    Sub Qd_r_ou_i_est_modifié()
    With complex
    .m = Sqr(r^2+i^2)[
    .p = atn(i/r)
    End With
    End sub
     
    Sub Qd_m_ou_p_est_modifié()
    With complex
    .r = m * cos(p)
    .i = m * sin(p)
    End With
    End sub

  2. #2
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Ben tu mémorises m et p par exemple dans 2 variables appelées Memom et Memop avant de leur afecter une nouvelle valeur.
    Après ton affectation, tu compares Memom avec m et Memop avec p si ce n'est plus la meme chose tu lances ta procédure pour calculer R et i.

    Pareil dans l'autre sens pour R et i

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bonjour OhMonBato, et merci pour ta réponse.

    C'est effectivement l'idée, mais j'aimerais que le test de nouvelle afectation se fasse integralement dans un autre module.

    Mon projet est clairement separé en 2 parties :
    - le module de calculs simples en entre complexes cad, declaration de la variable type, fontion et procedures pour faire tous les calculs (+,-,/, exp, log, etc... et la conversion automatique réel-imaginaire/module-phase)
    - le programme principal qui necessite l'utilisation de variables complexes mais de maniere transparente. C'est à dire, que dans le programme principal, on puisse modifier des variables complexes, et que cela provoque immediatement le calcul de conversion dans l'autre module.
    Par exemple, la seule ligne (avec X qui a été declaré comme "complex" auparavant) :
    ecrite dans le programme principal, provoque immediatement l'execution d'une procedure de conversion dans le module annexe.

    Voila, j'espere m'exprimer suffisament clairement.
    Encore merci d'avance.

  4. #4
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Ben tu appelles la procédure de ton module annexe après avoir écrit X.r = 99

    J'avoue que je vois pas trop bien où est le pb.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Justement, c'est cela que je voudrait eviter,
    je voudrais que la procedure soit automatiquement lancée après une affectation, sans ajouter d'appel de procedure ou quoi que ce soit (cela alourdirai considerablement le programme principal qui a très largement recours à des calculs entre nombres complexes, et affecterai grandement sa lisibilité).
    Je pense que c'est possible avec la gestion de l'evenement : modification de la valeur d'une variable.
    Et je suis en train de chercher comment mettre cela en oeuvre.
    Merci pour l'interet que tu portes a ma question.

  6. #6
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Tu me tiendras au courant dès que tu pourras lancer une procédure sans l'appeler par un moyen quelconque, je suis vivement intéressé
    Puisque de toute façon tu DOIS faire ce calcul, il va bien falloir l'appeler d'une manière ou d'une autre, en quoi est ce que ça alourdit le programme ou nuit à sa lisibilité ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    eh bien le programme comporte de nombreuses lignes de calculs sur complexes (en fait en dehors des declarations de variables et de procedures, tout le programme n'est que calculs de complexes alors, je voulais eviter de rajouter une ligne(si petite soit-elle) après chaque calcul).
    Et j'avoue, il y a un peu de coqueterie la dedans, le programme aura un aspet plus propre de cet maniere.
    Enfin dans une optique d'apprentissage, je pense que cette recherche m'aura permis d'en connaitre un peu plus sur la programation, d'autant que je m'y suis mis depuis peu, et que ca m'interesse grandement.

    Penses-tu que c'est tout de meme possible ?

  8. #8
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Personnellement, non je ne pense pas, la procédure qui s'exécute automatiquement parce que on en a envie, je ne sais pas faire.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Meme si je ne comprends pas tout bien, je crois que ce post parle justement de cela.
    Mais comme c'est du .net, je me demande si c'est également possible en VB/VBA.
    Qu'en pensez vous ?

  10. #10
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 627
    Points
    16 627
    Par défaut
    Un truc, comme sa, pas des plus propre peut être mais qui fonctionne.
    Poser un Label, le rendre invisible et, utiliser son evenement Change.
    Donc dans la procedure Private Sub Labelx_Change(), y plasser une routine qui traite de ce que l'on veut faire, suivant le Caption du dit label.
    Il suffit, dans le code d'attribuer une lettre, un chiffre ou autres, à n'importe quel endroit du programme ( Labelx = "A" ), le traitement ce faisant en rapport de ce nouveau texte attribuer.

  11. #11
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Là encore je vais peut etre dire une grosse betise mais tant pis, si j'ai tort, j'apprendrai

    Je me suis amusé à faire ce 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
     
    Dim I As Long
    Dim J As Long
     
    Private Sub Command1_Click()
     
    Print Timer
    For I = 1 To 10000000
    'Méthode 1, mettre ligne suivante en remarque pour effectuer méthode 2
    '  Label1 = I
    'Méthode 2, mettre ligne suivante en remarque pour effectuer méthode 1
      CalcI
    Next I
    Print Timer
     
    End Sub
     
    Public Sub CalcI()
    'Méthode 2
    J = I + 4
    End Sub
     
    Private Sub Label1_Change()
    'Méthode 1
    J = I + 4
    End Sub
    Avec la méthode 1 (label1 est invisible), il faut environ 23 secondes sur mon PC, avec la méthode 2 il faut environ 2 secondes...

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Tout a fait d'accord avec OhMonBato, pour ma part je préfère faire un programme "crade" et moins bien lisble mais rapide plutot qu'un code beau et lent? cqfd....

  13. #13
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 105
    Points : 16 627
    Points
    16 627
    Par défaut
    la question de ton post est
    Comment lancer une procedure lors d'une modification de valeur d'une variable ?
    FormOuEstPoser.Labelx = "MavariableQuiChange", (declanchement de Private Sub Label1_Change())

    Pas besoin de Timer, et l'evenement est bien lancé pour la modification de valeur d'une variable

  14. #14
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Citation Envoyé par mitch97
    Tout a fait d'accord avec OhMonBato, pour ma part je préfère faire un programme "crade" et moins bien lisble mais rapide plutot qu'un code beau et lent? cqfd....
    Ha mais pas du tout ! Il est pas crade et illisible du tout mon code
    Je trouve personnellement que c'est beaucoup plus clair de voir l'appel de la procédure que de voir la mise à jour d'un contrôle Label, mais y'a autant de moyens d'écrire un code qui marche qu'il y a de gens à essayer de l'écrire

  15. #15
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    j'ai pas dis que ton code été crade
    j'ai juste dis que je préféré un code moi bien organisé et plus rapide que le contraire.

  16. #16
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut Utiliser les classes.
    Bonjour,

    Comment lancer une procedure lors d'une modification de valeur d'une variable ?
    Je pense que les classes peuvent te permettre ce genre de chose a travers les propriétés.

    Voici le code qui pourrait correspondre (écrit en vb5) je ne sais pas si VBA accepte. (note:je l'ai écrit sans vb, une petite erreur n'est donc pas impossible, mais tu as le principe)

    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
    ' classe  (vb5) nom du fichier classComplexe.cls (Attribute VB_Name = "classComplexe")
    ' -- variables de la classe --
    private mdblComplex_R as double        'Partie Réele
    private mdblComplex_i as double        'Partie Imaginaire
    private mdblComplex_m as double        'Module
    private mdblComplex_p as double        'Phase
     
    ' -- propriétées de la classe --
    '----------------------------------------------------------------
    Public Property Get Complex_R() As double
      Complex_R = mdblComplex_R
    End Property
     
    Public Property Let Complex_R(valeur as double)
      mdblComplex_R = valeur
      call Qd_r_ou_i_est_modifié ' la procédure de calcul
    End Property
     
    '----------------------------------------------------------------
    Public Property Get Complex_i() As double
      Complex_i = mdblComplex_i
    End Property
     
    Public Property Let Complex_i(valeur as double)
      mdblComplex_i = valeur
      call Qd_r_ou_i_est_modifié ' la procédure de calcul
    End Property
     
    '----------------------------------------------------------------
    Public Property Get Complex_m() As double
      Complex_m = mdblComplex_m
    End Property
     
    Public Property Let Complex_m(valeur as double)
      mdblComplex_m = valeur
      call Qd_m_ou_p_est_modifié() ' la procédure de calcul 2
    End Property
     
    '----------------------------------------------------------------
    Public Property Get Complex_p() As double
      Complex_p = mdblComplex_p
    End Property
     
    Public Property Let Complex_p(valeur as double)
      mdblComplex_p = valeur
      call Qd_m_ou_p_est_modifié() ' la procédure de calcul 2
    End Property
     
     
    ' -- méthodes de la classe -- elles ne sont utilisé que dans la classe
    '----------------------------------------------------------------
    private Sub Qd_r_ou_i_est_modifié()
      On Error GoTo GereErreur  'gestion des erreurs de VB
      mdblComplex_m = Sqr(mdblComplex_R^2+mdblComplex_i^2)[
      mdblComplex_p = atn(mdblComplex_i/mdblComplex_R)
      exit sub
    GereErreur:
      ' traitement d'erreur
    End sub
     
    '----------------------------------------------------------------
    private Sub Qd_m_ou_p_est_modifié()
      On Error GoTo GereErreur  'gestion des erreurs de VB
      mdblComplex_R = mdblComplex_m * cos(mdblComplex_p)
      mdblComplex_i = mdblComplex_m * sin(mdblComplex_p)
      exit sub
    GereErreur:
      ' traitement d'erreur
    End sub
     
    '----------------------------------------------------------------
    ' initialisation ' automatique à la création de la classe
    Private Sub Class_Initialize()
      mdblComplex_R = 0 'Partie Réele
      mdblComplex_i = 0 'Partie Imaginaire
      mdblComplex_m = 0 'Module
      mdblComplex_p = 0 'Phase
    End Sub

    dans ta zone déclaration de variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Global Complex As classComplexe  ' défini la variable
    Au début de ton programme de calcul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Complex = New ClassComplex  ' création de la classe
    A la fin de ton programme de calcul
    Pour utiliser (hop, une ligne et tout se calcule. Enfin j'espère)
    En plus quant tu tapes le point, vb te propose les propriétés défini dans ta classe (si tu ne l'as pas c'est que tu as une erreur)

    Tu pourrais remplacer tes procédures par des fonctions qui renvoie s'il y a eu une erreur. En cas d'erreur, tu pourrais ainsi remettre ta variable dans son état initial dans la propriété.

    A vérifier si sous vb6 les "Property Let" ne sont pas devenu des "Property Set". je ne sais pas.

    A+, Hervé.

  17. #17
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut


    N'étant absolument pas familiarisé avec la notion de classe (c'est dire mon niveau..) je n'avais pas du tout pensé à ça mais grâce à ton exemple, j'en vois toute l'utilité. Je vois ça un peu comme une création de contrôle sans "existence physique" si je peux dire.
    Je vais me coucher un brin moins bête ce soir

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Cela se rapproche d'un objet puisque l'on groupe données et code qui les manipule, mais n'en a pas toutes les possibilités (pas d'héritage, ...)
    Le principe étant d'accéder (depuis l'extérieur de la classe) aux variables (m...) par les propriétés pour garantir l'intégrité.

    D'ailleur
    OhMonBato indique:
    Je vois ça un peu comme une création de contrôle sans "existence physique" si je peux dire.
    J'utilise cette façon de faire pour créer un "contexte de travail" ou je regroupe tous les éléments qui seront général à mon application.
    Comme ça je n'ai qu'une seule variable globale (classe contexte) à travers laquelle j'accède à tous les éléments généraux dont je peux avoir besoin dans mon application.

    Espérant que cela (les classes) pourra-t-être utile par la suite.

    Ca fait plaisir de partager les connaissances.

    A+, Hervé.

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    WOuah

    Alors dans l'ordre, merci infiniment à.. vous tous.
    Nan franchement ca fait super plaisir de voir toute cette mobilisation.
    Rien de plus agréable que de discuter avec des passionés.
    J'ai découvert la programation il y a un mois, et plus j'avance, plus ca m'eclate, surtout lorsque l'on dévouvre une comunauté de super motivés.

    Je vais decrypter de ce pas tout ce que vous avez écrit.
    Dès que j'arrive à comprendre et à mettre en route mon truc, je vous donne tout mon programme.
    Merci encore.

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Juste pour dire que la solution de Hérvé me parait la plus appropriée à celle que je cherche.
    Merci infiniment a toi, tu m'enleve un tronc d'arbre du pied.
    Je travaille dessus actuellement, (j'essaye de comprendre le fonctionnement des classes au passage).
    Et dès que je termine, je vous donne mon truc fini (et j oublie pas le tag "résolu").
    Merci encore.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/03/2010, 11h44
  2. Comment choisir le seuil lors de la recherche d'images dans une base
    Par mobi_bil dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 13/02/2009, 02h35
  3. Réponses: 19
    Dernier message: 05/05/2008, 16h45
  4. [VBA-E]Comment lancer une procedure lors d'un changement de variable ?
    Par RogerLapin dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/03/2007, 09h56
  5. Lancer une macro lors de la modif d'une case excel
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/08/2006, 12h19

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