Problème sur la copie d'un répertoire racine [Résolu]

Messages postés
20
Date d'inscription
vendredi 22 décembre 2006
Dernière intervention
8 mars 2010
- - Dernière réponse : yjulien88
Messages postés
20
Date d'inscription
vendredi 22 décembre 2006
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]
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Molenn
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
0
Merci
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
Commenter la réponse de Charles Racaud
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
0
Merci
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
Commenter la réponse de Molenn
Messages postés
20
Date d'inscription
vendredi 22 décembre 2006
Dernière intervention
8 mars 2010
0
Merci
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]
Commenter la réponse de yjulien88
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
0
Merci
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
Commenter la réponse de Molenn
Messages postés
20
Date d'inscription
vendredi 22 décembre 2006
Dernière intervention
8 mars 2010
0
Merci
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]
Commenter la réponse de yjulien88
Messages postés
20
Date d'inscription
vendredi 22 décembre 2006
Dernière intervention
8 mars 2010
0
Merci
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]
Commenter la réponse de yjulien88
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
0
Merci
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
Commenter la réponse de Molenn
Messages postés
20
Date d'inscription
vendredi 22 décembre 2006
Dernière intervention
8 mars 2010
0
Merci
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]
Commenter la réponse de yjulien88

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.