Récuperer des fichiers dans des sous répertoi

p_romain Messages postés 11 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

voila mon problème. Je souhaiterai a l'aide d'une macro excel de pourvoir récuperer tout les fichiers qui sont dans différents sous répertoire pour les listers dans les cellule excel d'une meme feuille.

voila les chemins d'accés des 4 sous répertoires ou il faudrait récuperer tous les fichiers.

G:\Souscription Plaisance\Corbeille courrier\Affaires Nouvelles à établir
G:\Souscription Plaisance\Corbeille courrier\Courrier à traiter
G:\Souscription Plaisance\Corbeille courrier\Résil à traiter
G:\Souscription Plaisance\Corbeille courrier\Tarification & Notes de Couverture

En clair je voudrai que tout les fichier qui se situe dans les sous répertoire, Affaire nouvelles à établir, Courrier à traiter, Résil à traiteret Tarification & Notes de couverture soit regrouper dans la meme feuille excel dans des cellules.

donc ça c'était ma première manip.
la 2 ème je veut que c fichier soit ouvrable a partir des cellule excel juste en clickant dessus, que je ne soit pas obliger de retourner dans le répertoire pour pouvoir les ouvrirs.

Je ne suis pas un expert en excel mais je me débrouille un petit peu quand meme. Est que ce serai possible de bien détailler la réponse pour que je sois capable de bien la comprendre. Merci d'avance.

6 réponses

Utilisateur anonyme
 
Bonjour,

Quelques précisions :

1.) Dans ces sous répertoires, y a-t-il plusieurs type de fichiers ( *.xls, *.doc, *.jpg, *.mp3 ... ) ?

2.) Y a-t-il d'autres sous-répertoires à celuici : G:\Souscription Plaisance\Corbeille courrier\ que les 4 mentionnés ?

3.) La macro se lance comment, par un bouton, un menu, à l'ouverture ?

Lupin
0
Utilisateur anonyme
 
re:

en supposant qu'il n'y ait que des fichiers Excels a exploiter,
en supposant qu'il n'y ait pas d'autres sous-dossiers,
en supossant que l'on appelle la macro par le menu.

la liste est produite sur la feuille active, du classeur actif !

Option Explicit

Const Dossier1 = "G:\Souscription Plaisance\Corbeille courrier\Affaires Nouvelles à établir\"
Const Dossier2 = "G:\Souscription Plaisance\Corbeille courrier\Courrier à traiter\"
Const Dossier3 = "G:\Souscription Plaisance\Corbeille courrier\Résil à traiter\"
Const Dossier4 = "G:\Souscription Plaisance\Corbeille courrier\Tarification & Notes de Couverture\"

Const cteExcel = ".xls"
'

Sub TraitementDossier()

    Call ParcoursDossier(Dossier1)
    Call ParcoursDossier(Dossier2)
    Call ParcoursDossier(Dossier3)
    Call ParcoursDossier(Dossier4)

End Sub
'

Function ParcoursDossier(Repertoire As String)
    
    Dim varFichier As Variant, ListeFichiers As String
    Dim Boucle As Long
    
    ListeFichiers = "": Boucle = 0
    Range("A2").Select
    varFichier = Dir(Repertoire & "*" & cteExcel, vbDirectory)
    Do While varFichier <> ""
        If ((varFichier <> ".") And (varFichier <> "..")) Then
            If Not ((GetAttr(Repertoire & varFichier) And vbDirectory) = vbDirectory) Then
                ActiveCell.Value = Repertoire & varFichier
                ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
                    Repertoire & varFichier, TextToDisplay:=Repertoire & varFichier
                Boucle = (Boucle + 1)
                ActiveCell.Offset(1, 0).Select
            End If
        End If
        varFichier = Dir
    Loop
    
End Function
'

Lupin
0
p_romain Messages postés 11 Statut Membre
 
Je viens essayé ta longue formule. et comme je t envoyé le message juste avant je doit ouvrir tout type de fichier. En revanche sa fonctionne et c hallucinant. J'ai essayé de modifier Const cteExcel = ".xls" en Const cteExcel = "."; mais ça n'a pas fonctionné.

je te remerci mille fois
0
p_romain Messages postés 11 Statut Membre
 
Merci pour ta réponse je n'ai pas encore eu le temps de tester, je penser recevoir une messgae sur mon adresse mail quand quelqu'un me répondrai mais non. c bizare.

1) oui il y a plusieur type de fichier et j'aimerai tous les récuperers. .doc .xls. psf .msg ...

2) oui il y a un sous répertoire de plus qui s'appelle G:\Souscription Plaisance\Corbeille courrier\Archivage. mais je n'est pas besoin d'allé récuperer les fichier dedans.

3) J'aimerai que le mise a jour ce fasse lors de l'ouverture du fichier, mais quelle soit aussi possible de mettre a jour quand le fichier est ouvert a l'aide d'un bouton ou autre chose.

je te remerci énormément pour le temps que tu passe pour me répondre. Je crois que je vais me mettre au langage vba car ça me passionne et c super utile, aurais tu un ou vrage a me conseiller. merci
0
p_romain Messages postés 11 Statut Membre
 
En fait c bon j'ai modifier Const cteExcel = ".xls" en Const cteExcel = "*." et ça fonctionne. j'arrive a récuperer tout les fichier mais le problème c que quand je fait ça, il ne va plus récupérer les fichier dans Affaire nouvelle à ètablir alors que je n'ai rien modifier. Et quand je remet Const cteExcel = ".xls" et bien il va chercher les fichier dans affaire nouvelle à ètablir.

voila le code
Option Explicit

Const Dossier1 = "G:\Souscription Plaisance\Corbeille courrier\Affaires Nouvelles à établir\"
Const Dossier2 = "G:\Souscription Plaisance\Corbeille courrier\Courrier à traiter\"
Const Dossier3 = "G:\Souscription Plaisance\Corbeille courrier\Résil à traiter\"
Const Dossier4 = "G:\Souscription Plaisance\Corbeille courrier\Tarification & Notes de Couverture\"

Const cteExcel = "*."
'

Sub TraitementDossier()

Call ParcoursDossier(Dossier1)
Call ParcoursDossier(Dossier2)
Call ParcoursDossier(Dossier3)
Call ParcoursDossier(Dossier4)

End Sub
'

Function ParcoursDossier(Repertoire As String)

Dim varFichier As Variant, ListeFichiers As String
Dim Boucle As Long

ListeFichiers = "": Boucle = 0
Range("A2").Select
varFichier = Dir(Repertoire & "*" & cteExcel, vbDirectory)
Do While varFichier <> ""
If ((varFichier <> ".") And (varFichier <> "..")) Then
If Not ((GetAttr(Repertoire & varFichier) And vbDirectory) = vbDirectory) Then
ActiveCell.Value = Repertoire & varFichier
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:= _
Repertoire & varFichier, TextToDisplay:=Repertoire & varFichier
Boucle = (Boucle + 1)
ActiveCell.Offset(1, 0).Select
End If
End If
varFichier = Dir
Loop

End Function
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
Bonjour,

Tu peux modifier la ligne :

Const cteExcel = "*.xls"

pour

Const cteFichier = "*.*"

ainsi tu auras tous les fichiers.

Pour le démarrage de la macro à l'ouverture :

1. Ouvrir le fichier
2. Taper Alt F11
3. Localisé le nom du fichier dans fenêtre de gauche
4. Localisé ThisWorkbook sous le fichier (double clic)
5. Fenêtre de droite, liste déroulante de gauche, choisir [ Workbook ]
6. Ajouter l'instruction : [ Call TraitementDossier ] dans la routine [ Workbook_Open ].

Lupin
0
Utilisateur anonyme
 
re :

Comme ouvrage de référence, j'utilise :
--------------------------------------------------------------------
Excel 2000 et VBA Le guide du développeur
John Walkenbach
--------------------------------------------------------------------
Beginning Access 97 VBA Programming
Robert Smith and David Sussman
--------------------------------------------------------------------

Lupin
0