qui pourrait me faire ou me trouver ce petit utilitaire?! - Logiciels - Windows & Software
Marsh Posté le 09-12-2002 à 19:07:08
tu déplaces tout sur une autre partition puis tu redéplace vers la partition d'origine
Marsh Posté le 09-12-2002 à 19:13:20
windows quand il déplace ne respecte pas l'ordre alphabétique... il fait en fonction des derniers installés!!!!
donc dans l'ordre du temps...
j'ai pas arrêter de faire des transferts complet de dossiers ces derniers temps d'un HDD à un autre...(pas d'une lettre lecteur à une autre...)
essayes tu verras....
je ne sais même pas si les antivirus... font le check dans l'ordre du temps??
Marsh Posté le 09-12-2002 à 19:13:51
nan ça marche pas
il les recopie dans le sens ou il les lit
(déjà testé)
Marsh Posté le 09-12-2002 à 19:21:27
pas compris?!
dans le sens où il les lit?!
tu veux dire qu'il lit ce qui se trouve devant sa tête en fonction de son déplacement sur le HDD...
et non en s'occupant de l'ordre alphabètique?
Marsh Posté le 09-12-2002 à 22:09:44
ça dépend avec quoi et comment on copie
suffit de faire un drag & drop de l'ensemble de la sélection des fichiers plutôt que tu dossier lui même
bitonio6 a écrit : |
justement j'ai essayé
mais faut pas juste essayer, faut aussi réfléchir à la logique des systèmes de copie
Marsh Posté le 10-12-2002 à 02:06:38
antp a écrit : ça dépend avec quoi et comment on copie |
a mon avis ca marche
pour la defrag la copie d un disk a l autre c connu mais la ton probleme est un peu plus complexe mais je dirai comme antp
Marsh Posté le 10-12-2002 à 13:26:41
comment ça?! drag & drop`???
tu veux faire une recherche avant et tout sélectionner?!
et si j'ai plus de 20'000fichier dans 4'000 Dossiers?!
je suis sûr que l'on peut créer un programme qui ferait le surveillant et qui s'occuperait de donner à copier (ou couper) les choses dans un ordre logique....
Marsh Posté le 10-12-2002 à 13:51:24
bah oui c'est faisable... mais bon faut trouver quelqu'un qui a rien d'autre à faire
Marsh Posté le 12-12-2002 à 17:45:16
Voici une macro que tu peux utiliser sous excel .
Oups !! petite erreur dans la macro .
elle ne classe bien que s'il y a moins de 10 dossiers/sous-dossiers (faut toujours tester correctement ) . je l'ai donc supprimée et remplacée par une version OK listée dans un reply plus bas.
les dossiers OLD et NEW sont indiqués pour l'exemple.
par contre pour des raisons de sécurité il faut que le dossier NEW n'existe pas et soit éventuellement supprimé manuellement avant de lancer la macro (la macro ne l'écrase pas)
Marsh Posté le 12-12-2002 à 18:55:37
Avec windows/total commander www.ghisler.com, tu utilises la fonction de synchronisation de répertoire dans le menu "commandes". Tu mets d'un coté le répertoire "racine", de l'autre le répertoire de destination, tu demande la comparaison. Evidemment, il va trouver qu'il faut tout synchroniser, ce que tu fais immédiatement, et il te copie les répertoire et les fichiers par ordre alphabétique.
En plus, il sait faire plein d'autres trucs ce logiciel.
Marsh Posté le 12-12-2002 à 20:12:17
donc pour le programme...
ce truc va me copier mes dossiers classés dans l'ordre...
sur le hdd source... mais qui en réalité est ranger en mettant dessous les fichiers plus récents...
en me transporant le tout vers le hdd de destination...
en tenant compte cette fois de l'ordre alphabétique du classement de mes dossiers?
Dossier A --> sous dossier A --> sous-sous dossier A -- Fichier a-->b--->c
Dossier A --> sous dossier A --> sous-sous dossier B -- Fichier a-->b-->c
on est d'accord?
Marsh Posté le 13-12-2002 à 10:11:02
je pense qu'on est d'accord / néanmoins je donne deux exemples qui illustrent deux manières différentes de voir les choses
1 ere manière : création de tous les dossiers/sous-dossiers puis recopie de tous les fichiers selon la séquence ci-dessous :
dossier A
dossier A\C
dossier A\C\H
dossier A\K
dossier A\K\B
dossier A\K\Z (peut être vide)
dossier A\U
fichier A\aaaaaaa
fichier A\bbbbbbbb
fichier A\ffffffff
fichier A\wwwwwww
fichier A\C\aaaaaa
fichier A\C\lllllll
fichier A\C\zzzzzzzzz
fichier A\C\H\bbbbbbbb
fichier A\C\H\uuuuuuu
fichier A\K\B\aaa
fichier A\K\B\bbb
fichier A\U\aaaa
fichier A\U\gggggg
2 ème manière : mixage des créations des dossiers/sous-dossiers et des recopies de tous les fichiers en triant uniquement sur le nom (et non plus sur le type en majeur)
dossier A
fichier A\aaaaaaa
fichier A\bbbbbbbb
fichier A\ffffffff
fichier A\wwwwwww
dossier A\C
fichier A\C\aaaaaa
fichier A\C\lllllll
fichier A\C\zzzzzzzzz
dossier A\C\H
fichier A\C\H\bbbbbbbb
fichier A\C\H\uuuuuuu
dossier A\K
dossier A\K\B
fichier A\K\B\aaa
fichier A\K\B\bbb
dossier A\K\Z (peut être vide)
dossier A\U
fichier A\U\aaaa
fichier A\U\gggggg
la macro proposée dans le reply ci-dessous offre les deux possibilités.
A+
Marsh Posté le 13-12-2002 à 12:06:20
Oups !! petite erreur dans la macro proposée plus haut(et donc supprimée). elle ne classait bien qu'avec moins de 10 dossiers/sous-dossiers.
Voici une version sans limitation autre que celle d'Excel (nb de lignes max )
'============
Sub Reclass()
'
' Reclass Macro
' Macro enregistrée le 13/12/2002 par Deffaud Edgard
'
Class_type = MsgBox("voulez-vous créer d'abord tous les dossiers/sous-dossiers" & vbLf & "puis" & vbLf & _
"recopier les fichiers", vbYesNo, "reclassement" )
Do
In_path = InputBox("chemin du dossier d'entrée à reclasser", "reclassement", "C:\windows\bureau\old\" )
If In_path = "" Then Exit Sub
If Right(In_path, 1) <> "\" Then In_path = In_path & "\"
If Dir(In_path) = "" Then MsgBox "Le dossier à reclasser ==> " & In_path & vbLf & "n'existe pas, merci de corriger "
Loop Until Dir(In_path) <> ""
Outpath = InputBox("chemin du dossier de sortie à recréer", "reclassement", "C:\windows\bureau\new\" )
If Outpath = "" Then Exit Sub
If Right(Outpath, 1) <> "\" Then Outpath = Outpath & "\"
If Dir(Outpath) <> "" Then
MsgBox "Le dossier de sortie ==> " & Outpath & vbLf & "existe déjà, merci de le supprimer "
Exit Sub
End If
i_niveau = 0 ' profondeur des dossiers
i_row = 2
'RAZ colonnes de travail
' on peut supprimer uniquement de "A à D" sauf que
' ":" suivi de "D" donne sur le forum
' jai donc mis de "A à E"
Columns("A:E" ).Select
Selection.Delete Shift:=xlToLeft
Cells(1, 1) = "dir"
Cells(1, 2) = 0
Cells(1, 3) = In_path
Cells(1, 4) = Outpath
Do While Cells(1, 1) = "dir"
i_niveau = i_niveau + 1
Cells(1, 2) = i_niveau
In_path = Cells(1, 3)
Outpath = Cells(1, 4)
MyName = Dir(In_path, vbDirectory)
Do While MyName <> "" ' Commence la boucle.
' Ignore le répertoire courant et le répertoire
' contenant le répertoire courant.
If MyName <> "." And MyName <> ".." Then
Rows(i_row).Insert
Cells(i_row, 2) = i_niveau
' Utilise une comparaison au niveau du bit pour
' vérifier que MyName est un répertoir
If (GetAttr(In_path & MyName) _
And vbDirectory) = vbDirectory Then
' représente un répertoire.
Cells(i_row, 1) = "dir"
Cells(i_row, 3) = In_path & MyName & "\"
Cells(i_row, 4) = Outpath & MyName & "\"
i_row = i_row + 1
Else
' représente un fichier
Cells(i_row, 1) = "file_" ' & i_niveau
Cells(i_row, 3) = In_path & MyName
Cells(i_row, 4) = Outpath & MyName
i_row = i_row + 1
End If
End If
MyName = Dir ' Extrait l'entrée suivante.
Loop
Cells(1, 1) = "Dir_Ok" 'indication que le dossier a été traité
Worksheets(1).Range("A1" ).Sort _
Key1:=Worksheets(1).Columns("A" ), Key2:=Worksheets(1).Columns("B" ), Key3:=Worksheets(1).Columns("C" )
Loop
' reclassement en fct du choix du type
If Class_type = vbNo Then
Worksheets(1).Range("A1" ).Sort _
Key1:=Worksheets(1).Columns("B" ), Key2:=Worksheets(1).Columns("A" ), Key3:=Worksheets(1).Columns("C" )
End If
i = 1
Do Until Cells(i, 1) = ""
If Left(Cells(i, 1), 3) = "Dir" Then
MkDir (Cells(i, 4))
Else
FileCopy Cells(i, 3), Cells(i, 4)
End If
i = i + 1
Loop
End Sub
Marsh Posté le 13-12-2002 à 17:12:29
Edma a écrit : je pense qu'on est d'accord / néanmoins je donne deux exemples qui illustrent deux manières différentes de voir les choses |
c'est cette fa4on qui est la plus proche...
le but c'est que ça se fasse dans l'horizontale des dossiers et non la verticale...
d'ailleurs comme je l'avais expliquer en dessus....
quand tu fais l'arbre de l'explorateur
et qe tu ouvre tout les [+]
tu en vois un qui en ouvre un autre qui en ouvre un autre et ainsi de suite....
Marsh Posté le 19-12-2002 à 10:18:14
Oki, dans ce cas tu réponds non à la première question posée par la macro...
Marsh Posté le 20-12-2002 à 00:59:38
ben pour l'instant je n'ai pas testé...
et en plus je ne sais pas comment voir les résultats (si il copie dans le bon sens ou si il en fait encore à sa tête)
pour moi il y a un rangement horizontal et vertical des fichiers et dossiers...
le but et de faire horizontal....
tout ce qui est de gauche à droite avant de passer à la ligne suivante...
(c'est à tester, peut-être que ce n'est pas super, mais je pense que ce serait l'ideal)
-Dossier A (forcement c'est lui qui contient la suite)
-sous dossier A De A
-sous dossier A Du sous dossier A de A
(ouh la! j'ai déjà mal à la tête)
-fichiers du sous-dossier A du sous-dossier A de A
-ensuite sous dossier B du sous dossier A de A
-fichiers du sous-dossier B du sous dossier A de A
plus de sous-sous-dossier de A
-fichiers du sous dossier A de A
plus de sous dossier de A
-sous dossier B de A
Tu vois le trucs...
tu crée en horizontal et tu remplis et ferme en premier ce qui se trouve le plus à droite
avant de revenir sur la gauche, pour t'interresser au dossier principal suivant... voilà
Marsh Posté le 20-12-2002 à 09:34:11
Je confirme : tu réponds non à la 1ère question (voulez-vous créer d'abord tous les dossiers/sous-dossiers..)
La création de dossiers et la recopie des fichiers se fait par élément par élément en respectant leur ordre alphabétique (la séquence de création/recopie est pilotée par les colonnes du tableur Excel (tu peux donc vérifier le bon ordre)
- MkDir (Cells(i, 4)) crée le répertoire dont le nom se trouve dans la colonne 4 (un nom par ligne)
- FileCopy Cells(i, 3), Cells(i, 4) recopie les fichiers indiqués dans la colonne 3 vers les fichiers indiqués dans la colonne 4 (toujours un nom par ligne)
La seule façon de vérifier le résultat concret est peut être de chronométrer les mêmes opérations sur le dossier de départ puis sur le dossier d'arrivée (ou d'enregister le bruit des déplacements du DD )
Marsh Posté le 20-12-2002 à 20:19:23
tu sais si il y a moyen de vérifier comment les infos sont contenues sur un HDD ou un CD?
sinon je ne fais pas de programmation...
je demandais si quelqu'un pouvait me faire un petit "EXE"!!
voilà mais merci de ton aide ça fait plaisir!!!
Marsh Posté le 23-12-2002 à 10:19:48
Non je ne connais pas les sructures des CD et HDD
Pour la programmation, la macro que j'ai indiquée est prête à l'emploi.
Pour te faciliter la tâche je t'envoie un fichier Excel prêt à être exécuté et qui contient déjà la macro
il suffit que tu ouvres avec Excel (tu coches la case activer les macros lors de l'ouverture du fichier si nécessaire), puis tu cliques sur le Bouton "GO"
Marsh Posté le 24-12-2002 à 00:37:31
et on ne peut pas imaginer... un petit "exe" et une interface?!
Marsh Posté le 24-12-2002 à 00:38:47
pas avec du VBA pour Excel
Marsh Posté le 24-12-2002 à 09:48:37
je t'ai envoyé en mail un fichier excel avec un "bouton" pour exécuter la macro (ou le programme si tu préfères). il suffit donc que tu aies excel
Je ne garantis pas l'absence absolue de bug, notamment si le nb de fichiers atteint les limites d'excel, j'ai en ai déjà corrigé plusieurs.. fichiers cachés, etc,
par contre :
1 - je garantie qu'il n'y a aucun risque pour les dossiers et fichiers à reclasser....
2 - c'est sûr c'est pas le pied, c'est tres long. un vrai programme serait plus performant
3 - j'ai constaté que si on recopie une deuxième fois le dossier créé par une première exécution, alors c'est beaucoup plus rapide, ce qui démontre bien l'intérêt du classement des fichiers
Si une âme charitable et compétente veut faire un vrai programme je mets ci-dessous la dernière version de la macro (je pense que la cinématique est intéressante)
=======
Sub Reclass()
'
' Reclass Macro
' Macro enregistrée le 13/12/2002 par Deffaud Edgard
' permet de recopier un dossier avec ses sous-dossiers en respectant physiquement l'ordre alphabétque
'
' ce qui permettra d'optimiser toute lecture du contenu du dossier, triée par ordre alphabétique
Class_type = MsgBox("voulez-vous créer d'abord tous les dossiers/sous-dossiers" & vbLf & "puis" & vbLf & _
"recopier les fichiers", vbYesNo + vbDefaultButton2, "reclassement" )
Do
In_path = InputBox("chemin du dossier d'entrée à reclasser" & vbLf & "par exemple :", "reclassement", "C:\windows\bureau\old\" )
If In_path = "" Then Exit Sub
If Right(In_path, 1) <> "\" Then In_path = In_path & "\"
If Dir(In_path, vbDirectory) = "" Then MsgBox "Le dossier à reclasser ==> " & In_path & vbLf & "n'existe pas, merci de corriger "
Loop Until Dir(In_path, vbDirectory) <> ""
Outpath = InputBox("chemin du dossier de sortie à recréer" & vbLf & "par exemple :", "Recopie classée", "C:\windows\bureau\new\" )
If Outpath = "" Then Exit Sub
If Right(Outpath, 1) <> "\" Then Outpath = Outpath & "\"
If Dir(Outpath, vbDirectory) <> "" Then
MsgBox "Le dossier de sortie ==> " & Outpath & vbLf & "existe déjà, merci de le supprimer "
Exit Sub
End If
i_niveau = 0 ' profondeur des dossiers
i_row = 2
'RAZ colonnes de travail pour plus de sécurité
Columns("A:E" ).Select ' on peut se limiter de "A" à "D"
Selection.Delete Shift:=xlToLeft
Cells(1, 1) = "dir"
Cells(1, 2) = 0
Cells(1, 3) = In_path
Cells(1, 4) = Outpath
Do While Cells(1, 1) = "dir"
i_niveau = i_niveau + 1
Cells(1, 2) = i_niveau
In_path = Cells(1, 3)
Outpath = Cells(1, 4)
MyName = Dir(In_path, vbDirectory + vbHidden + vbNormal + vbSystem)
Do While MyName <> "" ' Commence la boucle.
' Ignore le répertoire courant et le répertoire
' contenant le répertoire courant.
If MyName <> "." And MyName <> ".." Then
Rows(i_row).Insert
Cells(i_row, 2) = i_niveau
' Utilise une comparaison au niveau du bit pour
' vérifier que MyName est un répertoir
If (GetAttr(In_path & MyName) _
And vbDirectory) = vbDirectory Then
' représente un répertoire.
Cells(i_row, 1) = "dir"
Cells(i_row, 3) = In_path & MyName & "\"
Cells(i_row, 4) = Outpath & MyName & "\"
i_row = i_row + 1
Else
' représente un fichier
Cells(i_row, 1) = "file_" ' & i_niveau
Cells(i_row, 3) = In_path & MyName
Cells(i_row, 4) = Outpath & MyName
i_row = i_row + 1
End If
End If
MyName = Dir ' Extrait l'entrée suivante.
Loop
Cells(1, 1) = "Dir_Ok" 'indication que le dossier a été traité
Worksheets(1).Range("A1" ).Sort _
Key1:=Worksheets(1).Columns("A" ), Key2:=Worksheets(1).Columns("B" ), Key3:=Worksheets(1).Columns("C" )
Loop
' reclassement en fct du choix du type
If Class_type = vbNo Then
Worksheets(1).Range("A1" ).Sort _
Key1:=Worksheets(1).Columns("B" ), Key2:=Worksheets(1).Columns("A" ), Key3:=Worksheets(1).Columns("C" )
End If
' compteur de création de dossiers
i_Dir = -1 ' on ne copte pas le dossier de plus haut niveau
' compteur de recopie de fichiers
i_File = 0
i = 1
Do Until Cells(i, 1) = ""
If Left(Cells(i, 1), 3) = "Dir" Then
MkDir (Cells(i, 4))
i_Dir = i_Dir + 1
Else
FileCopy Cells(i, 3), Cells(i, 4)
i_File = i_File + 1
End If
i = i + 1
Loop
MsgBox "nombre de dossiers créés : " & i_Dir & vbCrLf & _
"nombre de fichiers copiés : " & i_File, vbOKOnly, "Recopie classée"
End Sub
Marsh Posté le 25-12-2002 à 11:39:28
je ne m'y connais pas assez en programmation...
mais je peux te dire en gros... que tu cherches trop loins...
je pense qu'une simple action de contrôle sur ce qui part... (copier)
suffirait..
il suffit de prendre les choses dans l'ordre que je t'ai indiqué...
pour le rest (coller) je pense que si il les prends dans le bon ordre il ne peut que les déposer en suivant!!!
c'est un peu comme définir l'ordre de la musique sur un CD audio...
il faut juste expliquer à l'ordinateur comment gérer l'ordre...
par exemple:
quand on classe des fichiers qui contiennent dans le nom... une date... il faut classer comme des anglais... "année,Mois, Jour"
sinon on ne peut pas les avoir dans l'ordre croissant!!!
parce que il les classera d'abord dans l'ordre de jour...
le 17 décembre 2002 sera pour lui plus jeune que le 19 octobre 1997...
alors nous aussi nous devons apprendre comment on classe les dossiers et fichiers....
je crois que windows gère très bien l'ordre alphabétique...
donc lui dire de copier dans cette ordre en y rajoutant... l'ordre horizontal.... récursif (je crois que c'est comme ça que l'on dit, mais je n'en suis pas sûr)
et c'est à windows de créer les fichiers qui sont nouveaux dans leur destination...
mais je ne veux pas qu'il crée d'abord les dossiers et sous-dossiers, ça ce n'est pas juste non plus....
ça crée un squelette... qui par la suite va s'habiller...
Dossiers 24 et sous-dossiers 6'675 sur 3 niveaux...
je veux ouvrir le sous dossier qui se trouve dans le 13ème dossier du 15ème sous dossier de premier niveau du 9ème sous-sous-dossier de 2ème niveau et 3ème sous-sous-sous-dossier de 3ème niveaux...
à première vue ça à l'air juste.. mais en Hardware... les dossiers et sous dossiers seront en premier.. suivi en vrack des fichiers de tous les dossiers et sous-dossiers!!
alors que ce que je veux c'est:
01= D[1]->SD[1]->SSD[1]->SSSD[1]->SSSSD[1]->Fichiers
02= D[1]->SD[1]->SSD[1]->SSSD[1]->SSSSD[2]->Fichiers
03= D[1]->SD[1]->SSD[1]->SSSD[1]->Fichiers
04= D[1]->SD[1]->SSD[1]->SSSD[2]->SSSSD[1]->Fichiers
05= D[1]->SD[1]->SSD[1]->SSSD[2]->SSSSD[2]->Fichiers
06= D[1]->SD[1]->SSD[1]->SSSD[2]->Fichiers
07= D[1]->SD[1]->SSD[1]->Fichiers
08= D[1]->SD[2]->SSD[1]->SSSD[1]->SSSSD[1]->Fichiers
09= D[1]->SD[2]->SSD[1]->SSSD[1]->SSSSD[2]->Fichiers
10= D[1]->SD[2]->SSD[1]->SSSD[1]->Fichiers
11= D[1]->SD[2]->SSD[1]->Fichiers
12= D[1]->SD[2]->Fichiers
13= D[1]->Fichiers
14= D[2]->SD[1]->SSD[1]->SSSD[1]->SSSSD[1]->Fichiers
Voilà comment j'imagine cela...
Ps. quelqu'un peu me dire à quoi sert "diskcopy.dll" et "diskcopy.bat" ?
Marsh Posté le 25-12-2002 à 11:40:20
bitonio6 a écrit : |
à faire des copies de disquettes
Marsh Posté le 25-12-2002 à 13:59:17
ah bon... et pourquoi a-t-il besoin d'un utilitaire pour faire ça?!
sinon il n'y a pas un utilitaire pour faire des copier-coller?
Marsh Posté le 25-12-2002 à 20:36:18
bitonio6 a écrit : ah bon... et pourquoi a-t-il besoin d'un utilitaire pour faire ça?! |
bhen tu fais comment sinon ?
pcq copier bêtement les fichiers faut espérer que la disquette n'ait pas un secteur de boot ou autre particularité non présente sous forme de fichier...
Marsh Posté le 26-12-2002 à 09:07:27
Je ne peux que confirmer ce que fait la macro lorsqu'on clique sur "Non" à la première question.
Elle recopie les fichiers dans l'ordre alphabétique et crée "au passage" les sous-dossiers nécessaires en respectant l'ordre alphabétique,...
alors que ton besoin est un peu différent, si on se réferre à ton exemple :
01= D[1]->SD[1]->SSD[1]->SSSD[1]->SSSSD[1]->Fichiers
02= D[1]->SD[1]->SSD[1]->SSSD[1]->SSSSD[2]->Fichiers
03= D[1]->SD[1]->SSD[1]->SSSD[1]->Fichiers
...
tu souhaites créer à l'intérieur d'un dossier par exemple SSSD[1] d'abord les sous-dossiers internes (SSSSD[1] et SSSSD[2] et leur contenu), puis les simples fichiers ...
A+ pour une solution.
Marsh Posté le 26-12-2002 à 11:14:31
Voici une solution explicitée par un exemple actualisé par rapport au pb de bitonio6 :
si l'ordre de classement ci-dessous te convient :
C:\new\
C:\new\D1\
C:\new\D1\SD1\
C:\new\D1\SD1\SSD1\
C:\new\D1\SD1\SSD1\SSSD1\
C:\new\D1\SD1\SSD1\SSSD1\SSSSD1\
C:\new\D1\SD1\SSD1\SSSD1\SSSSD1\Asd01.txt
C:\new\D1\SD1\SSD1\SSSD1\SSSSD1\Xsd01.txt
C:\new\D1\SD1\SSD1\SSSD1\SSSSD2\
C:\new\D1\SD1\SSD1\SSSD1\SSSSD2\Asd02.txt
C:\new\D1\SD1\SSD1\SSSD1\SSSSD2\Xsd02.txt
C:\new\D1\SD1\SSD1\SSSD1\Asd03.txt
C:\new\D1\SD1\SSD1\SSSD1\Xsd03.txt
C:\new\D1\SD1\SSD1\SSSD2\
C:\new\D1\SD1\SSD1\SSSD2\SSSSD1\
C:\new\D1\SD1\SSD1\SSSD2\SSSSD1\Asd04.txt
C:\new\D1\SD1\SSD1\SSSD2\SSSSD1\Xsd04.txt
C:\new\D1\SD1\SSD1\SSSD2\SSSSD2\
C:\new\D1\SD1\SSD1\SSSD2\SSSSD2\Asd05.txt
C:\new\D1\SD1\SSD1\SSSD2\SSSSD2\Xsd05.txt
C:\new\D1\SD1\SSD1\SSSD2\Asd06.txt
C:\new\D1\SD1\SSD1\SSSD2\Xsd06.txt
C:\new\D1\SD1\SSD1\Asd07.txt
C:\new\D1\SD1\SSD1\Xsd07.txt
C:\new\D1\SD2\
C:\new\D1\SD2\SSD1\
C:\new\D1\SD2\SSD1\SSSD1\
C:\new\D1\SD2\SSD1\SSSD1\SSSSD1\
C:\new\D1\SD2\SSD1\SSSD1\SSSSD1\Asd08.txt
C:\new\D1\SD2\SSD1\SSSD1\SSSSD1\Xsd08.txt
C:\new\D1\SD2\SSD1\SSSD1\SSSSD2\
C:\new\D1\SD2\SSD1\SSSD1\SSSSD2\Asd09.txt
C:\new\D1\SD2\SSD1\SSSD1\SSSSD2\Xsd09.txt
C:\new\D1\SD2\SSD1\SSSD1\Asd10.txt
C:\new\D1\SD2\SSD1\SSSD1\Xsd10.txt
C:\new\D1\SD2\SSD1\Assd11.txt
C:\new\D1\SD2\SSD1\Xssd11.txt
C:\new\D1\SD2\Asd12.txt
C:\new\D1\SD2\Xsd12.txt
C:\new\D1\Ad13.txt
C:\new\D1\Xd13.txt
C:\new\D2\
C:\new\D2\SD1\
C:\new\D2\SD1\SSD1\
C:\new\D2\SD1\SSD1\SSSD1\
C:\new\D2\SD1\SSD1\SSSD1\SSSSD1\
C:\new\D2\SD1\SSD1\SSSD1\SSSSD1\Asd14.txt
C:\new\D2\SD1\SSD1\SSSD1\SSSSD1\Xsd14.txt
la macro suivante (revue le 30/12) effectue ce travail :
Sub Reclass()
'
' Reclass Macro
' Macro enregistrée le 26/12/2002 par Deffaud Edgard
' permet de recopier un dossier avec ses sous-dossiers en respectant physiquement l'ordre alphabétque
'
' ce qui permettra d'optimiser toute lecture du contenu du dossier, triée par ordre alphabétique
Do
In_path = InputBox("chemin du dossier d'entrée à reclasser" & vbLf & "par exemple :", "reclassement", "C:\windows\bureau\old\" )
If In_path = "" Then Exit Sub
If Right(In_path, 1) <> "\" Then In_path = In_path & "\"
If Dir(In_path, vbDirectory) = "" Then MsgBox "Le dossier à reclasser ==> " & In_path & vbLf & "n'existe pas, merci de corriger "
Loop Until Dir(In_path, vbDirectory) <> ""
Outpath = InputBox("chemin du dossier de sortie à recréer" & vbLf & "par exemple :", "Recopie classée", "C:\windows\bureau\new\" )
If Outpath = "" Then Exit Sub
If Right(Outpath, 1) <> "\" Then Outpath = Outpath & "\"
If Dir(Outpath, vbDirectory) <> "" Then
MsgBox "Le dossier de sortie ==> " & Outpath & vbLf & "existe déjà, merci de le supprimer "
Exit Sub
End If
i_niveau = 0 ' profondeur des dossiers
i_row = 2
'RAZ colonnes de travail
Columns("A:E" ).Select
Selection.Delete Shift:=xlToLeft
Cells(1, 1) = "dir"
Cells(1, 2) = 0
Cells(1, 3) = In_path
Cells(1, 5) = Outpath
Do While Cells(1, 1) = "dir"
i_niveau = i_niveau + 1
Cells(1, 2) = i_niveau
In_path = Cells(1, 3)
Outpath = Cells(1, 5)
MyName = Dir(In_path, vbDirectory + vbHidden + vbNormal + vbSystem)
Do While MyName <> "" ' Commence la boucle.
' Ignore le répertoire courant et le répertoire
' contenant le répertoire courant.
If MyName <> "." And MyName <> ".." Then
Rows(i_row).Insert
Cells(i_row, 2) = i_niveau
' Utilise une comparaison au niveau du bit pour
' vérifier que MyName est un répertoir
If (GetAttr(In_path & MyName) _
And vbDirectory) = vbDirectory Then
' représente un répertoire.
Cells(i_row, 1) = "dir"
Cells(i_row, 3) = In_path & MyName & "\"
Cells(i_row, 4) = Chr(0)
Cells(i_row, 5) = Outpath & MyName & "\"
i_row = i_row + 1
Else
' représente un fichier
Cells(i_row, 1) = "file_" ' & i_niveau
Cells(i_row, 3) = In_path & Chr(255)
Cells(i_row, 4) = MyName
Cells(i_row, 5) = Outpath & MyName
i_row = i_row + 1
End If
End If
MyName = Dir ' Extrait l'entrée suivante.
Loop
Cells(1, 1) = "Dir_Ok" 'indication que le dossier a été traité
Worksheets(1).Columns("A:E" ).Sort _
Key1:=Worksheets(1).Columns("A" ), Key2:=Worksheets(1).Columns("B" ), Key3:=Worksheets(1).Columns("C" )
Loop
Worksheets(1).Columns("A:E" ).Sort _
Key1:=Worksheets(1).Columns("C" ), Key2:=Worksheets(1).Columns("D" )
' compteur de création de dossiers
i_Dir = -1 ' on ne copte pas le dossier de plus haut niveau
' compteur de recopie de fichiers
i_File = 0
i = 1
Do Until Cells(i, 1) = ""
If Left(Cells(i, 1), 3) = "Dir" Then
MkDir (Cells(i, 5))
i_Dir = i_Dir + 1
Else
FileCopy Left(Cells(i, 3), Len(Cells(i, 3)) - 1) & Cells(i, 4), Cells(i, 5)
i_File = i_File + 1
End If
i = i + 1
Loop
MsgBox "nombre de dossiers créés : " & i_Dir & vbCrLf & _
"nombre de fichiers copiés : " & i_File, vbOKOnly, "Recopie classée"
End Sub
es-tu intéressé par un fichier excel qui permette d'exécuter cette macro ?
Marsh Posté le 28-12-2002 à 11:54:02
non ce n'est pas comme ça que je le souhaite...
j'aimerai qu'il ne créée que les dossier et sous-dossier qui se trouvent sur la même ligne verticale!!!
comme montrer dans mon exemple...
on va tout au bout de la première ligne et on pose les fichiers dans le tout dernier sous dossier.... en 1er!!!
ensuite on revient sur la droite... et on y dépose les autres fichiers et ainsi de suite!!!
comme je te l'ai décrit!!!
mais je te remercie des ton envie de trouver la solution!!
Marsh Posté le 30-12-2002 à 15:12:01
On approche,....
J'ai recréé ton exemple et j'ai exécuté la macro listée ci-dessus, laquelle crée les dossiers et recopie les fichiers dans l'ordre indiqué ci-dessous
. Si ce n'est pas le bon ordre peux-tu me faire une liste qui indique l'ordre souhaité.
00 création C:\new\ (dossier de plus haut niveau)
01 création C:\new\D1\
02 création C:\new\D1\SD1\
03 création C:\new\D1\SD1\SSD1\
04 création C:\new\D1\SD1\SSD1\SSSD1\
05 création C:\new\D1\SD1\SSD1\SSSD1\SSSSD1\
06 recopie C:\new\D1\SD1\SSD1\SSSD1\SSSSD1\Asd01.txt
07 recopie C:\new\D1\SD1\SSD1\SSSD1\SSSSD1\Xsd01.txt
08 création C:\new\D1\SD1\SSD1\SSSD1\SSSSD2\
09 recopie C:\new\D1\SD1\SSD1\SSSD1\SSSSD2\Asd02.txt
10 recopie C:\new\D1\SD1\SSD1\SSSD1\SSSSD2\Xsd02.txt
11 recopie C:\new\D1\SD1\SSD1\SSSD1\Asd03.txt
12 recopie C:\new\D1\SD1\SSD1\SSSD1\Xsd03.txt
13 création C:\new\D1\SD1\SSD1\SSSD2\
14 création C:\new\D1\SD1\SSD1\SSSD2\SSSSD1\
15 recopie C:\new\D1\SD1\SSD1\SSSD2\SSSSD1\Asd04.txt
16 recopie C:\new\D1\SD1\SSD1\SSSD2\SSSSD1\Xsd04.txt
17 création C:\new\D1\SD1\SSD1\SSSD2\SSSSD2\
18 recopie C:\new\D1\SD1\SSD1\SSSD2\SSSSD2\Asd05.txt
19 recopie C:\new\D1\SD1\SSD1\SSSD2\SSSSD2\Xsd05.txt
20 recopie C:\new\D1\SD1\SSD1\SSSD2\Asd06.txt
21 recopie C:\new\D1\SD1\SSD1\SSSD2\Xsd06.txt
22 recopie C:\new\D1\SD1\SSD1\Asd07.txt
23 recopie C:\new\D1\SD1\SSD1\Xsd07.txt
24 création C:\new\D1\SD2\
25 création C:\new\D1\SD2\SSD1\
26 création C:\new\D1\SD2\SSD1\SSSD1\
27 création C:\new\D1\SD2\SSD1\SSSD1\SSSSD1\
28 recopie C:\new\D1\SD2\SSD1\SSSD1\SSSSD1\Asd08.txt
29 recopie C:\new\D1\SD2\SSD1\SSSD1\SSSSD1\Xsd08.txt
30 création C:\new\D1\SD2\SSD1\SSSD1\SSSSD2\
31 recopie C:\new\D1\SD2\SSD1\SSSD1\SSSSD2\Asd09.txt
32 recopie C:\new\D1\SD2\SSD1\SSSD1\SSSSD2\Xsd09.txt
33 recopie C:\new\D1\SD2\SSD1\SSSD1\Asd10.txt
34 recopie C:\new\D1\SD2\SSD1\SSSD1\Xsd10.txt
35 recopie C:\new\D1\SD2\SSD1\Assd11.txt
36 recopie C:\new\D1\SD2\SSD1\Xssd11.txt
37 recopie C:\new\D1\SD2\Asd12.txt
38 recopie C:\new\D1\SD2\Xsd12.txt
39 recopie C:\new\D1\Ad13.txt
40 recopie C:\new\D1\Xd13.txt
41 création C:\new\D2\
42 création C:\new\D2\SD1\
43 création C:\new\D2\SD1\SSD1\
44 création C:\new\D2\SD1\SSD1\SSSD1\
45 création C:\new\D2\SD1\SSD1\SSSD1\SSSSD1\
46 recopie C:\new\D2\SD1\SSD1\SSSD1\SSSSD1\Asd14.txt
47 recopie C:\new\D2\SD1\SSD1\SSSD1\SSSSD1\Xsd14.txt
Marsh Posté le 30-12-2002 à 15:43:05
Oki
Je t'envoie un mail avec le fichier excel en pièce jointe;
tu l'ouvres puis tu cliques sur GO !
edit de 15h53 :
enregistre le fichier excel et mets-le en read-only. Cela t'éviteras de le modifier inutilement.
en fin d'exécution la colonne "E" du tableau contient la liste reclassée des créations et recopies des dossiers/fichiers
Marsh Posté le 30-12-2002 à 22:54:06
merci pour ton travail...
enfin je ne vais pas le tester tout de suite...
je ne suis pas sûr... de moi...
alors j'ai des trucs important à régler d'abord....
et sinon il y a une limite à la quantité? (de fichiers copier)
Marsh Posté le 31-12-2002 à 10:03:08
La limite est celle d'excel . Chaque ligne du tableau contient soit le nom du dossier à créer soit le nom du fichier à recopier.
on est donc limité par le nb maximum de lignes que peut gérer excel .... Par contre pour de gros volumes (en nombre et en taille de fichiers), cela prendra un temps certain. je ferai un de ces quatre une version qui indique l'avancement du processus de recopie.
Bonne année 2003 à tous
Marsh Posté le 31-12-2002 à 11:16:52
ah bon gars il y a une solution très simple :
Tu télécharges le programme Windows Commander
qu iest un gestion de fichiers (comme le bon vieux Directory Opus etDiskmaster sur Amiga...)
Tu excécute Windows Comander,
Tu sélectionnes ensuite ton ou tes répertoires
Dans le menu Fichier, tu as 'Attributs/propriétés' des fichieirs
Tu coches ce que tu veux ou pas
et surtout en bas, tu choisis de modifer les dates des fichiers/répertoires ainsi ça va tout te remettre dans l'ordre !
voilà !
Marsh Posté le 31-12-2002 à 13:46:41
ben il me faut d'un côté un EXE sans passer par Excell
et de l'autre je ne pense pas que wincommander me fera ce qui est décrit plus haut!!!
Marsh Posté le 09-12-2002 à 19:01:53
hello...
je ne sais pas si certain d'entre vous qui viennent ici.. savent programmer... moi je ne sais pas....
alors je demande...
j'aimerai pouvoir copier (déplacer donc "couper" )
mes dossier mais en les remmettant dans un ordre...
logique....
je m'explique:
on fait un petit dossier, on y mets des fichiers...
en suite on crée un 2ème puis un 3ème dossier pour y mettre d'autre fichier...
mais de temps en temps on remets de nouveau fichiers dans le premier (et vieux) dossier....
ce qui fait que rien n'est dans l'ordre... et ce n'est pas le défrag qui arrange ça!!!
ce que j'aimerai c'est les déplacer...
et que cet utilitaire prenne en compte... l'ordre des dossiers - fichiers "alphabétique"
donc après déplacement que les choses soient enfin "rengées"!!!
pour que les têtes de lectures ne passent plus leur temps dans des déplacement inutiles et fatiguant...
voilà... alors si vous avez un truc à me proposer