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

VBA Access Discussion :

Déplacement fichiers de répertoire "fils" vers répertoire "père". [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut Déplacement fichiers de répertoire "fils" vers répertoire "père".
    Bonjour à tous,

    Une bonne âme codeuse pourrait-elle me dépanner ?

    Je ne connais pas VBA et j'aurais besoin d'un petit coup de main concernant un programme qui ne sera déclenché qu'une seule fois.

    Il faudrait déplacer tous les fichiers de plusieurs répertoires "fils" vers le répertoire "père", puis supprimer les répertoires "fils" qui devraient être vide après la boucle de traitement.

    Soit :
    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
    Repertoire A
        |______ Sous-répertoire A1
        |           |______ Sous-répertoire A11
        |           |           Fichier A11F1
        |           |           Fichier A11F2
        |           |           Fichier A11F3
        |           |______ Sous-répertoire A12
        |           |           Fichier A12F1
        |           |           Fichier A12F2
        |           |______ Sous-répertoire A13
        |                       Fichier A13F1
        |                       Fichier A13F2
        |                       Fichier A13F3
        |______ Sous-répertoire A2
                    |______ Sous-répertoire A21
                    |           Fichier A21F1
                    |           Fichier A21F2
                    |           Fichier A21F3
                    |______ Sous-répertoire A22
                                Fichier A22F1
                                Fichier A22F2
    doit devenir, dans un premier temps :
    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
    Repertoire A
        |______ Sous-répertoire A1
        |           |    Fichier A11F1
        |           |    Fichier A11F2
        |           |    Fichier A11F3
        |           |    Fichier A12F1
        |           |    Fichier A12F2
        |           |    Fichier A13F1
        |           |    Fichier A13F2
        |           |    Fichier A13F3
        |           |______ Sous-répertoire A11
        |           |______ Sous-répertoire A12
        |           |______ Sous-répertoire A13
        |______ Sous-répertoire A2
                    |    Fichier A21F1
                    |    Fichier A21F2
                    |    Fichier A21F3
                    |    Fichier A22F1
                    |    Fichier A22F2
                    |______ Sous-répertoire A21
                    |______ Sous-répertoire A22
    puis, en final :
    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
    Repertoire A
        |______ Sous-répertoire A1
        |                Fichier A11F1
        |                Fichier A11F2
        |                Fichier A11F3
        |                Fichier A12F1
        |                Fichier A12F2
        |                Fichier A13F1
        |                Fichier A13F2
        |                Fichier A13F3
        |______ Sous-répertoire A2
                         Fichier A21F1
                         Fichier A21F2
                         Fichier A21F3
                         Fichier A22F1
                         Fichier A22F2
    Lors du déplacement d'un fichier, si celui-ci existe déjà (en cible), laisser le répertoire "fils" présent (source), ainsi que le fichier concerné (source).

    Je ne sais pas si c'est possible en VBA.

    Merci de votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Avant de se lancer dans le VBA, as-tu essayé avec l'explorateur de Windows ?

    Tu fais une recherche des fichiers avec parcours des sous-répertoires et une fois que Windows les a trouvés tu les déplaces avec un simple couper/coller. Ça devrait marcher.

    Évidement FAIT UNE SAUVEGARDE DE L'ARBORESCENCE AVANT de commencer tes déplacements !!!

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut
    Bonjour René,

    Merci de ton intérêt.
    Citation Envoyé par René
    Tu fais une recherche des fichiers avec parcours des sous-répertoires et une fois que Windows les a trouvés tu les déplaces avec un simple couper/coller. Ça devrait marcher.
    ==> oui, ça marche, c'est sûr.

    Mais, j'ai beaucoup de répertoires du type "Sous-répertoire A1", avec toujours 3 sous-sous-répertoires du type "Sous-répertoire A11". Le couper/coller manuel est ingérable.

    D'après ce que j'ai compris, il s'agirait de lancement de "Shell" en manipulant la chaîne de caractère. Je ne sais pas s'il existe des commandes VBA de manipulation de répertoires Windows.

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Par défaut
    Je propose la stratégie de développement suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fonction_Déplacement(Nom_Fichier, Répertoire_Source, Répertoire_Cible)
       Shell de déplacement du fichier Nom_Fichier de Répertoire_Source vers  Répertoire_Cible
    FinFonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fonction_Suppression_Répertoire(Nom_Répertoire)
       Shell de suppression de Nom_Répertoire
    FinFonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Fonction_Répertoire_Vide(Nom_Répertoire, Nombre_Fichier)
       Nombre_Fichier = Shell de comptage de fichier dans Nom_Répertoire
    FinFonction
    Traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Liste des sous-répertoires de "Repertoire A" (dans l'exemple)
    Lire la liste=>"Repertoire Ax"
       Liste des sous-répertoires d'un élément de la liste "Repertoire Ax"
       Lire la liste=>"Repertoire Axy"
          Liste des fichiers d'un élément de la liste "Repertoire Axy"=>"Fichier AxyFz"
             Fonction_Déplacement("Fichier AxyFz", "Repertoire Axy", "Repertoire Ax")
          Suivant "Fichier AxyFz"
       Suivant "Repertoire Axy"
    Suivant "Repertoire Ax"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Liste des sous-répertoires de "Repertoire A" (dans l'exemple)
    Lire la liste=>"Repertoire Ax"
       Liste des sous-répertoires d'un élément de la liste "Repertoire Ax"
       Lire la liste=>"Repertoire Axy"
          Si Fonction_Répertoire_Vide("Repertoire Axy", Nombre_Fichier) = 0
             Fonction_Suppression_Répertoire("Repertoire Axy")
          FinSi
       Suivant "Repertoire Axy"
    Suivant "Repertoire Ax"
    Cela devrait fonctionner... en prévoyant sauvegarde et test sur des répertoires bidons...

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Comme c'était un 'one shot' cela valait le coup de regarder si on pouvait le faire simplement :-).

    Tu n'as pas vraiment besoin du DOS cela peut se faire directement avec Access. Surtout qu'avec le DOS il est plus difficile de savoir quand la commande a fini de s'éxécuter.

    Pour copier un fichier utiliser FileCopy(Source, Destination) et la source peut être *.*.

    Pour trouver les répertoires Dir(pathname, vbDirectory)

    Pour suprimer un fichier : Kill(NomComplteFichier)

    Pour supprimer un sous-répertoire : RmDir()

    Pour parcourrir l'ensemble des fichiers d'un répertoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dim nomFic as string
    nomFic=dir("CheminRepertoire\*.*")
    do while nomFic<>""
       nomFic=Dir()
    end do
    Attention Dir() n'est pas récurcif. Si tu appel une fonction qui utilise Dir() qui appele elle-même une fonction qui utilise Dir() Access se perd et ne garde que le dernier Dir().

    Tu peux regarder du côté du FileSystemObject qui permet aussi de faire ce genre de manip.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    salut marot_r et Richard_35

    un batch serait plus adapté:
    crée dans un dossier un fichier "b.bat" contenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @ECHO OFF
    CD %1
    FOR /D %%d IN (*) DO FOR /D %%s IN ("%%d\*") DO (
    MOVE /-Y "%%s\*.*" "%%d"
    RD "%%s")
    ouvre une ligne de commande (cmd.exe) dans le dossier contenant le fichier b.bat
    exécute (chemin en exemple):
    tape "N" à chaque interrogation. (annulation déplacement si déjà existant dans le dossier parent: pas d'automatisation à ce niveau)

    avec copie de sauvegarde au préalable.
    attention : pas d'erreur permis sur le chemin !

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

Discussions similaires

  1. [PROC] Exporter vers Excel sans simple quote
    Par Tabby dans le forum SAS Base
    Réponses: 6
    Dernier message: 21/02/2012, 16h41
  2. création répertoire et déplacement fichier
    Par chercheur111 dans le forum MATLAB
    Réponses: 8
    Dernier message: 30/04/2011, 22h20
  3. Export access vers excel mais pb quote
    Par ancylia dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/06/2008, 09h50

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