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

IHM Discussion :

Création d'utilisateurs : simplication de code et suppression de la limite


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 61
    Points
    61
    Par défaut Création d'utilisateurs : simplication de code et suppression de la limite
    Bonjour, pensez-vous qu'il est possible de simplifier ce code et par la même occasion ne pas me limiter à 5 répétitions ?

    J'ai un formulaire qui me permet d'ajouter un utilisateur pour cela je fonctionne de la manière suivante :

    Texte2 : j'encode le nom de l'utilisateur
    Texte4 : J'encode le prénom de l'utilisateur
    Modifiable8 : je sélectionne le groupe auquel il appartient
    Commande1 : je clique sur la commande et il génére les champs suivants
    Mail : qui est constituée automatiquement de nom.prénom@domaine ( cas de doublon "homonyme" je modifierai l'adresse mail manuellement)
    Login : qui est composée des 4 premières lettres du nom de famille + les deux premières lettre prénom + 01(par défaut)
    exemple albert dupont = albedu01
    Mot de passe généré automatiquement via un module.

    la répétion de ce code sert dans le cas ou j'aurais plusieurs albert dupont (qui seront alors distingué au besoin par l'adresse mail)
    par exemple :

    Albert dupont ( albedu01)
    Albert durant (albedu02)
    ...

    Etant novice, c'est la seule solution que j'ai trouver pour gérer les doublons de login.

    je pense que la procédure est bonne, mais qu'il y a moyen de modifier et de simplifier l'algorythme pour avoir moins de répétitions.


    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
    Private Sub Commande1_Click()
    ' on vérifie que les zones de texte de sont pas vides
    If IsNull(Me.Texte2) Then
        MsgBox "Veuillez entrer le nom de l'utilisateur à ajouter !", vbInformation
        Me.Texte2.SetFocus
        Exit Sub
    End If
    If IsNull(Me.Texte4) Then
        MsgBox "Veuillez entrer le prénom de l'utilisateur à ajouter !", vbInformation
        Me.Texte4.SetFocus
        Exit Sub
    End If
    If IsNull(Me.Modifiable8) Then
        MsgBox "Veuillez sélectionner le groupe auquel appartient l'utilisateur à ajouter !", vbInformation
        Me.Modifiable8.SetFocus
        Exit Sub
    End If
    If Not IsNull(DLookup("U_name and U_Firstname", "T_user", "Texte2.value = T_user.U_name and Texte4 = U_firstname")) Then
       If MsgBox("Un utilisateur est déjà enregistré sous ce nom, voulez-vous malgré tout continuer?", vbYesNo + vbInformation, "doublon utilisateur") = vbNo Then
       Me.Texte2 = ""
       Me.Texte4 = ""
       Me.Modifiable8 = ""
       Me.Texte6 = ""
       Me.Texte10 = ""
       Me.Texte12 = ""
       Me.Texte2.SetFocus
       Else
       Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "01"
            If Not IsNull(DLookup("Login", "T_user", "Texte10.value = T_user.Login")) Then
            Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "02"
                If Not IsNull(DLookup("Login", "T_user", "Texte10.value = T_user.Login")) Then
                Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "03"
                    If Not IsNull(DLookup("Login", "T_user", "Texte10.value = T_user.Login")) Then
                    Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "04"
                        If Not IsNull(DLookup("Login", "T_user", "Texte10.value = T_user.Login")) Then
                        Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "05"
                        Else
                        Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
                        Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
                        Me.Texte6 = LCase$(Nz(Texte6))
                        Texte6 = EnleveAccent(Texte6)
                        Texte12 = MOTDEPASSE
                        End If
                    Else
                    Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
                    Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
                    Me.Texte6 = LCase$(Nz(Texte6))
                    Texte6 = EnleveAccent(Texte6)
                    Texte12 = MOTDEPASSE
                    End If
                Else
                Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
                Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
                Me.Texte6 = LCase$(Nz(Texte6))
                Texte6 = EnleveAccent(Texte6)
                Texte12 = MOTDEPASSE
                End If
            Else
            Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
            Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
            Me.Texte6 = LCase$(Nz(Texte6))
            Texte6 = EnleveAccent(Texte6)
            Texte12 = MOTDEPASSE
            End If
        End If
    Else
    Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "01"
        If Not IsNull(DLookup("Login", "T_user", "Texte10.value = T_user.Login")) Then
        Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "02"
            If Not IsNull(DLookup("Login", "T_user", "Texte10.value = T_user.Login")) Then
            Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "03"
                If Not IsNull(DLookup("Login", "T_user", "Texte10.value = T_user.Login")) Then
                Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "04"
                    If Not IsNull(DLookup("Login", "T_user", "Texte10.value = T_user.Login")) Then
                    Texte10 = Left(Texte2, 4) + Left(Texte4, 2) + "05"
                    Else
                    Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
                    Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
                    Me.Texte6 = LCase$(Nz(Texte6))
                    Texte6 = EnleveAccent(Texte6)
                    Texte12 = MOTDEPASSE
                    End If
                Else
                Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
                Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
                Me.Texte6 = LCase$(Nz(Texte6))
                Texte6 = EnleveAccent(Texte6)
                Texte12 = MOTDEPASSE
                End If
            Else
            Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
            Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
            Me.Texte6 = LCase$(Nz(Texte6))
            Texte6 = EnleveAccent(Texte6)
            Texte12 = MOTDEPASSE
            End If
        Else
        Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
        Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
        Me.Texte6 = LCase$(Nz(Texte6))
        Texte6 = EnleveAccent(Texte6)
        Texte12 = MOTDEPASSE
        End If
    End If
    End Sub
    merci pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Deja je t'invite fortement a donner des noms significatifs a tes controles (ex : NomUtlisateur a la place de Texte2).
    Ensuite en VBA Access, .Value est la propriete par defaut il n'est donc pas indispensable de la taper.
    MaVariableTexte=TexteX c'est la meme chose que MaVariableTexte=TexteX.Value.

    Cela va deja rendre ton code plus comprehensible et plus "leger".

    Et pour repondre a ta question, je ferai une fonction du type :

    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
    public function CaluclerLogin(prmNom as string, prmPrenom as string) as string
       dim result as string
       dim prefixeLogin as string : perfixeLogin=left(prmNom,4) & left(prmPrenom,2)
     
       '=== Cherche un login libre
       dim cpt as long
       loop
          cpt=cpt+1
          result=prefixeLogin & format(cpt,"00")
       while not IsNull(Dfirst("Login","tblUtilisateur","[Login]=""" & result & """")) and cpt<100 'Boucle tant que le login calcule existe et que le compteur ne depasse pas 2 chiffres
       '--- Cherche un login libre
     
       if cpt=100 then
           msgbox "Impossible de calculer le login", vbExclamation
           result-""
       end if
     
       CaluclerLogin=result
    end if
    Ce code suppose que tu es le seul a creer des utilisateurs.
    Si plusieurs personnes crees des utilisateurs en meme temps, le code risque de retourner 2 fois le meme login.
    La probablite est faible mais elle existe.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    hello,

    merci pour ta réponse,

    je devrais être le seul à ajouter des utilisateurs, ou 2 maximum et en plus, pour avoir un doublon de login il faudrait que nous soyons plus plusieurs à encoder un utilisateur portant le même login en même temps ? c'est ainsi dire impossible d'autant plus que l'ajout d'utilisateurs sera occasionnel. Mais je veux faire les choses comme il le faut.

    pour en revenir à nos moutons et étant toujours novice, même si chaque jour j'apprend de nouvelles choses.

    cette fonction serait à placer dans un module ou à la place d'une partie de fonction ?

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Comme elle est "public" tu peux la mettre n'importe ou et elle fonctionnera.
    Ceci dit, il est recommandé de regrouper les choses de manière "logique", donc je la mettrai à l'endroit où tu as mis ton code actuel.
    Si tu fais cela, puisqu'elle est définie et utilisée dans le même module et qu'il y a 0 chance que tu l'utilises ailleurs, tu peux la définir Private au lieu de Public.
    Comme cela elle deviendra invisible de l’extérieur et personne ne pourra s'en servir.
    C'est toujours une bonne chose de commencer à "cacher" l’implémentation comme cela tu ne risques pas que d'autres modules dépendent de cette function.
    Si tu as à la modifier, cela limite les impacts à ce module et c'est donc plus facile à tester.
    Si tu t'apercois plus tard que tu as besoin de cette fonction ailleurs, tu peux la rendre "public" et elle deviendra disponible pour tous.

    Pour l'utiliser, c'est assez simple, il suffit d’écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Login=CaluclerLogin(Me.Nom, Me.Prenom)
    A la place de tout ton code d'assignation de Texte10.
    Dans mon exemple j'ai remplacé tes noms (Texte2 et Texte4) pour rendre la chose plus compréhensible.
    Et le Me. désigne le formulaire courant.

    Pour le risque TRES TRES faible de doublon, la solution la plus simple est de définir un index unique sur ton champ Login dans ta table des utilisateurs.
    Si tu essayes d'enregistrer un second login identique, Access va te retourner une erreur que tu peux gérer dans le formulaire (événement "sur erreur").
    Tu peux décider de ne pas gérer toi-même l'erreur et tu auras alors le message standard d'Access qui te dit en gros "Y-a un doublon dans tes données" sans plus de précision.
    Vu la faible probabilité et que tu débutes, je pense que tu peux rester avec cela.

    Pour l'index unique, il faut
    1. Aller dans ta table en mode conception.
    2. Appuyer sur l'icone index (cette avec l’éclair).
    3. Dans l’écran qui s'ouvre tu saisis sur une ligne vierge
    4. dans la 1ere colonne : le nom de l'index (ex : UniciteLogin).
    5. dans la 2ieme colonne : le nom du champ (ex : Login).
    6. en bas en dessous des lignes, tu coches "unique".


    Sauvegarde.

    Et voila jamais tu n'auras de doublon si tu renseignes le champ login.

    Enfin, je pense que tu as une erreur dans ton code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Texte10.value = T_user.Login"
    Ce qui est dans les guillemets n'est pas interprété par Access, donc il faut sans doute écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    """ & Texte10 & """ = T_user.Login"
    La je pense que c'est toujours nul ou que tu as une erreur à l’exécution.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 94
    Points : 61
    Points
    61
    Par défaut
    Hello,

    j'ai essayé, j'ai une erreur de compilation "boucle sans Do".

    j'ai essayé plusieurs choses mais je ne connais absolument pas la fonction "loop".

    En essayant plusieurs choses, pour le le Do, j'ai eu aussi une erreur de compilation "While sans Wend".

    - tout le code se trouve dans le VBA du formulaire (pas de module)
    - La partie fonction ne fait pas partie de l'action sur click commande 1

    par contre j'ai aussi deux petites questions

    1: ligne 13 de la fonction (While)... "Login" et "[Login]" correspondent au champ de la table T_User ou à la zone de Texte du formulaire?
    2: Ligne 20 de la fonction (End If), je vois que l'on ouvre le If en ligne 17 , puis on le ferme en ligne 20, puis on le ferme encore en ligne 24. Ne devrais pas plutot mettre Else en ligne 20 ?


    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
     
     
    Private Function CaluclerLogin(Texte2 As String, Texte4 As String) As String
           Dim result As String
           Dim prefixeLogin As String: perfixeLogin = Left(Texte2, 4) & Left(Texte4, 2)
     
           '=== Cherche un login libre
           Dim cpt As Long
           Loop
              cpt = cpt + 1
              result = prefixeLogin & Format(cpt, "00")
     
           While Not IsNull(DFirst("Login", "T_User", "[Login]=""" & result & """")) And cpt < 100 'Boucle tant que le login calcule existe et que le compteur ne depasse pas 2 chiffres
     
           '--- Cherche un login libre
     
         If cpt = 100 Then
               MsgBox "Impossible de calculer le login", vbExclamation
               result -""
           End If
     
        CaluclerLogin = result
     
           End If
    End Function
    puis j'ai modifié mon code existant comme ceci

    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
    Private Sub Commande1_Click()
    'on vérifie que les zones de textes ne sont pas vide
    If IsNull(Me.Texte2) Then
        MsgBox "Veuillez entrer le nom de l'utilisateur à ajouter !", vbInformation
        Me.Texte2.SetFocus
        Exit Sub
    End If
    If IsNull(Me.Texte4) Then
        MsgBox "Veuillez entrer le prénom de l'utilisateur à ajouter !", vbInformation
        Me.Texte4.SetFocus
        Exit Sub
    End If
    If IsNull(Me.Modifiable8) Then
        MsgBox "Veuillez sélectionner le groupe auquel appartient l'utilisateur à ajouter !", vbInformation
        Me.Modifiable8.SetFocus
        Exit Sub
    End If
    'on recherche dans la table si un autre utilisateur porte le même nom et le même prénom (homonyme)
    If Not IsNull(DLookup("U_name and U_Firstname", "T_user", "Texte2.value = T_user.U_name and Texte4 = U_firstname")) Then
        'si un homonyme existe, affichage d'une msgbox pour me demander si je veux continuer
       If MsgBox("Un utilisateur est déjà enregistré sous ce nom, voulez-vous malgré tout continuer?", vbYesNo + vbInformation, "doublon utilisateur") = vbYes Then
      'Si oui, on recherche un login libre
           Me.Texte10 = CaluclerLogin(Me.Texte2, Me.Texte4)
           'on modifie le texte pour que la première lettre soit en majuscule et le reste en minuscule
           Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
           'on récupère les valeurs pour encoder l'adresse mail automatiquement (attention, ne fonctionne que dans mon cas)
           Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
           'on modifie les caractères pour qu'ils soient tous en minuscule
           Me.Texte6 = LCase$(Nz(Texte6))
           'on fait appel au module qui enlève les accents
           Texte6 = EnleveAccent(Texte6)
           'on fait appel au module qui génère le mot de passe
           Texte12 = MOTDEPASSE
        Else
        'si non, on efface le contenu de toutes les zones de texte et on replace le focus sur la zone de texte la plus haute
        Me.Texte2 = ""
        Me.Texte4 = ""
        Me.Modifiable8 = ""
        Me.Texte6 = ""
        Me.Texte10 = ""
        Me.Texte12 = ""
        Me.Texte2.SetFocus
        End If
    Else
    Me.Texte10 = CaluclerLogin(Me.Texte2, Me.Texte4)
    'on modifie le texte pour que la première lettre soit en majuscule et le reste en minuscule
    Me.Texte10 = UCase$(Mid$(Nz(Texte10), 1, 1)) & LCase$(Mid$(Nz(Texte10), 2, Len(Nz(Texte10))))
    'on récupère les valeurs pour encoder l'adresse mail automatiquement (attention, ne fonctionne que dans mon cas)
    Texte6 = Texte4.Value + "." + Texte2.Value + "@domaine"
    'on modifie les caractères pour qu'ils soient tous en minuscule
    Me.Texte6 = LCase$(Nz(Texte6))
    'on fait appel au module qui enlève les accents
    Texte6 = EnleveAccent(Texte6)
    'on fait appel au module qui génère le mot de passe
    Texte12 = MOTDEPASSE
    End If
     
    End Sub
    je ne sais pas si je suis dans le bon ou pas donc avant de 50 modifications, je préfère revenir vers vous,

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Désolé mon erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
           Do 
              cpt = cpt + 1
              result = prefixeLogin & Format(cpt, "00")
     
           Loop While Not IsNull(DFirst("Login", "T_User", "[Login]=""" & result & """")) And cpt < 100 'Boucle tant que le login calcule existe et que le compteur ne depasse pas 2 chiffres
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. PHP / MySQL : Création d'utilisateurs dans la DB par code PHP
    Par Sangdrax1604 dans le forum Administration
    Réponses: 6
    Dernier message: 07/09/2006, 17h46
  2. création d'utilisateur et Connexion sur SQL Server 200
    Par da_latifa dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/07/2005, 11h26
  3. pb de création d'utilisateurs
    Par devalender dans le forum InterBase
    Réponses: 12
    Dernier message: 06/10/2004, 16h53
  4. Création d'utilisateurs
    Par damaker dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/05/2004, 15h18
  5. Création d'utilisateur sous PostgreSQL 7.3.2 avec PHP
    Par duongkhang dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 06/06/2003, 13h10

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