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.
) . 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