Problème sur la copie d'un répertoire racine

Résolu
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010 - 16 oct. 2007 à 19:34
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010 - 21 oct. 2007 à 11:37
Je veux copier le contenu d'une clé USB (situé en j:\) dans un dossier spécifique de mon DD.
Je suis débutant, et je ne sais pas si c'est bon... le débogeur ne me signale rien de particulier, cependant je n'ai rien dans mon dossier Destination . Alors qu'est-ce qui ne va pas
Voila mon code (au fait je suis sur Microsoft Visual Basic 2005 Express; et j'ai ajouté la référence Microsoft Scripting Runtime à mon projet console):___________________________________________________________________________<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

Module Module1

      Sub CopyFolder (ByVal Source AsString, ByVal Destination AsString)

            Dim fso AsObject

            Source = "J:"

            Destination = "C:\Documents and Settings\Utilisateur\Bureau\mondossier"

             fso = CreateObject ("Scripting.FileSystemObject")

            fso.CopyFolder(Source, Destination, True)

      EndSub
__________________________________________________________________________________________
      Sub main ()

      EndSub

EndModule
___________________________________________________________________________

Si qq'un peut m'aider ce serait sympa.........

[mailto:Y@nnPerceval Y@nnPerceval]

9 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 oct. 2007 à 11:21
Avec le lien que je t'ai donné plus haut, et les exemples des 2 codes, tu as tout pour trouver toi-même comment le faire.

Mais comme je suis de bonne humeur (c'est le milieu de la semaine ! youpiiiiiiie :p) et qu'en plus, j'avais un petit peu de temps, ... mais je ne suis pas sûr que ça soit rendre service parce que moi, je n'ai retenu comment le faire qu'après avoir galéré sur mes 2-3 premiers scripts :

'Définition des constantes (doivent obligatoirement se terminer par un "" )
const CheminSource = "U:"
const CheminDestination = "C:\Test"


'Création d'un objet FSO
Set ObjFSO = CreateObject("Scripting.FileSystemObject")


'Le script ne fonctionne que si le répertoire de destination existe déjà
'Le créer s'il n'existe pas
If ObjFSO.FolderExists(CheminDestination) = false Then
 ObjFSO.CreateFolder(CheminDestination)
End If


'Copie de tous les répertoires de la source
ObjFSO.CopyFolder CheminSource & "*", CheminDestination, True
'Compteur des répertoires
Set Repertoires = ObjFSO.GetFolder(CheminSource).SubFolders


'Boucle pour défiler l'ensemble des fichiers à la racine
NbFichiers = 0
For Each Fichiers In ObjFSO.GetFolder(CheminSource).Files
 ObjFSO.CopyFile CheminSource & Fichiers.name, CheminDestination,True
 NbFichiers = NbFichiers + 1
Next


MsgBox "Fin du script." & vbcrlf & vbtab & NbFichiers & " fichiers copiés de la racine." & vbcrlf & vbtab & Repertoires.count & " répertoires copiés."

Hop là,

Molenn
3
Utilisateur anonyme
16 oct. 2007 à 20:17
Salut,

Bannis (pour le moment) ce Scripting Runtime.
Utilise System.IO
Par contre, je crois pas qu'il existe le Directory.Copy mais un System.IO.File.Copy
Donc, il conviendra de lister les fichiers et de faire pour chaque fichier. (Pour les dossier, une fonction récursive)
__________
Kenji
(
Nouveau forum VBA/Office
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 oct. 2007 à 08:13
Ou alors, tu abandonnes VB2005, tu colles ton bout de code dans un fichier texte dont tu modifies l'extension en .vbs, et tu lances en faisant un double-clic dessus parce que le code que tu as écrit, c'est du VBScript

http://www.secretswindows.com/index.php?rubrique=scripts&ssrubrique=VBS&ID=1&page=./scripts/vbs/copyfolder.htm

Mais après, ça dépend de tes besoins et si tu veux te mettre à VB2005 ou juste faire une copie de tes fichiers ^^

Molenn
0
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010
17 oct. 2007 à 09:38
Je veux copier mes fichiers, en VB2005 ou pas.
J'ai essayer de mettre mon code en VBScript, mais quand je lance le Script, il me dit:
Ligne:    7
Caract.: 1
Erreur:   Argusment ou appel de procédure incorrect
Code:    800A0005
Source:  Erreur d'exécution Microsoft VBScript

Voila le code que j'ai utilisé:
Dim Source
Dim Destination
Source = "J:"
Destination = "C:\Documents and Settings\Dr David\Bureau\mondossier"
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder Source, Destination

[mailto:Y@nnPerceval Y@nnPerceval]
0

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

Posez votre question
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 oct. 2007 à 10:14
Pas besoin de déclarer de variables en VBScript, mais bon, ça n'empêche pas le fonctionnement.
Voici mon script, et il fonctionne :

Source = "U:\Mes images"
Destination = "C:\Test"
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder Source, Destination

La différence se situe au niveau de ta source : J:\
CopyFolder, comme son nom l'indique, copie un répertoire. Et J:\ n'est pas un répertoire.
Si à la place, tu colles un répertoire dans ta clé USB et que tu mettes en source : J:\MonRépertoire, ça va fonctionner tout seul.

Sinon,e t bien, comme avec VB2005 et autres, il va falloir que tu crées une boucle qui défile tous les fichiers à la racine et les copie un par un.
Avec un script de ce style :

'Définition des constantes
const CheminSource = "U:"
const CheminDestination = "C:\Test"


'Création d'un objet FSO
Set ObjFSO = CreateObject("Scripting.FileSystemObject")


'Boucle pour défiler l'ensemble des fichiers du répertoire
compteur = 0
For Each Fichiers In ObjFSO.GetFolder(CheminSource).Files
 ObjFSO.CopyFile CheminSource & Fichiers.name, CheminDestination,true
 compteur = compteur +1
Next


MsgBox "Fin du script." & vbcrlf & Compteur & " fichiers copiés."

Molenn
0
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010
17 oct. 2007 à 10:37
Merci Molenn.
Ton script fonctionne bien.
Peut-on faire la meme chose avec les dossiers de J:\, cad faire une boucle pour défiler l'ensemble des dossiers du répertoire et les copier également. Ainsi ça copierai l'ensemble de J:\.

[mailto:Y@nnPerceval Y@nnPerceval]
0
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010
17 oct. 2007 à 12:23
Merci beaucoup Molenn.
J'ai même rajouté une petite option suplémentaire à la fin ("renomme" le dossier final à la date et l'heure de création):

Dim stDate 'Date actuelle
stDate = "le " & Day(date) & "-" & Right("0" & Month(date),2) & "-" & Right("0" & Year(date),4) & " à " & Right("0" & Hour(time),2) & " h " & Right("0" & Minute(time),2)



objFSO.moveFolder "C:\Test", "C:"& stDate




[mailto:Y@nnPerceval Y@nnPerceval]
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
17 oct. 2007 à 13:53
Ah ben dans ce cas, au lieu de déclarer "C:\test" en CheminDestination, déclare directement le nom du fichier avec ta fonction de date, tu économiseras un rename à la fin, et vu le délai de traitement du script, je ne pense pas qu'un écart de quelques secondes voire 1 minute ou 2 si c'est vraiment gros, change grand chose au nom de ta sauvegarde ^^


Et si je peux me permettre dans ta fonction de date :
stDate = "le " & Day(date) & "-" & Right("0" & Month(date),2) & "-" & Right("0" & Year(date),4) & " à " & Right("0" & Hour(time),2) & " h " & Right("0" & Minute(time),2)
Autant je peux comprendre Right("0" & Month(date),2), autant pour l'année, je ne vois pas l'intérêt. mais c'est surtout pour chipoter :)

Mais tu peux aussi remplacer tout ça par :
"Le " & replace(FormatDateTime(date, vbGeneralDate),"/","-") & " à " & FormatDateTime(time, vbShortTime)
Mais là encore, c'est juste histoire de chipoter ^^

Molenn
0
yjulien88 Messages postés 20 Date d'inscription vendredi 22 décembre 2006 Statut Membre Dernière intervention 8 mars 2010
21 oct. 2007 à 11:37
Je n'y avais pas pensé.... mais il vaut mieux faire un test de présence de dossiers, dans le cas où il n'y en aurait pas....

Je parle au débutant (comme moi):
Mais Molenn m'a dit quelques réponse au dessus : " mais je ne suis pas sûr que ça soit rendre service parce que moi, je n'ai retenu comment le faire qu'après avoir galéré sur mes 2-3 premiers scripts"
Il a raison,  c'est pourquoi je ne donnerait pas ce changement....
Juste un indice:
  For Each Dossiers In .......(CheminSource).SubFolders

....vous pouvez également faire un test de détection de clé USB......
2 autres indices:
DriveExists(......)
DriveType = "1"

ou autre........à vous de faire les modifications nécessaires à votre Script.

[mailto:Y@nnPerceval Y@nnPerceval]
0
Rejoignez-nous