SUPPRIMER UN RÉPERTOIRE ET TOUT SON CONTENU (SOUS-DOSSIERS ET FICHIERS)

Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
- - Dernière réponse : alucard02
Messages postés
26
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
30 janvier 2009
- 18 déc. 2007 à 19:40
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5490-supprimer-un-repertoire-et-tout-son-contenu-sous-dossiers-et-fichiers

Afficher la suite 
cs_LordBob
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
8 -
exactement la source ke je chercher, un grand merci a toi tcedi
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Mais, de rien, LordBob !!! J'espère que cette source te servira bien !
Bonne prog !
SupraDolph
Messages postés
196
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
1 septembre 2008
1 -
C pa mal mais, Personellement j'utiliserai plutôt :

Public Function SupprimeRepertoire(Repertoire As String)
If Right(Repertoire, 1) "" Then Repertoire Left(Repertoire, Len(Repertoire) - 1)
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
fs.DeleteFile Repertoire & "*.*", True
fs.DeleteFolder Repertoire, False
End Function

Bon Prog
SupraDolph
SupraDolph
Messages postés
196
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
1 septembre 2008
1 -
oups sa ne prend pas les backslash

Public Function SupprimeRepertoire(Repertoire As String)
If Right(Repertoire, 1) "BACKSLASH" Then Repertoire Left(Repertoire, Len(Repertoire) - 1)
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
fs.DeleteFile Repertoire & "BACKSLASH*.*", True
fs.DeleteFolder Repertoire, False
End Function

Bon Prog
SupraDolph
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
C'est vrai qu'il est possible d'utiliser le FSO et que c'est plus simple ! Cependant, si tu utilises le FSO pour supprimer un répertoire avec un bon AntiVirus, ce dernier va te signaler que ton programme exécute peut-être un script malveillant et il va te demander si tu désires l'autoriser à exécuter ce script ou non. Cela prend du temps. Et en général, ça ne plait pas aux utilisateurs finaux d'avoir l'impression de se faire hacker à chaque fois qu'ils utilisent ton programme ! lol !

Merci pour tes commentaires SupraDolph !

Bonne prog !!!
cs_shaoni
Messages postés
186
Date d'inscription
mercredi 11 avril 2001
Statut
Membre
Dernière intervention
12 septembre 2007
-
de plus avec fso l'utilisateur est obliger d'avoir wsh installer !! encore des soucis en plus ! !
au moin il y a de dependance au mieux ! c'est !
SupraDolph
Messages postés
196
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
1 septembre 2008
1 -
il est peut être possible qu'un bon antivirus le détecte mais avec norton 2002 je n'est pas de pb.
après moi je donne ce source a titre d'exemple pour que l'on puisse comparer +ieur source. Je trouve qu'il est bien d'avoir le choix entre 2 (voir +) sources
SupraDolph
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Je suis tout à fait d'accord avec toi, SupraDolph !!! Il faut montrer les différentes manières d'effectuer une même opération. Et, laisser le choix aux développeurs de suivre telle ou telle méthode.

P.S. : Active un peu les heuristiques Bloodhound de ton Norton AntiVirus 2002 au niveau de protection maximal et teste ton code avec le FSO. Normalement, il devrait réagir !!!

Bonne prog !!!
Sirocooo
Messages postés
412
Date d'inscription
mercredi 19 décembre 2001
Statut
Membre
Dernière intervention
7 avril 2008
1 -
on peut aussi utiliser la command dos DELTREE et dans ce cas
il n'y à plus que 3 lignes de code
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
C'est vrai Sirocooo, on peut procéder comme cela !!! Cependant, deltree n'existe plus sous Windows 2000, XP. Là, il faut utiliser "rmdir /q /s". Ma fonction tourne sous les différentes versions de Windows. Je trouve que c'est un petit peu plus pratique.

Bonne prog !
cs_Rock
Messages postés
43
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
31 mai 2006
-
magnifique juste ce dont j avais besoin encore merci
SuperTonic
Messages postés
53
Date d'inscription
mercredi 24 juillet 2002
Statut
Membre
Dernière intervention
16 mars 2011
-
Super la source ... Mais comment qu'on fait si on ne veux pas que le répertoire racine soit effacer. (Juste tous les fichiers et ss répertoires) ?
Merki
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Merci SuperTonic !!!

Pour faire ce que vous voulez (supprimer tous les sous-dossiers et fichiers, mais pas le répertoire lui-même), il y a de nombreuses possibilités !

Solution la plus simple : Juste après l'appel de la fonction, recréer le répertoire. (Bon ! Là, après avoir supprimé le dit répertoire, on le recrée, mais c'est ce qu'il y a de plus simple !)

Exemple :

Dim Chemin As String
Chemin="C:Temp"
SupprimeRépertoire(Chemin)
MkDir(Chemin)

Autre solution : Faire un copier/coller de la fonction, la renommer en SuppRep ou autre, laisser les appels à SupprimeRépertoire, et supprimer les 2 lignes après loop.
Au lieu d'appeler SupprimeRépertoire pour effectuer la suppression du dossier, il suffit d'appeler SuppRep, et le tour est joué !

Exemple :

Public Function SuppRep(Répertoire As String) As Boolean
On Error GoTo Erreur
Dim SousRépertoire As String
Dim Val As String
SousRépertoire = Dir(Répertoire, vbDirectory + vbHidden + vbSystem + vbArchive)
Do While SousRépertoire <> ""
If SousRépertoire <> "." And SousRépertoire <> ".." Then
If (GetAttr(Répertoire & SousRépertoire) And vbDirectory) = vbDirectory Then
SupprimeRépertoire (Répertoire & SousRépertoire & "")
Else
Val = Répertoire & SousRépertoire
SetAttr Val, vbReadOnly = 0
Kill (Répertoire & SousRépertoire)
End If
End If
SousRépertoire = Dir(Répertoire, vbDirectory + vbHidden + vbSystem + vbArchive)
If SousRépertoire = "." Then
SousRépertoire = Dir
End If
If SousRépertoire = ".." Then
SousRépertoire = Dir
End If
Loop
SuppRep = True
Exit Function

Erreur:
SuppRep = False
End Function


Voilà ! Il y a plein d'autres solutions, mais je m'arrête là !

Bonne prog !!!
SuperTonic
Messages postés
53
Date d'inscription
mercredi 24 juillet 2002
Statut
Membre
Dernière intervention
16 mars 2011
-
Ok, je vais essayer. Le truc c'est que je ne peux en aucun cas supprimer le dossier origine (serveur/droits) .
je vais donc voir de plus pret ton exemple. Merci vraiement bcp
magicdibot
Messages postés
10
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
28 mars 2005
-
Nickel.. pil poil ce que je cherchais... lol
Merci bi1.... en + en récursif.. j aime -)
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Merci magicdibot !

Le principal, c'est que ma source puisse servir à d'autres ! C'est pour cela que je l'ai postée sur VBFrance !

Bonne prog !
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Une version améliorée de cette fonction (SupprimeRépertoire) est incluse dans T.C.E.D.I. Direct Update Version 1.0.0.0 ! Si cela vous intéresse, rendez-vous sur cette page : http://www.vbfrance.com/article.aspx?Val=8416
Vous pouvez également vous rendre sur le site Web officiel de la T.C.E.D.I. : http://www.tcedi.be.tf

Bonne prog à tous !!!
neoburne
Messages postés
2
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
15 novembre 2003
-
Salut c néo

Bah en fait, je ne vois pas du tout comment est qu'elle se compile sous VB. Je sais que c'est une fonction et qu'il faut l'appeler sous le pgm principal, mais je me demander comment on y fait appel ds le pgm. Est ce qu'on pourait me donner un coup de main? ou de pied mm ??? LOL

MERCI

BONNE PROG
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Salut neoburne !!!

En fait, il n'y a rien de plus simple à mettre en oeuvre !!!

Tu ajoutes un nouveau module et tu y colles le code de la fonction ci-dessus. (Tu peux également le copier/coller directement dans le code de ta fenêtre, mais c'est moins "modulaire" !!!)

Ensuite, dans le code de ta fenêtre (au niveau d'un clic sur un bouton ou autre), tu appelles la fonction de cette manière :

SupprimeRépertoire("C:Temp")

Voilà, j'espère avoir répondu à ta question !!!

Bonne continuation neoburne !!!!!
neoburne
Messages postés
2
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
15 novembre 2003
-
Bah en fait, la je suis perdu.
J'ai bien insérer ton code, avec la fonction SupprRépertoire, avec l'appel de la fonction dans le pgm principal, seulement, il ne m'efface rien.

En fait, je veux que lorsque j'ouvre un .exe de vb, il me supprime le dossier que j'ai sélectionné auparavant.

Alors, j'ai insérer mon pgm pricipal dans Private Sub Form_Load(), et l'appel à la fonction. Mais cela ne marche pas.

Pourrais-tu m'aider s'il te plaît ?

Merci !!!!!

Neoburn
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
No problemo !!!

Je t'envoie un petit exemple !
tlsosiris
Messages postés
24
Date d'inscription
dimanche 18 avril 2004
Statut
Membre
Dernière intervention
14 mai 2004
-
salut a tous si y'a bien un truc qui m'enerve c bien qu'on expilque rien sur les sources, pensez aux newbies bordel.
Par exemple je le place ou la fonction, je l'appel command, je met quoi ds la form, etc...
Sinon merci pour toute ces sources tres instructives.
Ps : a l'avenir commentai vos sources ;p
Osiris : au dela du possible
almey
Messages postés
48
Date d'inscription
samedi 19 avril 2003
Statut
Membre
Dernière intervention
2 mai 2006
-
Salut ...
Je trouve ta fonction excellente ... mais juste un petit problème ...

Je souhaite m'en servir notament pour vider le dossier TEMP, TEMPORY INTERNET FILES ... mais ta fonction réalise une boucle infini sur le fichier Index.dat (Fichier que l'on ne peut pas supprimer)

Aurais-tu une solution à ce problème ??

Merci ...
almey
Messages postés
48
Date d'inscription
samedi 19 avril 2003
Statut
Membre
Dernière intervention
2 mai 2006
-
Salut ...
Je trouve ta fonction excellente ... mais juste un petit problème ...

Je souhaite m'en servir notament pour vider le dossier TEMP, TEMPORY INTERNET FILES ... mais ta fonction réalise une boucle infini sur le fichier Index.dat (Fichier que l'on ne peut pas supprimer)

Aurais-tu une solution à ce problème ??

Merci ...
trouble magma
Messages postés
15
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
11 août 2005
-
j'imagine que si au lieu de :

Kill (Répertoire & SousRépertoire)

tu mets :

if SousRépertoire = "Index.dat" then
Kill (Répertoire & SousRépertoire)
end if

ca devrait marcher......
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Ta solution ne saurait convenir, trouble magma.

Si un fichier est en cours d'exécution ou verrouillé par un programme, il ne pourra de toute façon pas être supprimé ! On n'est pas sous UNIX (là, c'est possible). De plus, supposer que l'unique fichier qui pose problème est "Index.dat" est beaucoup trop restrictif.

La seule possibilité, c'est de passer les fichiers ou les dossiers qui ne sont pas supprimables.

Cette opération était impossible avec la première version de ma fonction.

La seconde version apporte une solution au vidage des dossiers temporaires.

Bonne prog @ tous et à toutes !

P.S. : Je n'ai pas pu répondre plus tôt, par manque de temps. Désolé ! Là, je fais une petite pause avant de me remettre à étudier... C'est vous dire ce que je fais de mes loisirs ;-)...
Matyouz
Messages postés
28
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
27 juillet 2011
-
Erreur d'execution 53 "Fichier introuvable .... sur cette ligne : If (GetAttr(Répertoire & SousRépertoireOuFichier) And vbDirectory) = vbDirectory Then

J'envoie "c:\Nouveau" à cette fonction compilée dans un module ... le programme plante alors que ce répertoire existe bien !!!

Que veux dire cette ligne exactement ? vbDirectory contient la valeur 16 ... ça veut dire quoi ??
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Tout à fait normal que cela ne fonctionne pas avec ce que tu passes en paramètre, Matyouz.

Mets plutôt ceci : "C:\Nouveau".

Ainsi, ça ira !

Je te conseille vivement, pour t'assurer qu'il y a bien un backslash à la fin du chemin de ton répertoire, d'utiliser une fonction du genre :

Public Function AddBackSlashIfNecessary(Directory As String)
If Right(Directory, 1) <> "" Then
Directory = Directory & ""
End If
AddBackSlashIfNecessary = Directory
End Function

Pour ce qui est de vbDirectory, c'est une constante. Elle désigne un répertoire. La ligne en question permet de déterminer si l'élément du système de fichier désigné par le chemin complet est un répertoire ou non.

Je fais cela à l'aide d'un opérateur "Et" binaire.

Exemple :

00010110
Et 00010000
-------------
00010000

Si le bit est positionné, c'est que c'est bien un répertoire et la valeur sera égale à la constante vbDirectory.

cfr. MSDN : Dir, fonction et And, opérateur.

Voilà !

J'espère avoir été assez clair.

Bonne prog !
Matyouz
Messages postés
28
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
27 juillet 2011
-
ok ! ça marche impeccable ... merci pour ta réponse rapide !
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Rien de plus simple à faire, mkos2005 !

1. Tu crées un nouveau module dans ton projet.
2. Tu copies le code d'une des 2 versions de la fonction ci-dessus (selon tes besoins).
3. Tu colles le code en question dans le module.
4. Au niveau de la procédure de traitement d'un clic sur un bouton, ou ailleurs dans ton code, tu appelles la fonction comme suit : SupprimeRépertoire("C:\LeRépertoireASupprimer")

Tu peux, bien entendu, tester la valeur renvoyée par la fonction si tu en as besoin.

Voilà !

Bonne prog !!!
cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
pourquoi ne pas mettre en paramètres optionel ne supprimer que les répertoire vide / ou ceux qui contiennent que des fichiers de 0 octets ?
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Cher PaTaTe,

Pour obtenir le résultat escompté, il suffit d'effectuer les modifications suivantes :

1. Partir de la deuxième version de la fonction.

2. Remplacer : Public Function SupprimeRépertoire(Répertoire As String) As Boolean
Par : Public Function SupprimeRépertoire(Répertoire As String, Optional ByVal FichiersVidesSeulement As Boolean = False) As Boolean

3. Remplacer l'appel récursif : SupprimeRépertoire (MyArray(J))
Par : SupprimeRépertoire MyArray(J), FichiersVidesSeulement

4. Remplacer le code de suppression de fichiers :

' On s'assure que le fichier n'est pas en lecture seule.
SetAttr Val, vbReadOnly = 0
' On supprime le fichier.
Kill (Val)

Par :

If (Not FichiersVidesSeulement) Then
' On s'assure que le fichier n'est pas en lecture seule.
SetAttr Val, vbReadOnly = 0
' On supprime le fichier.
Kill (Val)
Else
If (FileLen(Val) = 0) Then
' On s'assure que le fichier n'est pas en lecture seule.
SetAttr Val, vbReadOnly = 0
' On supprime le fichier.
Kill (Val)
End If
End If

5. Veiller à passer True dans l'appel de la fonction.

C'est tout !

Bonne programmation !
cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
Apparement cette modification ne fonctionne pas :(

Je regarderais ça en détail dès que j'aurais 5 minutes.
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Etrange, la modification fonctionne comme prévu chez moi !

Peut-être n'ai-je pas été assez clair dans mes explications... Il est également possible que je n'aie pas compris ce que vous vouliez...

Quoi qu'il en soit, j'ai posté une nouvelle version avec les modifications supposées désirées...

Si ce n'est pas encore cela, dites-m'en plus sur votre objectif (exemple concret), cher PaTaTe.

Bonne programmation !
cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
C'est la fonction que je voulait mais apparemment sont comportement est aléatoire.
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Pardonnez-moi, mais le comportement de cette fonction est tout sauf aléatoire !

En mode fichiers vides seulement, elle réalise ceci :

1. Pour chaque dossier, elle génère une liste des dossiers et fichiers que le répertoire contient.

2. Elle traite chaque élément de la liste constituée (pas d'interruption si échec) :

a. Si c'est un dossier elle s'appelle récursivement pour ce répertoire et effectue le même traitement.

b. Si c'est un fichier et que celui-ci a une taille de 0 octet, il est supprimé.

Vous pouvez facilement vérifier son fonctionnement :

1. Créez un nouveau dossier.
2. Placez-y des fichiers vides et non-vides.
3. Placez-y des sous-dossiers (Créez-en des nouveaux).
4. Pour chaque sous-dossier, appliquez la même procédure avec des variantes, afin de traiter tous les cas possibles.
5. Effectuez cela jusqu'à obtenir des arborescences de tailles variables de 5 niveaux au moins (sinon c'est trop facile).

ATTENTION : N'y mettez aucune image ou vidéo pour ne pas fausser les résultats ! L'explication de cette remarque vient juste après...

Je suppose que ce que vous entendez par comportement aléatoire, c'est que certains dossiers qui sont pourtant "vides" (j'insiste sur les guillements) ne sont pas supprimés, alors que d'autres ne posent aucun problème !

Si c'est bien le cas, je suppose également qu'à un moment ou à un autre ce dossier a contenu des images et/ou vidéos. Ouvrez l'"Explorateur Windows", Cliquez sur le menu "Outils", puis sur "Options des dossiers...". Allez dans l'onglet "Affichage". Vérifiez dans les "Paramètres avancés" qu'"Afficher les fichiers et dossiers cachés" est bien activé et surtout que "Masquer les fichiers protégés du système d'exploitation (recommandé)" est bien décoché (vous devrez confirmer en cliquant sur "Oui") ! Ouvrez un des dossiers "vide" qui n'a pas été supprimé par la fonction. Vous devriez y voir un fichier "Thumbs.db" qui n'est pas vide. C'est un fichier système caché qui sert à stocker les miniatures sous Windows 2000/XP. Il peut il y en avoir d'autres selon le dossier...

Si un fichier est apparu avec le changement de configuration, il est tout à fait normal que la fonction n'aie pas supprimé le dossier (vu qu'il n'est pas vraiment vide).

Pour pallier à ce problème, vous pouvez évidemment rajouter un test sur le nom du fichier "Thumbs.db".

Voilà,

Sans plus de détails sur ce que vous essayez de supprimer, je ne peux faire plus.

Je ne dis pas qu'il ne peut pas il y avoir de bug (l'erreur est humaine), mais je n'ai pas pu reproduire de phénomène de comportement aléatoire... Peut-être qu'avec plus d'informations, je pourrais reproduire le problème...

Bonne programmation !
cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
Pour le test de la fonction j'ai utilisé un projet effectivement vide et j'ai créé des dossiers et fichiers vides pour tester. Donc je n'etais pas dans un repertoire temporaire sujet à des accès qui pourrait effectivement expliquer le probleme.

Pour les fichiers Thumbs.db, cela n'est pas le problème puisque mise en cache des medias est chez moi tout simplement désactivée donc aucuns de ces fichiers ne peut fausser le déroulement de la fonction.
tcedi
Messages postés
59
Date d'inscription
samedi 27 juillet 2002
Statut
Membre
Dernière intervention
11 septembre 2003
-
Je vous envoie un message CS avec mon adresse e-Mail de manière à ce que vous puissiez m'envoyer l'arborescence posant le problème compressée en 7z ou autre.

Ainsi, je pourrai certainement reproduire le problème et y trouver une solution...

P.S. : Pour la mise en cache, c'est pareil chez moi, mais la plupart des gens la laissent active...

P.P.S. : J'aimerais vraiment savoir si ce sont des dossiers ou des fichiers qui posent le problème, mais également si l'explorateur Windows était ouvert sur le dossier ou un des sous-dossiers (cela pose parfois problème, cfr. limitations) lors de l'exécution de la fonction.

Bonne prog. !
cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
Problème résolu comme indiqué dans le message CS

La fonction tourne correctement. :)
forchi
Messages postés
33
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
24 mai 2008
-
Pour info

Ceux qui sont sous .net:

Dim Dir As New DirectoryInfo("Chemin de mon dossier a supprimer")
Dir.Delete(True)
victor110
Messages postés
86
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
13 mai 2010
-
On peut aussi utiliser la fonction
DELETE ds VB
Bonne @ prog!!!
alucard02
Messages postés
26
Date d'inscription
mardi 6 novembre 2007
Statut
Membre
Dernière intervention
30 janvier 2009
-
c'est exactement ce que je cherchais...
Merci