Problème tri de fichiers par extention

Résolu
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012 - 9 mars 2006 à 14:46
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012 - 10 mars 2006 à 09:55
Bon, ca fait quelques heures que je m'enerve sur ce code et la je craque alors je vous le confi. Voila les données: J'ai un dossier que je choisis dans une DirListBox, dedans il y des fichiers divers (.doc, .xls, .txt etc...), en cliquant sur un bouton je suissupposé créer un dossier par extention différentes dans le dossier principale, et mettre chaque fichier dans le dossier correspondant à son type (sachant que les dossiers créer portent comme nom l'extention, par exemple: doc, xls, txt)

Voila le code que j'ai mis sous le bouton:
quand je lance il bug et me met "indice en dehors de la plage" en pointant sur ExtFile = Tabl(UBound(Tabl))

merci de m'aider

PreviousFile = ""
direct = MainForm.DirList.Path
std = Dir(direct, vbNormal)
org = direct

'récupérer l'extention
Tabl = Split(std, ".")
ExtFile = Tabl(UBound(Tabl))
MsgBox "travail en cour", vbMsgBoxSetForeground

While std <> PreviousFile
PreviousFile = std
For Each ExtFile In Tabl()
MkDir direct & ExtFile
Next
Call DéplacerFichier(org & std, org & ExtFile & "")
std = Dir(direct, vbNormal)
Wend

MsgBox "Opérations terminés", vbInformation

12 réponses

Profil bloqué
10 mars 2006 à 00:34
Salut phenX
Si j'ai bien compris tu as un répertoire avec des fichiers.Dans ce répertoire tu veux créer des sous-répertoires qui portent comme nom l'extension des fichiers du répertoire d'origine et y déplacer tous les fichiers qui ont la même extension
Essaie ceci : pour moi cela fonctionne
Je mets l'extension entre 2 espaces pour différencier les extensions frm et frm1 par exemple car instr dans ce cas ne créerait pas le répertoire frm1 car frm existe déjà

Une feuille form1,un bouton de commande Command1,une liste de lecteurs Drive1 et une liste de répertoire Dir1

Dim repertoire As String
Dim fich As String
Dim ext As String
Dim extension As String
Dim sousrepertoire As String


Private Sub Command1_Click()


repertoire = Form1.Dir1.Path + ""
extension = " " ' 1 espace
Do
fich = Dir(repertoire, vbNormal)
If fich = "" Then Exit Do
sousrepertoire = Right$(fich, Len(fich) - InStr(fich, "."))
ext = " " & sousrepertoire & " " ' 1 espace au début et à la fin pour différencier les extensions
If InStr(extension, ext) = 0 Then
MkDir repertoire & sousrepertoire
extension = extension & ext & " " ' 1 espace
End If
FileCopy repertoire & fich, repertoire & sousrepertoire & "" & fich
Kill repertoire & fich
Loop
End Sub


Private Sub Dir1_Change()

repertoire = Form1.Dir1.Path

End Sub


Private Sub Drive1_Change()


Dir1.Path = Drive1.Drive

End Sub

GRENIER Alain
3
BasicInstinct Messages postés 1470 Date d'inscription mardi 5 février 2002 Statut Membre Dernière intervention 20 octobre 2014 12
9 mars 2006 à 15:10
salut;

les tableaux commencent à 0
donc
ExtFile = Tabl(UBound(Tabl)-1)

BasicInstinct
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
9 mars 2006 à 16:10
ca ne change rien....
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
9 mars 2006 à 16:18
Salut,
Comment tu as déclaré Tabl ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
9 mars 2006 à 16:20
Dim Tabl() As String
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
9 mars 2006 à 16:34
j'ai retravailler le code:

Option Explicit
Dim direct As String
Dim std As String
Dim org As String
Dim PreviousFile As String
Dim ExtFile As Variant
Dim Tabl() As String
Dim supr As String
Private Sub CmdContinu_Click()
ReDim Tabl(UBound(Tabl) - 1)

PreviousFile = ""
direct = MainForm.DirList.Path
std = Dir(direct, vbNormal)
org = direct
'récupérer l'extention
Tabl = Split(std, ".")
ExtFile = Tabl()

MsgBox "travail en cour", vbMsgBoxSetForeground

While std <> PreviousFile
PreviousFile = std
For Each ExtFile In Tabl()
MkDir direct & ExtFile
Next
Call DéplacerFichier(org & std, org & ExtFile & "")
std = Dir(direct, vbNormal)
Wend

MsgBox "Opérations terminés", vbInformation

mais le problème est toujours le même
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
9 mars 2006 à 17:25
Quelques petites corrections:

Dim ExtFile As String
......
ReDim Tabl(UBound(Tabl))
......
ExtFile = Tabl(UBound(Tabl)-1)
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
9 mars 2006 à 17:28
après les changement, il me pointe sur EXTFILE sur For.....Each et me met qu'il lui faut un type variant
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
9 mars 2006 à 17:31
et si je met DIM EXTFILE As VARIANT , la il me remet le message d'erreur de tou a l'heure
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
9 mars 2006 à 19:22
Il y a beaucoup de chose à modifier. Le but final de ce code est de faire quoi ?
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
9 mars 2006 à 23:08
salut,

désolé j'ai même pas tout lu, trop confut tout çà....

donne un exemple de ce que tu reçois au click (genre "machin.txt") et ce que tu voudrais obtenir ("DOSSIER_TXT").



à savoir que Split n'est pas une solution miracle (consomme beaucoup de resource). sans compter qu'il faut un erase.

donc remplacer le tout par instrrev.

++
0
phenX Messages postés 704 Date d'inscription mercredi 4 mai 2005 Statut Membre Dernière intervention 28 août 2012
10 mars 2006 à 09:55
bravo! ca marche bien
merci
0
Rejoignez-nous