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 :

Copie de répertoire avec progression


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Copie de répertoire avec progression
    Bonjour a tous,
    Je cherche donc a copier un répertoire(et ses sous-répertoires) avec l'affichage de la progression de la copie sur une progressbar.J'ai déjà fait des recherches mais je n'ai trouvé que des codes pour copier des fichiers avec la progression.
    Merci d'avance @+.

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour, l'API Win32 SHFileOperation permet de faire cela. Il me semble que la biblio dvp.net contient un code de copie de dossiers basée sur cette API.

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut copier un répertoire(et ses sous-répertoires) avec l'affichage de la progression de la copie
    bonjour Nimbus629
    Mais ou as-tu cherche prof Nimbus?Ah le bon vieux prof qui ne s'egare jamais lui.
    Mais le progressbar est gratuit ,out of the box de chez VB.Net dans My.Computer.FileSystem.CopyDirectory.

    voici le bout de code avec un form et un tout petit class DirectoryCopy. :
    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
     
     
    'CODE DU FORM
     
    '1 Button
    '2 FolderBrowserDialog
    'Le progressbar Windows est gratuit.Pas besoin de le coder
    Public Class frmCopyFolders
        'dossier source
        Private dirNameSource As String
        'nouveau dossier cible (à creer FolderBrowserDialog2  s'il n'existe pas)
        Private dirNameDest As String
     
     
        Private Sub SelectCopyFolders_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectCopyFolders.Click
            dirNameSource = String.Empty
            dirNameDest = String.Empty
            Dim result As DialogResult
            ' Show the FolderBrowserDialog 1.
            result = FolderBrowserDialog1.ShowDialog()
            If (result = DialogResult.OK) Then
                dirNameSource = FolderBrowserDialog1.SelectedPath
                If Len(dirNameSource) = 0 Then Exit Sub
     
            End If
            ' Show the FolderBrowserDialog 2.
            result = FolderBrowserDialog2.ShowDialog()
            If (result = DialogResult.OK) Then
                dirNameDest = FolderBrowserDialog2.SelectedPath
                If Len(dirNameDest) = 0 Then Exit Sub
     
            End If
     
            Call DirectoryCopy.DirectoryCopy(dirNameSource, dirNameDest)
     
        End Sub
     
    End Class
     
    'CODE DU TOUT PETIT  CLASS DIRECTORYCOPY
    'pour avoir le progressbar windows specifier le parametre :
    'FileIO.UIOption.AllDialogs dans My.Computer.FileSystem.CopyDirectory
    'C'est identique si on utilise la consort pour copier des fichiers
    'savoir:My.Computer.FileSystem.CopyFile
     
    Imports System
    Imports System.IO
     
    Public Class DirectoryCopy
     
        Public Shared Sub DirectoryCopy( _
            ByVal sourceDirName As String, _
            ByVal destDirName As String)
     
     
            Dim dir As DirectoryInfo = New DirectoryInfo(sourceDirName)
            Dim dirs As DirectoryInfo() = dir.GetDirectories()
     
            ' If the source directory does not exist, throw an exception.
            If Not dir.Exists Then
                Throw New DirectoryNotFoundException( _
                    "Source directory does not exist or could not be found: " _
                    + sourceDirName)
            End If
     
            ' If the destination directory does not exist, create it.
            If Not Directory.Exists(destDirName) Then
                Directory.CreateDirectory(destDirName)
            End If
            ' Copy directories and  subdirectories.
            My.Computer.FileSystem.CopyDirectory(sourceDirName, destDirName, FileIO.UIOption.AllDialogs, FileIO.UICancelOption.ThrowException)
     
        End Sub
     
    End Class
    bon code....

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci pour vos réponses
    Mabrouki, je voudrais savoir s'il est possible de récupérer la valeur de la progressbar qui s'affiche dans la fenêtre Windows lors de la copie , pour la retranscrire sur une progressbar présente sur ma form.
    Merci encore @ +

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut DirectoryCopy et progressbar perso
    Rebonjour nimbus629

    Non helas ,ca n'est pas possible d'acceder au progressbar de My.Computer.FileSystem.CopyDirectory .
    Mais......nimbus mais oui ...tu peux faire ton progressbar personnalise et la copie du dossier et des sous-dossiers comme My.Computer.FileSystem.CopyDirectory
    L'exemple ci-apres qui utilise Directory et ses sous-classes nous permet de prendre tout en main.
    Le form principal est identique au premier deja transmis.La difference vient de la classe
    - DirectoryCopyExample qui permet de copier dossier principal et sous-dossier
    -frmProgress que tu personnalisera comm il te plait avec :
    -un progressbar qui affiche pourcentage de progression des fichiers copies
    -1er label Haut affiche le nom du dossier et fichier copie
    -2eme label Bas affiche le pourcentage de progression en %.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
    'Form principal identique au premier deja poste
    '1 Button
    '2 FolderBrowserDialog
     
    Imports System.IO
    Public Class frmCopyFoldersPerso
        'dossier source
        Private dirNameSource As String
        'nouveau dossier cible (à creer FolderBrowserDialog2  s'il n'existe pas)
        Private dirNameDest As String
     
     
        Private Sub SelectCopyFolders_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectCopyFolders.Click
            dirNameSource = String.Empty
            dirNameDest = String.Empty
            Dim result As DialogResult
            ' Show the FolderBrowserDialog 1.
            result = FolderBrowserDialog1.ShowDialog()
            If (result = DialogResult.OK) Then
                dirNameSource = FolderBrowserDialog1.SelectedPath
                If Len(dirNameSource) = 0 Then Exit Sub
     
            End If
            ' Show the FolderBrowserDialog 2.
            result = FolderBrowserDialog2.ShowDialog()
            If (result = DialogResult.OK) Then
                dirNameDest = FolderBrowserDialog2.SelectedPath
                If Len(dirNameDest) = 0 Then Exit Sub
     
            End If
            'si True tous les sous-dossiers sont copies
            Call DirectoryCopyExample.DirectoryCopy(dirNameSource, dirNameDest, True)
     
        End Sub
     
    End Class
     
    '1-Classe DirectoryCopyExample 
    '- copie "recursivement" le dossier source et ses sous dossiers
    'L'utilisateur peut spécifier si les sous-répertoires doivent également être copiés. 
    '-si copySubDirs=True, la méthode les copie de manière récursive 
    'en s'appelant sur chaque sous-répertoire suivant 
    'jusqu'à ce que toutes les copies soient effectuées.
     
    Imports System
    Imports System.IO
     
    Public Class DirectoryCopyExample
        Public Shared Sub DirectoryCopy( _
            ByVal sourceDirName As String, _
            ByVal destDirName As String, _
            ByVal copySubDirs As Boolean)
     
     
            Dim dir As DirectoryInfo = New DirectoryInfo(sourceDirName)
            Dim dirs As DirectoryInfo() = dir.GetDirectories()
     
            ' If the source directory does not exist, throw an exception.
            If Not dir.Exists Then
                Throw New DirectoryNotFoundException( _
                    "Source directory does not exist or could not be found: " _
                    + sourceDirName)
            End If
     
            ' If the destination directory does not exist, create it.
            If Not Directory.Exists(destDirName) Then
                Directory.CreateDirectory(destDirName)
            End If
     
            ' Get the file contents of the directory to copy.
            Dim files As FileInfo() = dir.GetFiles()
     
            'Initialise  frmProgress & Affiche la copie en pourcent 
            Dim frm As frmProgress = New frmProgress
            frm.ProgressBar1.Minimum = 1
            frm.ProgressBar1.Maximum = 100
            frm.ProgressBar1.Value = 1
            frm.ProgressBar1.Step = 1
            frm.Show()
            frm.TopMost = True
            Dim strDisplay As String = String.Empty
            Dim strPerCent As String = String.Empty
            For Each file In files
                ' Create the path to the new copy of the file.
                Dim temppath As String = Path.Combine(destDirName, file.Name)
     
                ' Copy the file.
                file.CopyTo(temppath, True)
                'Update ProgressBar1
                frm.ProgressBar1.PerformStep()
     
                'Display
                frm.lblPerCent.Text = CInt(100 * frm.ProgressBar1.Value / files.Length)
                frm.lblPerCent.Refresh()
                frm.lblDirectoryFiles.Text = file.DirectoryName & file.Name
                frm.lblDirectoryFiles.Refresh()
            Next file
            frm.Close()
     
            ' If copySubDirs is true, copy the subdirectories.
            ' la methode DirectoryCopy s'appelle elle-meme  "recursivement" 
            ' pour faire la copie des sous-dossier ..et les afficher......ainsi de suite
            If copySubDirs Then
                For Each subdir In dirs
                    ' Create the subdirectory.
                    Dim temppath As String = _
                        Path.Combine(destDirName, subdir.Name)
     
                    ' Copy the subdirectories.
                    DirectoryCopy(subdir.FullName, temppath, copySubDirs)
     
                Next subdir
            End If
        End Sub
     
     
     
    End Class
     
    'un simple frmProgress  charge d'afficher:
    '- 1 progressBar 
    '- 2 labels d'information  
    Public Class frmProgress
     
    End Class
    pj: le fichier rar de frmProgress à toute fins utiles
    bon code..............

  6. #6
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Malheureusement ce code présente plusieurs problèmes.
    * Tout est fait sur le thread UI et va donc bloquer celui-ci.
    * Le maximum de la barre de progression est bogué, il correspond toujours à 100 fichiers. Il faudrait corriger cela et tenir compte de la taille des fichiers à copier.
    * Le comportement en cas de sous-répertoires est déficient : la barre de progression repart à zéro à chaque sous-répertoire.
    * Par expérience, mieux vaut utiliser dir.GetFileSystemEntries() plutôt que dir.GetDirectories et dir.GetFiles, le gain de performances est notable.
    * Aucune séparation de l'UI et de la logique.
    * Un code niveau UI ne devrait pas renvoyer d'exceptions, il devrait les traiter directement pour afficher le message d'utilisateur approprié et éventuellement décider des étapes à suivre, par exemple effacer le contenu déjà copié en cas d'échec.
    * Très faible maintenabilité et évolutivité : passer à un déplacement des fichiers, fournir un mécanisme d'annulation de l'opération, etc... Tout cela nécessite une réécriture totale.

    Encore une fois... SHFileOperation. 4 heures de boulot pour un code parfait, bien plus rapide, couvrant tous les cas de figure, qui sera réutilisable pendant vingt ans et sans avoir à être retouché.

  7. #7
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut code bogue,SHFileOperation ,api shell
    bonjour Nimbus et Don Quiche
    Selon toi,Don Quiche il faudrait pour une copie de dossier sortir de .net framework et passer à l'Api Win shell SHFileOperation.
    C'esrt là un avis personnel qui n'engage que son auteur,mais pour moi utiliser l'api win est un expedient pour des cas extremes et c'est reinventer le .Net Framework et la roue Win.
    Quand au code transmis c'est juste pour donner une idee de la copie recursive de dossier et des possibilites de la plate forme .net framework à Nimbus qui voulait personnaliser son progressBar.
    Ceci sans parler du code anterieur qui est thread-safe.
    Neanmoins puisque tu soutiens contre tout bon sens l'utilisation de l'Api SHFileOperation .
    Voici le meme code avec un BackgroundWorker à l'intention de Nimbus qui utilise le nombre de fichier en pourcentage,thread-safe .
    Ce n'est pas un necessite au passage d'utiliser "la taille des fichiers en octets",car en plus celui induirait des complication avec le type integer du progressbar si on depasse 2 gigasoctets.
    code avec un form principal unique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
     
    'Form principal unique & identique au premier deja poste(pas de class ni d'autre forme)
    '3 Button
    '2 FolderBrowserDialog
    '1 BackGroundWorker
    '1 progressBar
    '2 labels 
     
    Imports System.Windows
    Imports System.ComponentModel
    Imports System.Threading
    Imports System.IO
    Public Class frmBackGroundWorker
        'Total de fichiers à copier
        Private totalFichierPourCopie As Integer
        'Total de fichiers copies
        Private nombreFichiersCopies As Integer
        'dossier source
        Private dirNameSource As String
        'nouveau dossier cible (à creer FolderBrowserDialog2  s'il n'existe pas)
        Private dirNameDest As String
        Private Sub btnSelectCopyFolders_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelectCopyFolders.Click
            dirNameSource = String.Empty
            dirNameDest = String.Empty
            Dim result As DialogResult
            ' Show the FolderBrowserDialog 1.
            result = FolderBrowserDialog1.ShowDialog()
            If (result = DialogResult.OK) Then
                dirNameSource = FolderBrowserDialog1.SelectedPath
            End If
            ' Show the FolderBrowserDialog 2.
            result = FolderBrowserDialog2.ShowDialog()
            If (result = DialogResult.OK) Then
                dirNameDest = FolderBrowserDialog2.SelectedPath
            End If
            If Len(dirNameSource) = 0 Or Len(dirNameDest) = 0 Then Exit Sub
     
            ' Calcul Total Fichiers à copier.
            totalFichierPourCopie = 0
            totalFichierPourCopie = FilesTotal(dirNameSource, totalFichierPourCopie)
            Me.lblTotalFichierPourCopie.Text = totalFichierPourCopie.ToString
        End Sub
        Private Sub btnStartAsync_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartAsync.Click
            If Len(Me.dirNameSource) = 0 Or Len(Me.dirNameDest) = 0 Then Exit Sub
            If Me.totalFichierPourCopie = 0 Then Exit Sub
     
            ' Reset  du label resultat.
            Me.resultLabel.Text = String.Empty
            ' Desactive start button jusqu'a fin operation 
            ' asynchrone.
            Me.btnStartAsync.Enabled = False
            ' Active Cancel button sur duree operation asynchrone.
            Me.btnCancelAsync.Enabled = True
            ' ProgressBar1
            Me.ProgressBar1.Minimum = 0
            Me.ProgressBar1.Maximum = 100
            Me.ProgressBar1.Value = 1
            Me.ProgressBar1.Visible = True
            Me.ProgressBar1.Enabled = True
     
     
            'Aucun fichier copie
            Me.nombreFichiersCopies = 0
     
            ' Initialize BackgroudWorker.
            Me.Worker.WorkerReportsProgress = True
            Me.Worker.WorkerSupportsCancellation = True
     
            ' Demarre worker.
            Me.Worker.RunWorkerAsync()
     
     
        End Sub
     
        'Interrompt BackgroudWorker
        Private Sub btnCancelAsync_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelAsync.Click
            ' Interrompt operation asynchrone.
            Me.Worker.CancelAsync()
            ' Desactive Cancel button.
            btnCancelAsync.Enabled = False
        End Sub
     
        Private Sub Worker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Worker.DoWork
            Call DirectoryCopy(dirNameSource, dirNameDest, Worker, e)
        End Sub
     
        Private Sub Worker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles Worker.ProgressChanged
            Me.ProgressBar1.Value = e.ProgressPercentage
     
        End Sub
     
        Private Sub Worker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles Worker.RunWorkerCompleted
            ' handle  an exception was thrown.
            If (e.Error IsNot Nothing) Then
                MessageBox.Show(e.Error.Message)
            ElseIf e.Cancelled Then
                '  handle the case where the user canceled the 
                ' operation.
                resultLabel.Text = "Canceled"
            Else
                '  handle the case where the operation succeeded.
                resultLabel.Text = e.Result.ToString()
            End If
            ' Active Start button.
            btnStartAsync.Enabled = True
     
            ' Desactive Cancel button.
            btnCancelAsync.Enabled = False
     
     
        End Sub
        'Fonction copie folders 
        Private Sub DirectoryCopy(ByVal sourceDirName As String, ByVal destDirName As String, ByVal worker As BackgroundWorker, ByVal e As System.ComponentModel.DoWorkEventArgs)
     
            ' If the source directory does not exist, throw an exception.
            If Not Directory.Exists(sourceDirName) Then
                Throw New DirectoryNotFoundException( _
                    "Source directory does not exist or could not be found: " _
                    + sourceDirName)
            End If
            ' If the destination directory does not exist, create it.
            If Not Directory.Exists(destDirName) Then
                Directory.CreateDirectory(destDirName)
            End If
            Dim dir As DirectoryInfo = New DirectoryInfo(sourceDirName)
            Dim files() As FileInfo = dir.GetFiles()
     
            For Each file As FileInfo In files
                ' Create the path to the new copy of the file.
                Dim temppath As String = Path.Combine(destDirName, file.Name)
                file.CopyTo(temppath, True)
                nombreFichiersCopies = nombreFichiersCopies + 1
                Dim percentageDone As Double = CType(nombreFichiersCopies / totalFichierPourCopie, Double) * 100.0
                worker.ReportProgress(CType(percentageDone, Integer))
            Next
            Dim dirs As DirectoryInfo() = dir.GetDirectories()
            For Each subdir As DirectoryInfo In dirs
                ' Create the subdirectory.
                Dim temppath As String = _
                    Path.Combine(destDirName, subdir.Name)
                ' Copy the subdirectories.
                DirectoryCopy(subdir.FullName, temppath, worker, e)
            Next
            e.Result = nombreFichiersCopies.ToString
        End Sub
        'Fonction Total Fichiers à copier 
        Private Function FilesTotal(ByVal sourceDirName As String, ByVal totalFile As Integer) As Integer
            Dim dir As DirectoryInfo = New DirectoryInfo(sourceDirName)
            Dim dirs As DirectoryInfo() = dir.GetDirectories()
            Dim files As FileInfo() = dir.GetFiles()
            For Each File In files
                ' Compute total files for subdir
                totalFile = totalFile + 1
            Next File
            'appel recursif sur FilesTotal pour chaque subdir
            For Each subdir In dirs
                sourceDirName = subdir.FullName
                totalFile = FilesTotal(sourceDirName, totalFile)
            Next subdir
     
            Return totalFile
        End Function
    End Class
    Quand à l'annulation de l'operation de copie de fichier je laisse à Nimbus le soin de faire une sub AnnuleCopieDirectory(dirNameDest As String) recursive sur le modele de DirectoryCopy et d'utiliser file.Delete au lieu de file.CopyTo(temppath, True)

    bonne soiree.....

Discussions similaires

  1. [MS-DOS]Copie de répertoire avec filtre
    Par tripper.dim dans le forum Windows
    Réponses: 5
    Dernier message: 07/10/2014, 23h23
  2. Script copie de répertoire avec rétention de 30 jours
    Par liondu75 dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 17/06/2011, 14h44
  3. copie de répertoire avec barre de progression
    Par s7even dans le forum Windows Forms
    Réponses: 5
    Dernier message: 10/12/2009, 19h36
  4. Copie de fichiers avec détails de progression
    Par Shypster dans le forum C#
    Réponses: 1
    Dernier message: 04/11/2008, 22h51
  5. Batch : copy d'un répertoire avec des espaces
    Par krfa1 dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 26/10/2005, 12h47

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