Recherche de fichier, copie à l'aide d'une liste

Recherche de fichier, copie à l'aide d'une liste - VB/VBA/VBS - Programmation

Marsh Posté le 21-02-2008 à 10:06:52    

Bonjour à tous et à toutes !
 
J'ai vraiment besoin de votre aide. :??:  
 
Je m'explique, je cherche a écrire un script qui à l'aide d'un liste d'id (dans un fichier .txt , ex : 10456,12588...) va rechercher un fichier .doc contenant cet id, ce fichier existe mais il se trouve dans un dossier parmi 4 autres (ce qui nous fais plusieurs sous dossiers).
 
L'idée serait de dire, pour chaque id du fichier aller chercher le fichier correspondant et le copier/coller ailleurs.
Il faudrait également lui dire dans quel fichier racine chercher.
 
 
 
Si quelqu'un sait comment faire  :sweat:
 
 
voici quelque precision, je ne m'en sort pas, mon patron me met la pression alors que je ne suis qu'un petit stagiaire :s HELP PLEASE !
 
 
Voici ma liste d'id, je ne traite que les id > 6000 :  
1015
1165
9019
9032
9202
6831
6060
6831
 
et je cherche dans cette architechture, là commence les pbs :s
├───Txt courants
│   ├───01_MC Originaux
│   │   ├───MC 1000-1999
│   │   │   └───ouvrages_2001-2005
│   │   └───MC 9000-9999
│   │       ├───Mc_9159
│   │       └───MC_9202
│   ├───02_MC En cours
│   └───03_MC Traités
│       ├───MC 2000-2999
│       │   ├───MC_2888
│       │   │   └───archives
│       │   └───MC_2891
│       └───MC 6000-6999
│           ├───MC_6689
│           └───MC_6831
│               └───ouvrage_6831 ancienne version
├───Txt Institutions
│   ├───01_MI Originaux
│   │   └───MI 10000-10999
│   │       └───MI_10789
│   ├───02_MI En cours
│   └───03_MI Traités
│       ├───MI 10001-10099
│       │   ├───MI_10789
│       │   │   └───PDf_divers
│       │   └───MI_10848
│       │       └───Archives
│       └───MI 4000-4999
│           ├───Mi_4445
│           │   └───Couv_4445
│           └───MI_4713
├───Txt ONG-Associations
│   ├───01_MO Originaux
│   │   ├───MO 0-999
│   │   ├───MO 1000-1999
│   │   ├───MO 10000-10999
│   │   │   └───MO_10776
│   │   ├───MO 11000-11999
│   │   ├───MO 2000-2999
│   │   ├───MO 3000-3999
│   │   │   └───ISBN-MU ID
│   │   ├───MO 4000-4999
│   │   ├───MO 5000-5999
│   │   ├───MO 6000-6999
│   │   └───MO 7000-7999
│   ├───02_MO En cours
│   │   ├───MO 0-999
│   │   │   └───MO_ID
│   │   ├───MO 1000-1999
│   │   ├───MO 10000-
│   │   ├───MO 11000-11999
│   │   ├───MO 2000-2999
│   │   ├───MO 3000-3999
│   │   │   └───ISBN-MU ID
│   │   ├───MO 4000-4999
│   │   ├───MO 5000-5999
│   │   ├───MO 6000-6999
│   │   ├───MO 7000-7999
│   │   └───MO 9000-9999
│   └───03_MO Traités
│       ├───MO 10001-10999
│       │   ├───MO_10775
│       │   └───MO_10776
│       └───MO 9000-9999
│           └───MO_9650
│               └───archives
└───Txt Universitaires
    ├───01_MU Originaux
    │   ├───MU 5000-5999
    │   └───Mu_7883
    ├───02_MU En cours
    └───03_MU Traités
        └───MU 8000-8999
            ├───MU_8118
            └───MU_8298
 
 
voici mon code à ce jour :

Code :
  1. On Error Resume next
  2. racine= "C:\Fonction routage\"
  3. Set FSO = WScript.CreateObject("Scripting.FileSystemObject" )
  4.  
  5. 'on instance le fichier texte
  6. Set Ftxt = FSO.OpenTextFile(racine &"id.txt" )
  7. 'on instance le dossie racine
  8. Set Afolder=FSO.GetFolder(racine)
  9. 'on parcour le fichier texte contenant les ID
  10. Do While Not Ftxt.AtEndOfStream
  11.    id = Ftxt.ReadLine
  12.    WScript.Echo id  
  13.     copie(Afolder)
  14. Loop
  15. Ftxt.Close 'on ferme le fichier texte
  16.  
  17. function copie(rep)
  18. Set FSO = CreateObject("Scripting.FileSystemObject" )
  19. Set TheFiles = rep.Files
  20.     For Each AFile In TheFiles
  21.         'trouve le fichier et le copie ailleur        
  22.      Set objFSO = CreateObject("Scripting.FileSystemObject" )
  23.      If id > 6000 Then
  24.          objFSO.CopyFile "MC_" & id & "\Ouvrage_" & id & ".doc" , "C:\Fonction routage\test\"
  25.      Else
  26.          MsgBox "Ouvrage à copier manuellement : " & id , vbExclamation
  27.      End If
  28.      Set objFSO = Nothing
  29.          
  30.         For Each subFolder In rep.SubFolders
  31.             copie(subFolder)
  32.         Next
  33.     Next    
  34. End function


 
 
Merci a vous..


Message édité par stevenhab le 22-02-2008 à 16:42:03

---------------
-- Steven
Reply

Marsh Posté le 21-02-2008 à 10:06:52   

Reply

Marsh Posté le 21-02-2008 à 10:18:01    

Tu parles de .doc, c'est en batch DOS ?

Reply

Marsh Posté le 21-02-2008 à 10:21:47    

merci de ta réponse, j'étais parti sur du vbs mais pourquoi pas en batch dos si c'est plus simple, je parle de .doc car les fichiers recherchés sont en .doc

Reply

Marsh Posté le 21-02-2008 à 10:31:10    

Non non, VBS c'est mieux au contraire, c'est juste que dans shell/batch ça peut être plein de choses différentes, c'est mieux de préciser. [:romf]
Je t'ai rangé ton sujet dans la bonne catégorie, tu auras plus de chances de recevoir une réponse comme ça.


Message édité par Elmoricq le 21-02-2008 à 10:31:49
Reply

Marsh Posté le 21-02-2008 à 10:44:06    

Ton problème peut être décomposé en sous-problèmes
1/ lecture d'un fichier texte pour les id
2/ recherche récursive de fichiers dans des dossiers
3/ copier les fichiers identifiés
 
Je pense que tous ces aspects là ont déjà été abordés de nombreuses fois sur ce forum.

Reply

Marsh Posté le 21-02-2008 à 10:46:32    

Oui, merci j'avais déjà identifié ces points là..
 
Je ne m'en sort tout de même pas.

Reply

Marsh Posté le 21-02-2008 à 11:29:01    

j'acance un peu..
 
racine= "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage"
Set FSO = WScript.CreateObject("Scripting.FileSystemObject" )
Set Afolder=FSO.GetFolder(racine)
copie(Afolder)
 
function copie(rep)
Set TheFiles = rep.Files
For Each AFile In TheFiles
 If UCase(FSO.GetExtensionName(AFile.Path)) = "DOC" then  
  AFile.Copy "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage\test" , true
 next
 for each subFolder in rep.SubFolders
  copie (subFolder)
11. next
end function  
 
mais j'ai une erreur ligne 11 Next non attendu .

Reply

Marsh Posté le 21-02-2008 à 11:49:56    

pour fermer le if un end c'est mieux !

Reply

Marsh Posté le 21-02-2008 à 11:58:35    

racine= "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage"
Set FSO = WScript.CreateObject("Scripting.FileSystemObject" )
Set Afolder=FSO.GetFolder(racine)
copie(Afolder)
 
function copie(rep)
Set TheFiles = rep.Files
 For Each AFile In TheFiles
  If UCase(FSO.GetExtensionName(AFile.Path)) = "DOC" then  
   AFile.Copy "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage\test" , true
  End if
  For Each subFolder In rep.SubFolders
   copie(subFolder)
  Next ****
end function  
 
 
voila, mais je ne sais pas quoi mettre a la place des étoiles, il attend un argument..

Reply

Marsh Posté le 21-02-2008 à 12:05:41    

En fait tu as 2 for donc tu dois avoir 2 next !

Reply

Marsh Posté le 21-02-2008 à 12:05:41   

Reply

Marsh Posté le 21-02-2008 à 12:08:21    

yes bien vu l'aveugle :p !!
 
mais ca ne copie rien :s avec AFile.Delete ca supprimer correctement mais la copy non..

Reply

Marsh Posté le 21-02-2008 à 12:26:31    

voici le code :  
 
racine= "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage"
Set FSO = WScript.CreateObject("Scripting.FileSystemObject" )
Set Afolder=FSO.GetFolder(racine)
copie(Afolder)
 
function copie(rep)
Set TheFiles = rep.Files
 For Each AFile In TheFiles
  If UCase(FSO.GetExtensionName(AFile.Path)) = "DOC" then  
   AFile.Copy "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage\test"  
  End if
  For Each subFolder In rep.SubFolders
   copie(subFolder)
  Next
 Next  
End function  
 
la copie de fichier .doc ne s'effectue pas :s

Reply

Marsh Posté le 21-02-2008 à 12:30:19    

Afin d'avoir une meilleur lisibilité de tes posts, il serait judicieux que tu encadre ton code des balises [ code=vb ] et [ /code ] (en enlevant tous les espaces)


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 21-02-2008 à 12:57:12    

je remet le code avec les bonne balise :$
 

Code :
  1. racine= "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage"
  2. Set FSO = WScript.CreateObject("Scripting.FileSystemObject" )
  3. Set Afolder=FSO.GetFolder(racine)
  4. copie(Afolder)
  5.  
  6. function copie(rep)
  7. Set TheFiles = rep.Files
  8. For Each AFile In TheFiles
  9.  If UCase(FSO.GetExtensionName(AFile.Path)) = "DOC" then  
  10.   AFile.Copy "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage\test" , True
  11.  End if
  12.  For Each subFolder In rep.SubFolders
  13.   copie(subFolder)
  14.  Next
  15. Next  
  16. End function

Reply

Marsh Posté le 21-02-2008 à 13:04:34    

Copy ? Je connais CopyFile qui s'utilise de la manière suivante :

object.CopyFile source, destination[, overwrite]

Edit : l'objet est le FSO naturellement.Par exemple :

FSO.CopyFile  AFile.path "C:\Documents and Settings\administrateur.MANUSCRIT\Bureau\Fonction routage\test"


Message édité par olivthill le 21-02-2008 à 13:10:12
Reply

Marsh Posté le 21-02-2008 à 13:23:02    

Les sujets suivont ont étés fusionnés à ce sujet par Elmoricq

  • Probléme de copie de fichier

Reply

Marsh Posté le 21-02-2008 à 13:24:32    

stevenhab > Pour modifier l'un de tes sujets, il te faut cliquer sur l'icone http://forum-images.hardware.fr/themes_static/images/silk/edit.gif

 

Essaie de ne pas recréer des topics à chaque fois, depuis ce matin je repasse derrière toi pour faire le ménage...
Si tu te sens perdu avec le forum, n'hésite pas à en consulter l'aide : http://www.mesdiscussions.net/doc/user/html/


Message édité par Elmoricq le 21-02-2008 à 13:24:59
Reply

Marsh Posté le 21-02-2008 à 14:50:40    

merci olivthill pour ta réponse mais je n'arrive pas a appliquer ton 2eme morceau de code..

Reply

Marsh Posté le 21-02-2008 à 15:00:35    

donc je n'y arrive toujours pas, je n'arrive pas a copier mes fichier .doc
 

Code :
  1. racine= "C:\Fonction routage\"
  2. Set FSO = WScript.CreateObject("Scripting.FileSystemObject" )
  3. Set Afolder=FSO.GetFolder(racine)
  4. copie(Afolder)
  5.  
  6. function copie(rep)
  7. Set TheFiles = rep.Files
  8.     For Each AFile In TheFiles
  9.         If UCase(FSO.GetExtensionName(AFile.Path)) = "DOC" then
  10. AFile.CopyFile  "C:\Fonction routage\test" **** ici doit se faire la copie mais je n'y arrive pas.
  11.         End if
  12.         For Each subFolder In rep.SubFolders
  13.             copie(subFolder)
  14.         Next
  15.     Next    
  16. End function

Reply

Marsh Posté le 21-02-2008 à 17:10:43    

svp aidez moi :$

Reply

Marsh Posté le 21-02-2008 à 18:34:21    

Voici un peu de doc sur le FileSystemObject
http://msdn2.microsoft.com/en-us/l [...] S.85).aspx
.Copy et .CopyFile peuvent être utilisés, mais avec une syntaxe et dans des contextes différents.
À toi de choisir celui qui te convient.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed