[VBA] Erreur avec un FSO.CopyFolder limitation dans les longueurs de chemins ?

Le
HD
Bonjour,

Pour copier l'ensemble d'un répertoire j'utilise la méthode avec
FileSystemObject

Cela a bien fonctionné sauf que. dernièrement, les utilisateurs de ma
macro m'ont montré que je n'ai plus l'ensemble du répertoire de copier mais
seulement une partie de celui ci !!!

--
Dim RepDest As String 'Rép.de destination
Dim RepSource As String 'Rép.Matrice à copier
Dim FSO

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder RepSource, RepDest
--

Le problème semble lié à seulement certains répertoires de destination et
cela semble bien lié à la longueur du chemin complet.

Exemple, avec un RepDest = "H:CAC1.ASSOCIATIONSAutrestest" il n'y a pas
de souci mais avec un RepDest = "H:CAC1.ASSOCIATIONSSECT SOCIAL
INSERTION ACTIVITE ECOtest" j'ai alors un code erreur 76 avec une
description "Chemin d'accès introuvable" sur la ligne:
FSO.CopyFolder RepSource, RepDest

Le dernier fichier copier de la source à la destination est
"H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE ECOtest10 DTA17
Dossier de contrôle CAC17.10 Communication avec le client17.10.2
Echantillonnage de la population à tester pour les
circularisationEchantillonage de la pop à tester circu frs.xls" (chemin de
253 caractères). Le dernier fichier qui aurait dû être copier mais qui ne
l'a pas été est "H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE
ECOtest10 DTA17 Dossier de contrôle CAC17.10 Communication avec le
client17.10.2 Echantillonnage de la population à tester pour les
circularisationMatrice échantillonage de la pop à tester circu client.xls"
(chemin de 264 caractères).

Y'a-t-il donc une limitation dans les longueurs de chemin dû à FSO ? dû au
type de donnée String ? Et comment y remédier (sans pour autant limiter la
longueur de ces chemins) ?

Pour précision, je suis sous Windows XP Pro avec un Excel 2007.

Merci d'avance pour votre aide
--
@+
HD
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacquouille
Le #22524831
Bonjour HD
Ne serait-ce pas dû au nombre maximum de caractères dans une variable (256?)
ou confondé-je ?

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille (MPFE).

"HD" i5ir4n$2olg$
Bonjour,

Pour copier l'ensemble d'un répertoire j'utilise la méthode avec
FileSystemObject

Cela a bien fonctionné... sauf que.... dernièrement, les utilisateurs de
ma macro m'ont montré que je n'ai plus l'ensemble du répertoire de copier
mais seulement une partie de celui ci !!!

--------------
Dim RepDest As String 'Rép.de destination
Dim RepSource As String 'Rép.Matrice à copier
Dim FSO

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder RepSource, RepDest
--------------

Le problème semble lié à seulement certains répertoires de destination...
et cela semble bien lié à la longueur du chemin complet.

Exemple, avec un RepDest = "H:CAC1.ASSOCIATIONSAutrestest" il n'y a
pas de souci... mais avec un RepDest = "H:CAC1.ASSOCIATIONSSECT SOCIAL
INSERTION ACTIVITE ECOtest" j'ai alors un code erreur 76 avec une
description "Chemin d'accès introuvable" sur la ligne:
FSO.CopyFolder RepSource, RepDest

Le dernier fichier copier de la source à la destination est
"H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE ECOtest10 DTA17
Dossier de contrôle CAC17.10 Communication avec le client17.10.2
Echantillonnage de la population à tester pour les
circularisationEchantillonage de la pop à tester circu frs.xls" (chemin
de 253 caractères). Le dernier fichier qui aurait dû être copier mais qui
ne l'a pas été est "H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE
ECOtest10 DTA17 Dossier de contrôle CAC17.10 Communication avec le
client17.10.2 Echantillonnage de la population à tester pour les
circularisationMatrice échantillonage de la pop à tester circu
client.xls" (chemin de 264 caractères).

Y'a-t-il donc une limitation dans les longueurs de chemin dû à FSO ? dû au
type de donnée String ? Et comment y remédier (sans pour autant limiter la
longueur de ces chemins) ?

Pour précision, je suis sous Windows XP Pro avec un Excel 2007.

Merci d'avance pour votre aide
--
@+
HD

Jacquouille
Le #22524921
....Que je me réponds
Avec un bréviaire comme chemin, c'est pire que celui qui mène au Paradis.
Ne pourrais-tu, par exemple, utiliser des abréviations (pop pour
population,comm pour communication .....)
Tu aurais vite retrouvé de la place libre......

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille (MPFE).

"Jacquouille" news: 4c7cf612$0$5275$
Bonjour HD
Ne serait-ce pas dû au nombre maximum de caractères dans une variable
(256?) ou confondé-je ?

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille (MPFE).

"HD" i5ir4n$2olg$
Bonjour,

Pour copier l'ensemble d'un répertoire j'utilise la méthode avec
FileSystemObject

Cela a bien fonctionné... sauf que.... dernièrement, les utilisateurs de
ma macro m'ont montré que je n'ai plus l'ensemble du répertoire de copier
mais seulement une partie de celui ci !!!

--------------
Dim RepDest As String 'Rép.de destination
Dim RepSource As String 'Rép.Matrice à copier
Dim FSO

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder RepSource, RepDest
--------------

Le problème semble lié à seulement certains répertoires de destination...
et cela semble bien lié à la longueur du chemin complet.

Exemple, avec un RepDest = "H:CAC1.ASSOCIATIONSAutrestest" il n'y a
pas de souci... mais avec un RepDest = "H:CAC1.ASSOCIATIONSSECT SOCIAL
INSERTION ACTIVITE ECOtest" j'ai alors un code erreur 76 avec une
description "Chemin d'accès introuvable" sur la ligne:
FSO.CopyFolder RepSource, RepDest

Le dernier fichier copier de la source à la destination est
"H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE ECOtest10 DTA17
Dossier de contrôle CAC17.10 Communication avec le client17.10.2
Echantillonnage de la population à tester pour les
circularisationEchantillonage de la pop à tester circu frs.xls" (chemin
de 253 caractères). Le dernier fichier qui aurait dû être copier mais qui
ne l'a pas été est "H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE
ECOtest10 DTA17 Dossier de contrôle CAC17.10 Communication avec le
client17.10.2 Echantillonnage de la population à tester pour les
circularisationMatrice échantillonage de la pop à tester circu
client.xls" (chemin de 264 caractères).

Y'a-t-il donc une limitation dans les longueurs de chemin dû à FSO ? dû
au type de donnée String ? Et comment y remédier (sans pour autant
limiter la longueur de ces chemins) ?

Pour précision, je suis sous Windows XP Pro avec un Excel 2007.

Merci d'avance pour votre aide
--
@+
HD





Jacquouille
Le #22524911
.... Je me sens en forme, aujourd'hui.
Ne pourrais-tu mettre la première partie du chemin (par exemple, celle qui
est fixe, jusqu' au dossier) dans une variable, puis le nom du ficher dans
une autre. Ensuite, pour le chemin, tu concatènes les deux. non?
ou, à défaut de variable, inscrire la moitié du chemin du dossier dans une
cel (A1), puis concaténer A1 & nom du dossier ?

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille (MPFE).

"Jacquouille" news: 4c7cf734$0$5277$
....Que je me réponds
Avec un bréviaire comme chemin, c'est pire que celui qui mène au Paradis.
Ne pourrais-tu, par exemple, utiliser des abréviations (pop pour
population,comm pour communication .....)
Tu aurais vite retrouvé de la place libre......

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille (MPFE).

"Jacquouille" news: 4c7cf612$0$5275$
Bonjour HD
Ne serait-ce pas dû au nombre maximum de caractères dans une variable
(256?) ou confondé-je ?

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille (MPFE).

"HD" i5ir4n$2olg$
Bonjour,

Pour copier l'ensemble d'un répertoire j'utilise la méthode avec
FileSystemObject

Cela a bien fonctionné... sauf que.... dernièrement, les utilisateurs de
ma macro m'ont montré que je n'ai plus l'ensemble du répertoire de
copier mais seulement une partie de celui ci !!!

--------------
Dim RepDest As String 'Rép.de destination
Dim RepSource As String 'Rép.Matrice à copier
Dim FSO

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder RepSource, RepDest
--------------

Le problème semble lié à seulement certains répertoires de
destination... et cela semble bien lié à la longueur du chemin complet.

Exemple, avec un RepDest = "H:CAC1.ASSOCIATIONSAutrestest" il n'y a
pas de souci... mais avec un RepDest = "H:CAC1.ASSOCIATIONSSECT
SOCIAL INSERTION ACTIVITE ECOtest" j'ai alors un code erreur 76 avec
une description "Chemin d'accès introuvable" sur la ligne:
FSO.CopyFolder RepSource, RepDest

Le dernier fichier copier de la source à la destination est
"H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE ECOtest10 DTA17
Dossier de contrôle CAC17.10 Communication avec le client17.10.2
Echantillonnage de la population à tester pour les
circularisationEchantillonage de la pop à tester circu frs.xls" (chemin
de 253 caractères). Le dernier fichier qui aurait dû être copier mais
qui ne l'a pas été est "H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION
ACTIVITE ECOtest10 DTA17 Dossier de contrôle CAC17.10 Communication
avec le client17.10.2 Echantillonnage de la population à tester pour
les circularisationMatrice échantillonage de la pop à tester circu
client.xls" (chemin de 264 caractères).

Y'a-t-il donc une limitation dans les longueurs de chemin dû à FSO ? dû
au type de donnée String ? Et comment y remédier (sans pour autant
limiter la longueur de ces chemins) ?

Pour précision, je suis sous Windows XP Pro avec un Excel 2007.

Merci d'avance pour votre aide
--
@+
HD









HD
Le #22525211
Bonjour Jacquouille,

Le problème est que la limitation en question semble être propre au
fonctionnement interne de FSO... car dans ma ligne de script:
FSO.CopyFolder RepSource, RepDest
J'ai un RepSource et un RepDest de moins de 256 caractères... mais c'est
lorsque les fichiers et répertoires de RepSource sont copiés sur RepDest que
l'on se retrouve alors avec des chemins plus longs que les 256 caractères...

Et je préférerais ne pas toucher aux chemins qui ont été définis par les
utilisateurs car celà pourrait impliquer la modification de nombreuses
autres macros...
--
@+
HD
michdenis
Le #22525341
Bonjour,

As-tu essayé quelque chose dans le genre :

Copie l'intégralité du contenu du répertoire source vers
le répertoire de destination.

'-----------------------------------
Sub test()
Dim Source As String
Dim destination As String

'*****VARIABLES À DÉFINIR*********
Source = "c:pour la première"
destination = "c:test1"
'**********************************

commande = Environ$("comspec") & " /c xcopy """ & _
Source & """ """ & destination & """ " & "/s/e"
Shell commande, 0
End Sub
'-----------------------------------

--
MichD
--------------------------------------------


"HD" Bonjour,

Pour copier l'ensemble d'un répertoire j'utilise la méthode avec
FileSystemObject

Cela a bien fonctionné... sauf que.... dernièrement, les utilisateurs de ma
macro m'ont montré que je n'ai plus l'ensemble du répertoire de copier mais
seulement une partie de celui ci !!!

--------------
Dim RepDest As String 'Rép.de destination
Dim RepSource As String 'Rép.Matrice à copier
Dim FSO

Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder RepSource, RepDest
--------------

Le problème semble lié à seulement certains répertoires de destination... et
cela semble bien lié à la longueur du chemin complet.

Exemple, avec un RepDest = "H:CAC1.ASSOCIATIONSAutrestest" il n'y a pas
de souci... mais avec un RepDest = "H:CAC1.ASSOCIATIONSSECT SOCIAL
INSERTION ACTIVITE ECOtest" j'ai alors un code erreur 76 avec une
description "Chemin d'accès introuvable" sur la ligne:
FSO.CopyFolder RepSource, RepDest

Le dernier fichier copier de la source à la destination est
"H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE ECOtest10 DTA17
Dossier de contrôle CAC17.10 Communication avec le client17.10.2
Echantillonnage de la population à tester pour les
circularisationEchantillonage de la pop à tester circu frs.xls" (chemin de
253 caractères). Le dernier fichier qui aurait dû être copier mais qui ne
l'a pas été est "H:CAC1.ASSOCIATIONSSECT SOCIAL INSERTION ACTIVITE
ECOtest10 DTA17 Dossier de contrôle CAC17.10 Communication avec le
client17.10.2 Echantillonnage de la population à tester pour les
circularisationMatrice échantillonage de la pop à tester circu client.xls"
(chemin de 264 caractères).

Y'a-t-il donc une limitation dans les longueurs de chemin dû à FSO ? dû au
type de donnée String ? Et comment y remédier (sans pour autant limiter la
longueur de ces chemins) ?

Pour précision, je suis sous Windows XP Pro avec un Excel 2007.

Merci d'avance pour votre aide
--
@+
HD
HD
Le #22525331
As-tu essayé quelque chose dans le genre :
Copie l'intégralité du contenu du répertoire source vers
le répertoire de destination.
'-----------------------------------
Sub test()
Dim Source As String
Dim destination As String
'*****VARIABLES À DÉFINIR*********
Source = "c:pour la première"
destination = "c:test1"
'**********************************
commande = Environ$("comspec") & " /c xcopy """ & _
Source & """ """ & destination & """ " & "/s/e"
Shell commande, 0
End Sub



Je viens d'essayer en remplaçant donc ma ligne :
FSO.CopyFolder RepSource, RepDest

par les 2 lignes:
commande = Environ$("comspec") & " /c xcopy """ & _
RepSource & """ """ & RepDest & """ " & "/s/e"
Shell commande, 0

Et j'obtiens le même résultat...

--
@+
HD
HD
Le #22525421
J'ai également essayé en ajoutant à la commande xcopy les options /c et /y :
commande = Environ$("comspec") & " /c xcopy """ & _
RepSource & """ """ & RepDest & """ " & "/s/e/c/y"

mais rien n'y fait...

A savoir que lorsque je fais le copier à la main, sur windows, avec la
souris, Windows parvient bien à me copier tous les sous-répertoires avec
leurs fichiers...
--
@+
HD
michdenis
Le #22525531
Une dernière tentative avec les Api de Windows

Tu places le code dans un module standard en déclarant
Variables et API dans le haut du module.

Dans la procédure "test", le répertoire source est "lui même"
copié intégralement dans le répertoire de la destination spécifiée.

'--------------------------------------------
Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

Const FO_MOVE = 1
Const FO_COPY = 2
Const FO_DELETE = 3
Const FO_RENAME = 4

Const FOF_SILENT = 4
Const FOF_NOCONFIRMATION = 10

Private Declare Function SHFileOperationA Lib "Shell32.dll" _
(lpFileOp As SHFILEOPSTRUCT) As Long

Private Function CopieDossier(Source As String, Dest As String, _
Optional Action As Byte, Optional Animation As Boolean) As Boolean
Dim OpStruct As SHFILEOPSTRUCT

With OpStruct
.wFunc = Action
.pFrom = Source
.pTo = Dest
'POUR MESSAGE AVANT D'ÉCRASER : 4 AU LIEU DE 10
.fFlags = 4
End With
CopieDossier = IIf(SHFileOperationA(OpStruct), False, True)
End Function

'---------------------------------
Sub Test()

Dim Source As String
Dim Dest As String

Source = "c:pour la première"
Dest = "c:Test1"

If CopieDossier(Source, Dest, FO_COPY, True) Then
MsgBox "Opération réussie"
Else
MsgBox "Un problème fut rencontré."
End If
End Sub
'---------------------------------



--
MichD
--------------------------------------------


"HD" J'ai également essayé en ajoutant à la commande xcopy les options /c et /y :
commande = Environ$("comspec") & " /c xcopy """ & _
RepSource & """ """ & RepDest & """ " & "/s/e/c/y"

mais rien n'y fait...

A savoir que lorsque je fais le copier à la main, sur windows, avec la
souris, Windows parvient bien à me copier tous les sous-répertoires avec
leurs fichiers...
--
@+
HD
HD
Le #22525601
Impeccable !!! En utilisant les API Windows cela fonctionne en me copiant
l'intégralité des fichiers... sans aucun problème !!!

Un grand MERCI à vous deux pour votre aide
--
@+
HD
HD
Le #22525591
Dernière question... Cette API Windows fonctionne-t-elle avec les
différentes versions de Windows ?
(je parle surtout pour XP, 2000, 2003, Vista, Windows 7)

--
@+
HD
Publicité
Poster une réponse
Anonyme