Microsoft 365 faire une copie d'un fichier stocké dans un sous sous... sous répertoire

  • Initiateur de la discussion Initiateur de la discussion yaka
  • 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 !

yaka

XLDnaute Occasionnel
Bonjour

Je n'ai pas trouvé de discussions à ce sujet mais peut être ai-je mal effectué ma recherche... dans ce cas, désolé et merci de m'indiquer un lien exploitable.

Mon problème
J'ai un fichier qui contient un programme qui permet de lister les fichiers contenus dans un répertoire et ses sous répertoires.
résultat = un onglet dédié qui m'affiche la liste des fichiers trouvés >> j'ai en colonne A le nom du fichier et en colonne B son adresse... pour tous les fichiers
...
puis traitement sur l'onglet = ajout de colonnes "info 1, info 2, info 3" et de valeurs dans ces colonnes pour certaines lignes. résultats

1758563202417.png

...
..
puis j'utilise une 2ème macro pour faire une copie des fichiers choisis (=ceux qui ont des valeurs dans les nouvelles colonnes "info1, info2,...") vers un répertoire dédié.
J'utilise alors FileCopy FichierOriginal, FichierDeplace
où FichierOriginal = valeur de la colonne "Répertoire (source)" & '\" & valeur de la colonne "Nom du fichier" et FichierDeplace = "mon adresse de destination\" & valeur de la colonne "Nom de fichier"

Problème : quand la longueur de la chaîne de caractères FichierOriginal dépasse 241 caractères la copie ne s'effectue pas

Quelle est la solution pour corriger ou contourner cela?

Par avance merci pour vos retours.
 
Bonjour

Je n'ai pas trouvé de discussions à ce sujet mais peut être ai-je mal effectué ma recherche... dans ce cas, désolé et merci de m'indiquer un lien exploitable.

Mon problème
J'ai un fichier qui contient un programme qui permet de lister les fichiers contenus dans un répertoire et ses sous répertoires.
résultat = un onglet dédié qui m'affiche la liste des fichiers trouvés >> j'ai en colonne A le nom du fichier et en colonne B son adresse... pour tous les fichiers
...
puis traitement sur l'onglet = ajout de colonnes "info 1, info 2, info 3" et de valeurs dans ces colonnes pour certaines lignes. résultats

Regarde la pièce jointe 1222741
...
..
puis j'utilise une 2ème macro pour faire une copie des fichiers choisis (=ceux qui ont des valeurs dans les nouvelles colonnes "info1, info2,...") vers un répertoire dédié.
J'utilise alors FileCopy FichierOriginal, FichierDeplace
où FichierOriginal = valeur de la colonne "Répertoire (source)" & '\" & valeur de la colonne "Nom du fichier" et FichierDeplace = "mon adresse de destination\" & valeur de la colonne "Nom de fichier"

Problème : quand la longueur de la chaîne de caractères FichierOriginal dépasse 241 caractères la copie ne s'effectue pas

Quelle est la solution pour corriger ou contourner cela?

Par avance merci pour vos retours.
Ha les fameuses limitation de FileCopy, Vous devez passer par FileSystemObject pour faire cela :
VB:
Sub CopyFileWithFSO(Byval sourcePath AsString, Byval ciblePath)
    ' // Fonctionne avec des chemins longs
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    

    'Utilisez la méthode CopyFile de l'objet FSO
    fso.CopyFile sourcePath, ciblePath
    
    If Not fso Is Nothing Then Set fso = Nothing
End Sub
 
Ha les fameuses limitation de FileCopy, Vous devez passer par FileSystemObject pour faire cela :
VB:
Sub CopyFileWithFSO(Byval sourcePath AsString, Byval ciblePath)
    ' // Fonctionne avec des chemins longs
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
  

    'Utilisez la méthode CopyFile de l'objet FSO
    fso.CopyFile sourcePath, ciblePath
  
    If Not fso Is Nothing Then Set fso = Nothing
End Sub

un GRAND merci Valtrase, je teste cela demain.
 
Ha les fameuses limitation de FileCopy, Vous devez passer par FileSystemObject pour faire cela :
VB:
Sub CopyFileWithFSO(Byval sourcePath AsString, Byval ciblePath)
    ' // Fonctionne avec des chemins longs
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
   

    'Utilisez la méthode CopyFile de l'objet FSO
    fso.CopyFile sourcePath, ciblePath
   
    If Not fso Is Nothing Then Set fso = Nothing
End Sub

verdict = ça ne fonctionne pas... hélas...
 
Bonjour,


C'est un peu court, jeune homme...

Es-tu sûr d'avoir utilisé la macro correctement ?
As-tu corrigé le AsString ?

Merci pour le jeune homme... ça fait très longtemps que je ne l'ai entendu...

Ceci dit...

voici mon code

...
'copier le fichier original----------------------------------------------------------------
FichierOriginal = Range("b" & lig) & "\" & Range("a" & lig)
FichierCopie = LeChemin & "\" & Range("a" & lig)

Set fso = CreateObject("Scripting.FileSystemObject")

fso.CopyFile FichierOriginal, FichierCopie, True

If Not fso Is Nothing Then Set fso = Nothing
'------------------------------------------------------------------------------------

infos complémentaires =
la référence "Microsoft Scripting Runtime" est activée
lechemin = l'adresse de destination du fichier à copier

définition des variables
>>dans la procédure où il y a le code
Dim fso As Object

>> dans un autre module que celui qui contient le code
Public lig as integer
Public LeChemin, FichierOriginal, FichierCopie As String


Quand je dis que ça ne fonctionne pas = quand le nombre de caractère de FichierOriginal dépasse 240 caractères la copie ne s'effectue pas

Par avance merci pour ton aide.
 
Si Valtrase dit que ça doit fonctionner, c'est que ça doit fonctionner. 😉

Vérifie les valeurs de FichierOriginal et FichierCopie au moment de la copie.


Remarque : si lig est un numéro de ligne, je crois qu'il vaut mieux utiliser un long qu'un integer.


ps : n'hésite pas à utiliser la balise code avec le paramètre vb pour entourer les codes VBA dans tes messages. Ils n'en seront que plus lisibles.
 
Si Valtrase dit que ça doit fonctionner, c'est que ça doit fonctionner. 😉

Vérifie les valeurs de FichierOriginal et FichierCopie au moment de la copie.


Remarque : si lig est un numéro de ligne, je crois qu'il vaut mieux utiliser un long qu'un integer.


ps : n'hésite pas à utiliser la balise code avec le paramètre vb pour entourer les codes VBA dans tes messages. Ils n'en seront que plus lisibles.

correction pour lig >> j'ai bien mis Dim lig as long (qui est beaucoup plus approprié en effet pour les n° de lignes)
 
Bonjour à tous,

@yaka, Quand vous dites :
la référence "Microsoft Scripting Runtime" est activée
Alors vous devez plutôt utiliser la référence comme ceci :
Code:
Sub test101()
    Dim fso As Scripting.FileSystemObject
    Set fso = New Scripting.FileSystemObject
    With fso
        .CopyFile
    End With
End Sub
Cela vous permet d'avoir l'Intellisense
1758720544760.png

Maintenant, sur une ligne comme ceci :
FichierOriginal = Range("b" & lig) & "\" & Range("a" & lig)
C'est le meilleur moyen de se planter sur un chemin complet.
Prenez l'habitude de travailler avec de petites fonctions, en voici une qui ajoute si nécessaire un backslash à la fin d'une chaine :

Code:
'@Description "Ajoute un backSlash é  la fin du chemin si nécessaire."
Public Function AddBackslash(ByVal FolderPath As String) As String
    FolderPath = Trim$(FolderPath)
    If Right$(FolderPath, 1) <> "\" Then FolderPath = FolderPath & "\"
    AddBackslash = FolderPath
End Function
Donc la ligne deviendrai :
Code:
FichierOriginal = AddBackslash(Range("B" & lig)) & Range("A" & lig)
Maintenant dire que cela ne fonctionne pas... 😏 comme dit TooFatboy c'est un peu court...
Passez par des variable intermédiaires et faites des Debug.Print pour voir l'état des variables, une autre solution serait de mettre des points d'arrêts au bons endroits, d'afficher la fenêtre des variables locales (Menu Affichage/Fenêtre variables locales) et de voir un peu ce qu'elles contiennent.
 
- 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