VBA Copier dossier d'un emplacement vers un autre

  • Initiateur de la discussion Initiateur de la discussion david84
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

david84

XLDnaute Barbatruc
Bonjour à tous,
je veux faire un simple test pour tenter de comprendre la méthode CopyFolder permettant de Copier récursivement un dossier d'un emplacement vers un autre.
J'ai donc tenté ce code :
Code:
Sub CopieDoc() 'Copie récursivement un dossier d'un emplacement vers un autre.
Dim fs As Object
Dim copie
Set fs = CreateObject("Scripting.FileSystemObject")
[B]Set copie = fs.CopyFolder _
("C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_1\*", "C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_2\", False)[/B]
copie.Execute
End Sub

Quand je veux le lancer, cela plante (erreur d'exécution 76, chemin d'accès introuvable) et la partie en gras est surlignée en jaune.
Que dois-je modifier dans ce code pour qu'il fonctionne et pourquoi ?
Merci
 
Re : VBA Copier dossier d'un emplacement vers un autre

Re
Bonjour Hasco 🙂 et merci pour le lien. Je l'ai téléchargé mais les informations indiquées sur la fiche CopyFolder de VBsript me semblent les mêmes que celles trouvées dans l'aide d'XL.
La question que je me pose c'est pourquoi la macro plante et pourquoi il me dit que le chemin d'accès est introuvable alors que je pense le lui indiquer car sauf erreur de ma part, je lui indique bien une source
C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_1\*"
, une destination
"C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_2\"
, plus un overwrite avec une valeur False (aide XL : "Valeur booléenne facultative indiquant , le cas échéant, que les dossiers existants doivent être écrasés. Si la valeur est True, les fichiers sont écrasés ; si la valeur est False, ils sont conservés. Par défaut, la valeur est True").
Donc, j'ai loupé quelque chose mais je ne sais pas quoi...
A+
 
Re : VBA Copier dossier d'un emplacement vers un autre

Re David,

Le plus simple:

Code:
CopyFolder "C:\Documents and Settings\DA\Mes documents\Excel\VBA\[B]Répertoire Dossier_1[/B]" , "C:\Documents and Settings\DA\Mes documents\Excel\VBA\[B]Répertoire Dossier_2[/B]"

Copiera le premier dans le second en créant ce dernier s'il n'existe pas.

Je ne peux pas te dire mieux.

Bon courage
 
Re : VBA Copier dossier d'un emplacement vers un autre

Re
Hasco 🙂: ton code fonctionne correctement présenté ainsi, mais elle me copie les fichiers présents dans Répertoire Dossier_1 dans Répertoire Dossier_2, et non le dossier Répertoire Dossier_1 dans Répertoire Dossier_2 :
Code:
Sub test()
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFolder "C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_1", "C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_2"
End Sub
donc merci du coup de main😉.
Je vais maintenant tenter de comprendre pourquoi le précédent plante et comment faire pour que ce soit le dossier qui soit copié et non uniquement les fichiers présents dans ce dossier (je croyais d'ailleurs que cette méthode ne copiait pas autre chose que des dossiers et que pour les fichiers on devait utiliser CopyFile)🙄.

Kjin 🙂: merci de t'intéresser à ma question. Ta question n'est pas idiote. En fait je veux juste faire un test sur cette méthode pour comprendre comment l'utiliser.
Répertoire Dossier_1 et Répertoire Dossier_2 sont des dossiers comportant des fichiers (il n'y a pas de dossier présent à l'intérieur de ces 2 dossiers, juste des fichiers). Je veux arriver à copier le dossier Répertoire Dossier_1 dans Répertoire Dossier_2.
A+
 
Re : VBA Copier dossier d'un emplacement vers un autre

Re,

David, j'ai fait un test avant de poster mon dernier message et cela fonctionnait correctement en copiant le premier dossier dans le second, pas seulement les fichiers.

Je re commence pour voir.

A tout de suite.
 
Re : VBA Copier dossier d'un emplacement vers un autre

Re,

Je viens de re tester:

Code:
fso.CopyFolder "D:\Mes Documents\Machin\Truc\images", "D:\Mes Documents\LUI\Developement\VB_VBA\Excel\Forum\images\", True

J'avais peut-être oublié tout à l'heure l'antislash de fin du répertoire destination.

A+
 
Re : VBA Copier dossier d'un emplacement vers un autre

Re
merci Hasco😉. J'avais en tête cette possibilité d'antislash manquant quelque part (mais sans savoir exactement où) et compter le vérifier ce soir après avoir relu l'aide d'XL mais toi tu as tout de suite compris ce qui se passait ( on voit les pros😉).
Ceci dit, cela m'a permis de me rendre compte que cette méthode copie non seulement les dossiers mais également les fichiers (mais alors quelle différence avec CopyFile ? Peut-être que CopyFile ne peut copier que les fichiers ? Je testerai à l'occasion).
A+
 
Re : VBA Copier dossier d'un emplacement vers un autre

Re,
Le dossier ne contenant pas de sous-dossiers, CopyFolder ne trouve rien à copier évidemment (d'où ma question)
Maintenant, à la lecture de tes derniers messages, si tu souhaites copier l'ensemble d'un répertoire dans un autre, c'est plutôt la méthode "Copy" qu'il faut utiliser
Code:
Sub CopieDoc()
Dim fs As Object, copie As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set copie = fs.GetFolder _
("C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_1")
copie.Copy "C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_2\"
End Sub
A+
kjin
 
Re : VBA Copier dossier d'un emplacement vers un autre

Re kjin
La macro reprise par Hasco :
Sub test()
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFolder "C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_1", "C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_2"
End Sub
utilise bien CopyFolder et fait le travail demandé, à savoir copie le Répertoire Dossier_1 dans le Répertoire Dossier_2

Ta macro plante en l'état😕. Par contre, en déplaçant l'antislash de Dossier_2 vers dossier_1
Code:
Sub CopieDoc()
Dim fs As Object, copie As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Set copie = fs.GetFolder _
("C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_1"[B]\[/B])
copie.Copy "C:\Documents and Settings\DA\Mes documents\Excel\VBA\Répertoire Dossier_2"
End Sub
Cela donne un résultat qui n'est pas le résultat attendu mais qui est intéressant : il copie dans VBA un dossier nommé copie répertoire dossier_2 avec à l'intérieur les fichiers contenus dans Répertoire Dossier_1.
Cela met en évidence l'importance de l'utilisation et de l'emplacement de l'antislash...
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour