Parcourir les fichiers d'un dossier et faire une rechercheV
senecartour
Messages postés
324
Date d'inscription
Statut
Membre
Dernière intervention
-
loic841 -
loic841 -
Bonjour à tous,
Je me permets de vous solliciter pour m'aider à résoudre un problème.
J'ai plusieurs fichiers dans un dossier et j'ai mon fichier principal dans le quel j'ai des données dans la colonne "A" de l'onglet "Feuil1".
Je cherche une macro, qui permets de parcourir un à un les fichiers de mon répertoire, de faire la rechercheV par rapport au données de la colonne "A" de l'onglet "A" de mon classeur principal et d'afficher les résultats dans la colonne B.
Je vous remercie énormément pour votre aide.
Cordialement,
Je me permets de vous solliciter pour m'aider à résoudre un problème.
J'ai plusieurs fichiers dans un dossier et j'ai mon fichier principal dans le quel j'ai des données dans la colonne "A" de l'onglet "Feuil1".
Je cherche une macro, qui permets de parcourir un à un les fichiers de mon répertoire, de faire la rechercheV par rapport au données de la colonne "A" de l'onglet "A" de mon classeur principal et d'afficher les résultats dans la colonne B.
Je vous remercie énormément pour votre aide.
Cordialement,
A voir également:
- Parcourir les fichiers d'un dossier et faire une rechercheV
- Dossier appdata - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Renommer tous les fichiers d'un dossier - Guide
- Impossible de supprimer un dossier - Guide
3 réponses
Bonjour Senecartrour, bonjour le forum,
Manque de renseignements pour pouvoir t'aider :
- Les autres fichiers se trouvent-ils dans le même dossier que le fichier principal ?
- Le dossier contient-il d'autres fichiers qui n'ont rien à voir ?
- Quelle extension des fichiers ?
- Chemin d'accès complet du dossier ?
- Les données commencent-elles toutes dans la cellule A1 ?
En attendant ta réponse je te prépare un code et te l'envoie plus tard...
Manque de renseignements pour pouvoir t'aider :
- Les autres fichiers se trouvent-ils dans le même dossier que le fichier principal ?
- Le dossier contient-il d'autres fichiers qui n'ont rien à voir ?
- Quelle extension des fichiers ?
- Chemin d'accès complet du dossier ?
- Les données commencent-elles toutes dans la cellule A1 ?
En attendant ta réponse je te prépare un code et te l'envoie plus tard...
Re,
Essaie ce code à placer dans le fichier principal :
Essaie ce code à placer dans le fichier principal :
Sub Macro1() Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim CA As String 'déclare la variable CA (Chemin d'Accès) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim DL As Integer 'déclare la variable DL (Dernière Ligne) Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs) Dim F As String 'déclare la variable F (Fichier) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet Source) Dim TVS As Variant 'déclare la variable TVS (Tableau des Valeurs de la Source) Set CD = ThisWorkbook 'définit le classeur destination CD CA = CD.Path & "\" 'définit le chemin d'accès CA Set OD = CD.Worksheets("Feuil1") 'définit l'onglet destination OD DL = OD.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet OD TV = OD.Range("A1:A" & DL) 'définit le tableau des valeurs TV F = Dir(CA & "*.xls") 'définit le premier fichier F ayant CA comme chemin d'accès et .xls comme extension Do While F <> "" 'exécute tant qu'il existe des fichiers F Set CS = Workbooks.Open(CA & F) 'définit le classeur source CS (en l'ouvrant) Set OS = CS.Worksheets(1) 'définit l'onglet source OS (1er onglet du classeur source CS) TVS = OS.Range("A1").CurrentRegion 'définit le tableau des valeur de la source TVS For I = 1 To DL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV For J = 1 To UBound(TVS, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs de la sources TVS If TV(I, 1) = TVS(J, 1) Then 'condition : si les deux données en colonne 1 sont identiques OD.Cells(I, "B").Value = TVS(J, 2) 'renvoie dans le cellule ligne I colonne B de l'onglet OD, la valeur de la donnée ligne J colonne 2 du tableau des valeurs TVS Exit For 'sort de la boucle 2 End If 'fin de la condition Next J 'prochaine ligne de la boucle 2 Next I 'prochaine ligne de la boucle 1 CS.Close False 'ferme le classeur source sans enregistrer F = Dir 'définit le fichier suivant F ayant CA comme chemin d'accès et .xls comme extension Loop 'boucle End Sub
Bonjour ThauTheme ,
Merci beaucoup pour ton aide. C'est exactement ce que je voulais. Mais juste un petit point à corriger !
Les autres fichiers sont dans le même répertoire que le fichier principal et je ne veux pas que le fichier principal soit pris en compte dans la boucle.
Pourrais-tu adapter la macro pour que seuls les fichiers à traiter soient pris en compte dans la boucle ?
Si vous arrivez à me corriger cela, c'est génial!!
En tout cas merci infiniment!
Cordialement,
Merci beaucoup pour ton aide. C'est exactement ce que je voulais. Mais juste un petit point à corriger !
Les autres fichiers sont dans le même répertoire que le fichier principal et je ne veux pas que le fichier principal soit pris en compte dans la boucle.
Pourrais-tu adapter la macro pour que seuls les fichiers à traiter soient pris en compte dans la boucle ?
Si vous arrivez à me corriger cela, c'est génial!!
En tout cas merci infiniment!
Cordialement,
Re,
Le code corrigé :
Le code corrigé :
Sub Macro1() Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim CA As String 'déclare la variable CA (Chemin d'Accès) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim DL As Integer 'déclare la variable DL (Dernière Ligne) Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs) Dim F As String 'déclare la variable F (Fichier) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet Source) Dim TVS As Variant 'déclare la variable TVS (Tableau des Valeurs de la Source) Set CD = ThisWorkbook 'définit le classeur destination CD CA = CD.Path & "\" 'définit le chemin d'accès CA CA = "Z:\poubelle\CharlieB\" Set OD = CD.Worksheets("Feuil1") 'définit l'onglet destination OD DL = OD.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet OD TV = OD.Range("A1:A" & DL) 'définit le tableau des valeurs TV F = Dir(CA & "*.xls") 'définit le premier fichier F ayant CA comme chemin d'accès et .xls comme extension Do While F <> "" 'exécute tant qu'il existe des fichiers F If Not F = CD.Name Then Set CS = Workbooks.Open(CA & F) 'définit le classeur source CS (en l'ouvrant) Set OS = CS.Worksheets(1) 'définit l'onglet source OS (1er onglet du classeur source CS) TVS = OS.Range("A1").CurrentRegion 'définit le tableau des valeur de la source TVS For I = 1 To DL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV For J = 1 To UBound(TVS, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs de la sources TVS If TV(I, 1) = TVS(J, 1) Then 'condition : si les deux données en colonne 1 sont identiques OD.Cells(I, "B").Value = TVS(J, 2) 'renvoie dans le cellule ligne I colonne B de l'onglet OD, la valeur de la donnée ligne J colonne 2 du tableau des valeurs TVS Exit For 'sort de la boucle 2 End If 'fin de la condition Next J 'prochaine ligne de la boucle 2 Next I 'prochaine ligne de la boucle 1 CS.Close False 'ferme le classeur source sans enregistrer End If F = Dir 'définit le fichier suivant F ayant CA comme chemin d'accès et .xls comme extension Loop 'boucle End Sub
Bonjour,
Merci pour cette réponse qui m'a également était utile.
Je me permets du coup de vous solliciter pour mon propre besoin :
Dans le fichier principal, je souhaite faire apparaître une colonne par fichier. Il ne faut donc pas reporter à chaque fois dans la colonne B mais décaler au fur et à mesure. Pourriez-vous m'aider ? J'ai réussi a faire apparaître le nom du fichier en colonne mais dans la macro actuelle, les valeurs sont écrasées puisque reportées dans la même colonne.
Autre difficulté que vous pourriez peut être m'aider à résoudre, mais là j'en demande peut-être trop : j'ai parfois plusieurs fois un champs identique dans mes fichiers sources. Peut-on reporter la somme des champs identique dans le fichier principale.
Merci d'avance pour votre éclairage et vos précieux conseils.
Merci pour cette réponse qui m'a également était utile.
Je me permets du coup de vous solliciter pour mon propre besoin :
Dans le fichier principal, je souhaite faire apparaître une colonne par fichier. Il ne faut donc pas reporter à chaque fois dans la colonne B mais décaler au fur et à mesure. Pourriez-vous m'aider ? J'ai réussi a faire apparaître le nom du fichier en colonne mais dans la macro actuelle, les valeurs sont écrasées puisque reportées dans la même colonne.
Autre difficulté que vous pourriez peut être m'aider à résoudre, mais là j'en demande peut-être trop : j'ai parfois plusieurs fois un champs identique dans mes fichiers sources. Peut-on reporter la somme des champs identique dans le fichier principale.
Merci d'avance pour votre éclairage et vos précieux conseils.
Bonjour,
merci pour votre réponse. Avec un peu de réflexion, j'ai modifié le code d'origine pour obtenir ce que je cherchais. je vous le laisse ci-dessous pour information. Si ce n'est vraiment pas la place, je pourrais le supprimer :
merci pour votre réponse. Avec un peu de réflexion, j'ai modifié le code d'origine pour obtenir ce que je cherchais. je vous le laisse ci-dessous pour information. Si ce n'est vraiment pas la place, je pourrais le supprimer :
Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim F As String 'déclare la variable F (Fichier)
Dim COL As Integer 'variable pour dédier une collone au fichier F
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TVS As Variant 'déclare la variable TVS (Tableau des Valeurs de la Source)
Dim SO As Currency ' XXdéclare la variable somme
Set CD = ThisWorkbook 'définit le classeur destination CD
CA = CD.Path & "\" 'définit le chemin d'accès CA
CA = "C:\Users\chery\Documents\Coût\"
Set OD = CD.Worksheets("Compilation") 'définit l'onglet destination OD
DL = OD.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet OD
TV = OD.Range("B1:B" & DL) 'définit le tableau des valeurs TV
F = Dir(CA & "*.xlsm") 'définit le premier fichier F ayant CA comme chemin d'accès et .xlsm comme extension
COL = 0 'Initialisation de Col
Do While F <> "" 'exécute tant qu'il existe des fichiers F
If Not F = CD.Name Then
Set CS = Workbooks.Open(CA & F) 'définit le classeur source CS (en l'ouvrant)
Set OS = CS.Worksheets(1) 'définit l'onglet source OS (1er onglet du classeur source CS)
TVS = OS.Range("A1:J" & DL) 'définit le tableau des valeur de la source TVS
OD.Cells(1, COL).Value = F 'renvoie en tête de colonne le nom du fichier
For i = 2 To DL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV
SO = 0 'Initialisation de la valeur colonne
For j = 1 To UBound(TVS, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs de la sources TVS
If TV(i, 1) = TVS(j, 1) Then 'condition : si les deux données en colonne 1 sont identiques
SO = SO + TVS(j, 10) 'XX
End If 'fin de la condition
Next j 'prochaine ligne de la boucle 2
OD.Cells(i, COL).Value = SO 'XXrenvoie dans le cellule ligne I colonne B de l'onglet OD, la valeur de la donnée ligne J colonne 2 du tableau des valeurs TVS
Next i 'prochaine ligne de la boucle 1
CS.Close False 'ferme le classeur source sans enregistrer
End If
F = Dir 'définit le fichier suivant F ayant CA comme chemin d'accès et .xls comme extension
COL = COL + 4 'incrémentation de Col
Loop 'boucle
End Sub