VBA copie d'un répertoire à un autre
Rapace
-
rorolidalgo -
rorolidalgo -
Bonjour,
Voilà, je souhaite parcourir une arborescence de répertoires, et de copier l'ensemble de leurs contenus dans une structure similaire (tout en renommant certains répertoires).
voici donc déjà le début de mon code que je teste avant d'aller plus loin.
Code :
Private Sub Commande0_Click()
Dim oFS As Variant, oLecteur As Variant, oRepertoire As Variant
Dim Boucle As Variant
Dim Dossier As Variant
Dim rep As String
On Error Resume Next
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oLecteur = oFS.GetDrive("G")
Dossier = "\Corbeil documentations\customer\Actel\A3P060\Customer Data"
If (oLecteur.IsReady) Then
If (Dossier <> "") Then
'cteLecture à partir du sous-répertoire cible
Set oRepertoire = oFS.GetFolder(oLecteur & ":" & Dossier)
rep = "G:" & Dossier
Call ListeFichier(oRepertoire, rep) ' Routine récursive
End If
End If
Wscript.Echo "Fin de traitement :-) "
End Sub
'
Sub ListeFichier(ByVal oRepertoir As Variant, ByVal oRep As String) ' Routine récursive
Dim oDossier As Variant, oFichier As Variant
Dim Source, dest, racine_portal As String
On Error Resume Next
racine_portal = "G:\Corbeil doc for Portal\customer\Actel\A3P060\Customer Data"
If (oRepertoir.Files.Count > 0) Then
For Each oFichier In oRepertoir.Files
Source = oRep & "\" & CStr(oFichier)
dest = racine_portal & "\" & CStr(oFichier)
FileCopy Source, dest
Next
End If
If (oRepertoir.SubFolders.Count > 0) Then
For Each oDossier In oRepertoir.SubFolders
Call ListeFichier(oDossier, oDossier)
Next
End If
End Sub
Mon problème principal est que je n'arrive pas à récupérer le nom du variant oFichier pour le concaténer à mon chemin d'accès. Cela fait planter mon FileCopy...
Pouvez vous m'indiquer comment récupérer le nom( + extension) du variant oFichier SVP?
Bien sûr, toute autre idée, ou autre façon de faire pour améliorer ce code est la bienvenue....
merci d'avance
Voilà, je souhaite parcourir une arborescence de répertoires, et de copier l'ensemble de leurs contenus dans une structure similaire (tout en renommant certains répertoires).
voici donc déjà le début de mon code que je teste avant d'aller plus loin.
Code :
Private Sub Commande0_Click()
Dim oFS As Variant, oLecteur As Variant, oRepertoire As Variant
Dim Boucle As Variant
Dim Dossier As Variant
Dim rep As String
On Error Resume Next
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oLecteur = oFS.GetDrive("G")
Dossier = "\Corbeil documentations\customer\Actel\A3P060\Customer Data"
If (oLecteur.IsReady) Then
If (Dossier <> "") Then
'cteLecture à partir du sous-répertoire cible
Set oRepertoire = oFS.GetFolder(oLecteur & ":" & Dossier)
rep = "G:" & Dossier
Call ListeFichier(oRepertoire, rep) ' Routine récursive
End If
End If
Wscript.Echo "Fin de traitement :-) "
End Sub
'
Sub ListeFichier(ByVal oRepertoir As Variant, ByVal oRep As String) ' Routine récursive
Dim oDossier As Variant, oFichier As Variant
Dim Source, dest, racine_portal As String
On Error Resume Next
racine_portal = "G:\Corbeil doc for Portal\customer\Actel\A3P060\Customer Data"
If (oRepertoir.Files.Count > 0) Then
For Each oFichier In oRepertoir.Files
Source = oRep & "\" & CStr(oFichier)
dest = racine_portal & "\" & CStr(oFichier)
FileCopy Source, dest
Next
End If
If (oRepertoir.SubFolders.Count > 0) Then
For Each oDossier In oRepertoir.SubFolders
Call ListeFichier(oDossier, oDossier)
Next
End If
End Sub
Mon problème principal est que je n'arrive pas à récupérer le nom du variant oFichier pour le concaténer à mon chemin d'accès. Cela fait planter mon FileCopy...
Pouvez vous m'indiquer comment récupérer le nom( + extension) du variant oFichier SVP?
Bien sûr, toute autre idée, ou autre façon de faire pour améliorer ce code est la bienvenue....
merci d'avance
A voir également:
- VBA copie d'un répertoire à un autre
- Copie cachée - Guide
- Super copie - Télécharger - Gestion de fichiers
- Copie écran samsung - Guide
- Copie disque dur - Guide
- Copie rapide - Télécharger - Gestion de fichiers
8 réponses
re :
Alors voilà mes observations, vous confondez objets de scriptings et objets de VBA
Voici le script en vbs :
et maintenant le même code mais sous VBA !
remarquer surtout que les lignes :
Dim oFS As Object, oLecteur As Object, oRepertoire As Object
Dim Compteur As Long
définit les variables pour tout le module et seront connue de chaque routine.
De plus, votre code copie les fichiers mais pas la structure des répertoires que vous copiers.
Je vous recommande plus une commande comme oFS.CopyFolder (Source , Destination)
Lupin
Alors voilà mes observations, vous confondez objets de scriptings et objets de VBA
Voici le script en vbs :
Dim oFS , oLecteur , oRepertoire
'Dim Boucle
Dim Dossier
Dim Rep
Dim Compteur
On Error Resume Next
Compteur=0
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oLecteur = oFS.GetDrive("R")
WScript.Echo "Lupin"
If (oLecteur.IsReady) Then
WScript.Echo "Lupin 1"
Dossier = "\Forums\VBS"
'Dossier = "\Corbeil documentations\customer\Actel\A3P060\Customer Data"
'cteLecture à partir du sous-répertoire cible
Rep = "R:" & Dossier
Set oRepertoire = oFS.GetFolder(Rep)
WScript.Echo oRepertoires.SubFolders.Count
Call ListeFichier(oRepertoire, Rep) ' Routine récursive
End If
Wscript.Echo "Fin de traitement :-) " & Compteur
WScript.Quit(0)
'End Sub
'
Sub ListeFichier(oRepertoir, oRep ) ' Routine récursive
Dim oDossier , oFichier
Dim Source, dest, racine_portal
On Error Resume Next
Compteur = ( Compteur + 1 )
'racine_portal = "G:\Corbeil doc for Portal\customer\Actel\A3P060\Customer Data"
racine_portal = "S:\Lecteur\Transport"
WScript.Echo = oRepertoir.Files.Count
If (oRepertoir.Files.Count > 0) Then
For Each oFichier In oRepertoir.Files
Source = oRep & "\" & oFichier.Name
WScript.Echo Source
dest = racine_portal & "\" & oFichier.Name
WScript.Echo dest
oFS.CopyFile Source, dest
Next
End If
If (oRepertoir.SubFolders.Count > 0) Then
For Each oDossier In oRepertoir.SubFolders
Call ListeFichier(oDossier, oDossier)
Next
End If
End Sub
et maintenant le même code mais sous VBA !
Option Explicit
Dim oFS As Object, oLecteur As Object, oRepertoire As Object
Dim Compteur As Long
Private Sub CommandButton1_Click()
Dim Boucle As Long
Dim Dossier As String
Dim Rep As String
On Error Resume Next
Compteur = 0
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oLecteur = oFS.GetDrive("R")
'WScript.Echo "Lupin"
MsgBox "Lupin"
If (oLecteur.IsReady) Then
'WScript.Echo "Lupin 1"
MsgBox "Lupin 1"
Dossier = "\Forums\VBS"
'Dossier = "\Corbeil documentations\customer\Actel\A3P060\Customer Data"
'cteLecture à partir du sous-répertoire cible
Rep = "R:" & Dossier
Set oRepertoire = oFS.GetFolder(Rep)
MsgBox oRepertoire.SubFolders.Count
'WScript.Echo oRepertoires.SubFolders.Count
Call ListeFichier(oRepertoire, Rep) ' Routine récursive
Compteur = (Compteur + 1)
End If
'WScript.Echo "Fin de traitement :-) " & Compteur
MsgBox "Fin de traitement :-) " & Compteur
End Sub
'
Sub ListeFichier(oRepertoir As Object, oRep As Object) ' Routine récursive
Dim oDossier As Object, oFichier As Object
Dim Source As String, dest As String, racine_portal As String
On Error Resume Next
'racine_portal = "G:\Corbeil doc for Portal\customer\Actel\A3P060\Customer Data"
racine_portal = "S:\Lecteur\Transport"
'WScript.Echo = oRepertoir.Files.Count
MsgBox oRepertoir.Files.Count
If (oRepertoir.Files.Count > 0) Then
For Each oFichier In oRepertoir.Files
Source = oRep & "\" & oFichier.Name
MsgBox Source
'WScript.Echo Source
dest = racine_portal & "\" & oFichier.Name
MsgBox dest
'WScript.Echo dest
oFS.CopyFile Source, dest
Next
End If
If (oRepertoir.SubFolders.Count > 0) Then
For Each oDossier In oRepertoir.SubFolders
Call ListeFichier(oDossier, oDossier)
Next
End If
End Sub
'
remarquer surtout que les lignes :
Dim oFS As Object, oLecteur As Object, oRepertoire As Object
Dim Compteur As Long
définit les variables pour tout le module et seront connue de chaque routine.
De plus, votre code copie les fichiers mais pas la structure des répertoires que vous copiers.
Je vous recommande plus une commande comme oFS.CopyFolder (Source , Destination)
Lupin
CStr(oFichier) ne fonctionne pas...comment puis-je récupérer le nom de mon fichier SVP??
Merci d'avance
Merci d'avance
Bonjour,
L'instruction : dest = racine_portal & "\" & CStr(oFichier)
devrait se lire : dest = racine_portal & "\" & oFichier.Name
Lupin
L'instruction : dest = racine_portal & "\" & CStr(oFichier)
devrait se lire : dest = racine_portal & "\" & oFichier.Name
Lupin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
j'avais déjà changé pour "Source" également mais ma macro ne fonctionne toujours pas. Je n'ai pas de message d'erreur c'est juste que ma macro ne fait rien.
J'ai mis un "msgbox oFichier.Name" dans ma boucle mais ça affiche une chaine vide...
D'où peut venir le problème d'après vous? Mes chemins de données sont bons et le répertoire source contient des fichiers, j'ai vérifié.
J'ai mis un "msgbox oFichier.Name" dans ma boucle mais ça affiche une chaine vide...
D'où peut venir le problème d'après vous? Mes chemins de données sont bons et le répertoire source contient des fichiers, j'ai vérifié.
Meric beaucoup Lupin, j'avoue ne pas avoir compris la subtilité entre ton code VBS et ton code VBA.
Le problème vindrait du fait que j'ai utilisé des Variant plutot que des Object, c'est ça??
Je vais également tester le CopyFolder. Cela copie tout un répertoire? avec son arborescence complète et son contenu?? (si c'est le cas, je vais pouvoir me passer de ma boule récursive).
Le problème vindrait du fait que j'ai utilisé des Variant plutot que des Object, c'est ça??
Je vais également tester le CopyFolder. Cela copie tout un répertoire? avec son arborescence complète et son contenu?? (si c'est le cas, je vais pouvoir me passer de ma boule récursive).
re :
non, ce n'est pas le typage qui était en cause !
Instruction avec des objets VBA
FileCopy Source, dest
Instruction avec des objets de scripting
oFS.CopyFile Source, dest
Il faudra apprendre a distinguer les objets de scripting, codable dans le bloc-note
et les objets VBA codable sous VBE.
et, oui, la commande CopyFolder copie tout le contenu.
Lupin
non, ce n'est pas le typage qui était en cause !
Instruction avec des objets VBA
FileCopy Source, dest
Instruction avec des objets de scripting
oFS.CopyFile Source, dest
Il faudra apprendre a distinguer les objets de scripting, codable dans le bloc-note
et les objets VBA codable sous VBE.
et, oui, la commande CopyFolder copie tout le contenu.
Lupin
Bonjour
Je suis face à un problème similaire, où je souhaite déplacer un dossier et son contenu selon des variables en amont.
Je cherche à faire la manipulation suivante
Déplacer le contenu de chemin_1\dossier_1 vers chemin_2 \ dossier_2.
Je suis en VBA, c'est pour une gestion documentaire pilotée depuis Access.
Merci d'avance
Je suis face à un problème similaire, où je souhaite déplacer un dossier et son contenu selon des variables en amont.
Je cherche à faire la manipulation suivante
Déplacer le contenu de chemin_1\dossier_1 vers chemin_2 \ dossier_2.
Je suis en VBA, c'est pour une gestion documentaire pilotée depuis Access.
Merci d'avance