Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

24 réponses
Avatar
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:\CAC\1.ASSOCIATIONS\Autres\test" il n'y a pas
de souci... mais avec un RepDest = "H:\CAC\1.ASSOCIATIONS\SECT SOCIAL
INSERTION ACTIVITE ECO\test" 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:\CAC\1.ASSOCIATIONS\SECT SOCIAL INSERTION ACTIVITE ECO\test\10 DTA\17
Dossier de contrôle CAC\17.10 Communication avec le client\17.10.2
Echantillonnage de la population à tester pour les
circularisation\Echantillonage 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:\CAC\1.ASSOCIATIONS\SECT SOCIAL INSERTION ACTIVITE
ECO\test\10 DTA\17 Dossier de contrôle CAC\17.10 Communication avec le
client\17.10.2 Echantillonnage de la population à tester pour les
circularisation\Matrice é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

10 réponses

1 2 3
Avatar
Jacquouille
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" a écrit dans le message de news:
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

Avatar
Jacquouille
....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" a écrit dans le message de
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" a écrit dans le message de news:
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





Avatar
Jacquouille
.... 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" a écrit dans le message de
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" a écrit dans le message de
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" a écrit dans le message de news:
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









Avatar
HD
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
Avatar
michdenis
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" a écrit dans le message de groupe de discussion : 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
Avatar
HD
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
Avatar
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
Avatar
michdenis
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" a écrit dans le message de groupe de discussion : i5j1q5$5o$
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
Avatar
HD
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
Avatar
HD
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
1 2 3