IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème pour déplacer des fichiers [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 52
    Points : 13
    Points
    13
    Par défaut Problème pour déplacer des fichiers
    Bonjour ou bonsoir,

    Encore une fois, je me tourne vers vous et vos compétences pour résoudre un problème qui semblerait anodin pour un expert mais sur lequel je bute depuis de nombreuses heures.
    En fait, je tente désespérément à savoir pourquoi il m'est impossible de déplacer des fichiers d'un répertoire à un autre.

    Pour le déplacement, j'ai "pensé" à utiliser ou tout du moins trouver sur internet des méthodes comme "name X as Y", "Filecopy" ou encore "movefile" et j'en passe.
    A chaque fois, après avoir ajuster le code, une erreur du type "fichier introuvable" se lance.
    Pour tenter de la résoudre, j'ai bien vérifié les liens, noms des fichiers, etc. (d'ailleurs, si j'utilise "Name X As Y" en gardant le même répertoire mais en modifiant le nom, ça fonctionne. Alors que, par exemple, Name "D:\X" As "E:\X" ne fonctionne pas)

    Voici un exemple du dernier code mis en place:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub trans()
    Dim un As String, deux As String
     
    un = Sheets("chemins").Range("D5")
    deux = Sheets("chemins").Range("D6")
     
    Name un As deux
     
    End Sub
    avec en cellule D5 (ou D6) une formule "concaténer" donnant ceci:
    D5 = K:\ne pas effacer ni modifier\ijg\partage\2016\Décembre\test.pdf
    D6 = K:\ne pas effacer ni modifier\ijg\archives\2016\Décembre\test.pdf

    Je suspecte fortement que l'erreur provient du fait que je fais référence à des cellules contenant les liens + noms des fichiers. Hélas pas possible de faire autrement puisqu'il me faut à tout prix garder ces références. De toute façon, même en remplaçant les formules par un texte ça ne fonctionne pas.

    A noter que seuls des fichiers pdf sont à déplacer/copier/placer dans un autre dossier (transfert du dossier "\partage\année\mois\" vers "archives\année\mois\")

    Ainsi, me retrouvant dans une impasse, me voici face à vous pour un éclairage tant désiré.

    Merci par avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,


    Avez-vous regardé le tutoriel de Christophe WARIN Manipulation des fichiers en VBA ?
    Nb : Nécessite d'activer la référence Microsoft Scripting Runtime.

    Cordialement.

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour

    avec en cellule D5 (ou D6) une formule "concaténer" donnant ceci:
    D5 = K:\ne pas effacer ni modifier\ijg\partage\2016\Décembre\test.pdf
    D6 = K:\ne pas effacer ni modifier\ijg\archives\2016\Décembre\test.pdf
    ...ne fonctionne pas ...
    Avec ou sans message d'erreur - et si avec : quel est ce message - ? (car si sans : normal, avec CET exemple

    PS : et par ailleurs :
    Range("D5"), quoi ? (qu_elle propriété de cette cellule ?) - Idem pour la cellule D6. Laisser VBA deviner la propriété à utiliser n'est jamais une bonne idée.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Avec l'Api CopyFile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Declare Function CopyFile _
            Lib "kernel32" _
            Alias "CopyFileA" ( _
            ByVal lpExistingFileName As String, _
            ByVal lpNewFileName As String, _
            ByVal bFailIfExists As Long) _
            As Long
     
    Sub copier()
     
        Dim un As String
        Dim deux As String
        Dim Ecraser As Long
     
        Ecraser = 1 '0 = oui, 1 = non
     
        un = Sheets("chemins").Range("D5")
        deux = Sheets("chemins").Range("D6")
     
        CopyFile un, deux, Ecraser
     
    End Sub

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Theze
    Pourquoi utiliser une fonction de l'Api de Windows ?
    L'instruction Name As dfe VBA fonctionne fort bien
    Fonctionnent également bien les méthodes de VBA :
    pour copier vers destination et garder le source à sa place
    Copy
    CopyFile
    pour déplacer de source à destination :
    MoveFile
    Move
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour unparia,

    Une piste comme une autre, à grogus de faire son choix !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    Bonjour à vous tous et tout d'abord merci pour vos réponses variées et diverses.

    Sinon pour répondre dans l'ordre:

    @Eric KERGRESSE : runtime est déjà activé donc ça ne semble pas venir de ça

    @unparia : message d'erreur (fichier introuvable) dans tous les cas. Et quand tu parles de variables... et en indiquant "range("D5).value" ça suffirait? Car déjà tenté cette option. Sachant que "un" et "deux" sont définis en string (sauf erreur, ça doit être ça puisqu'il s'agit de chaines de caractères)

    @Theze : Déjà essayé cette méthode aussi. Par contre sans passé par l'Api. En effet, travaillant en 64bit, ça bloque un peu.

    Bon malgré tout, j'ai refait un test avec un nouveau fichier et de nouveaux répertoires et... "name as" fonctionne. Pourtant j'ai l'impression d'avoir refait le même principe: même type de cellules avec des formules concaténer, etc.
    L'erreur qui se produit (fichier introuvable) provient du fichier d'origine. Pfff. C'est à perdre les pédales! Est-ce que ça peut provenir du fait que je travaille sur une clé usb (le chemin est correct bien entendu)?

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    l'instruction Name comme la méthode Move du VBA fonctionnant sans souci,
    à 99,999% le message fichier introuvable indique une erreur dans la chaine de caractères pointant le fichier !

    Et ce n'est pas compliqué à vérifier ! Il suffit de lister les fichiers du répertoire dans une feuille (fonction Dir)
    puis comparer la cellule du fichier en question avec la chaine …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    Alors... merci Marc-L et à vous tous. Pourquoi commencer par Marc-L? Et bien, honte à moi de vous avoir fait perdre autant de temps, mais ta fonction dir en parallèle avec la formule exact() m'a permis de trouver une erreur plus que grossière!

    Donc oui je fais parti des 99,99999% car l'erreur vient bien d'un problème de copie de chemin. Un simple espace en trop. Le truc trop bête.

    En tout cas sincèrement merci à vous.

    [EDIT] voici le code que j'utilise à présent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub copie()
    Dim DestinationFile As String, chmdospnom As String, Fichier As String, sourceW As String
     
         DestinationFile = Sheets("chemins").Range("B7")
         chmdosp = Sheets("chemins").Range("B6")
         nomFichier = Dir(chmdosp & "*.PDF")
         sourceW = chmdosp
         Do While Len(nomFichier) > 0
               FileCopy sourceW & nomFichier, DestinationFile & "\" & nomFichier
               Kill sourceW & nomFichier
               nomFichier = Dir
         Loop
    End Sub

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    et bien soit!!
    maintenant que tu a trouvé ton erreur le "Name as" devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub copie()
    Dim DestinationFile As String,  Fichier As String, sourceW As String
     
         DestinationFile = Sheets("chemins").Range("B7").Text   ' attention ici ce doit être un nom de dossier et si possible terminant par "\"
         sourceW = Sheets("chemins").Range("B6").Text           ' attention ici ce doit être un nom de dossier et si possible terminant par "\"
         nomFichier = Dir(sourceW & "*.PDF")
     
         Do While Len(nomFichier) > 0
               Name sourceW & nomFichier As DestinationFile &  nomFichier
                          nomFichier = Dir
         Loop
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    Encore merci pour toutes vos interventions et je note le code que tu fournis, patricktoulon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POI] Problème de lecture des fichiers Word
    Par Dari dans le forum Documents
    Réponses: 9
    Dernier message: 05/07/2007, 14h08
  2. Problème pour déplacer des fichiers
    Par kurul1 dans le forum C++Builder
    Réponses: 16
    Dernier message: 07/03/2007, 16h25
  3. Comment déplacer des fichiers sous perl ?
    Par Ickou dans le forum Langage
    Réponses: 6
    Dernier message: 10/11/2005, 12h17
  4. [HTML] Problème mise à jour des fichiers en cache
    Par El Riiico dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/09/2005, 17h00
  5. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo