Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2011, 12h02   #1
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
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 :
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 :
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 :
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.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 15h01   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 475
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 475
Points : 7 564
Points : 7 564
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.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 15h19   #3
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
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.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 15h53   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Je propose la stratégie de développement suivante :

Code :
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 :
1
2
3
Fonction_Suppression_Répertoire(Nom_Répertoire)
   Shell de suppression de Nom_Répertoire
FinFonction
Code :
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 :
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 :
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...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 20h25   #5
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 475
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 475
Points : 7 564
Points : 7 564
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 :
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.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 03h36   #6
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
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 644
Points : 3 895
Points : 3 895
salut marot_r et Richard_35

un batch serait plus adapté:
crée dans un dossier un fichier "b.bat" contenant:
Code :
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 !
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 11h31   #7
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour à tous,

Merci Vodiem, c'est exactement ce qui me fallait. Cela va nous faire gagner un temps fou !

Merci des tuyaux, René, mais c'est une manipulation ponctuelle : je ne développe pas (plus), donc pas le temps de passer par toutes les phases de développement avec un langage inconnu (erreur de syntaxe, débuggage, etc...). Je transmets, néanmoins, ces commandes à notre développeur.

A bientôt.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2011, 15h00   #8
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 475
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 475
Points : 7 564
Points : 7 564
Merci Vodiem pour cette solution DOS très élégante.

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.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h17.


 
 
 
 
Partenaires

Hébergement Web