yjulien88
Messages postés20Date d'inscriptionvendredi 22 décembre 2006StatutMembreDernière intervention 8 mars 2010
-
16 oct. 2007 à 19:34
yjulien88
Messages postés20Date d'inscriptionvendredi 22 décembre 2006StatutMembreDerniè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 ()
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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."
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
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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
yjulien88
Messages postés20Date d'inscriptionvendredi 22 décembre 2006StatutMembreDerniè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]
Vous n’avez pas trouvé la réponse que vous recherchez ?
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 :
'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
yjulien88
Messages postés20Date d'inscriptionvendredi 22 décembre 2006StatutMembreDerniè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:\.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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 ^^
yjulien88
Messages postés20Date d'inscriptionvendredi 22 décembre 2006StatutMembreDerniè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.