Parcourir les fichiers d'un dossier et faire une rechercheV
Fermé
senecartour
Messages postés
325
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
29 octobre 2020
-
18 juin 2019 à 23:21
loic841 - 29 avril 2020 à 23:00
loic841 - 29 avril 2020 à 23:00
A voir également:
- Parcourir les fichiers d'un dossier et faire une rechercheV
- Mettre un mot de passe sur un dossier - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Dossier appdata - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment faire un fichier pdf - Guide
3 réponses
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
19 juin 2019 à 12:15
19 juin 2019 à 12:15
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...
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
19 juin 2019 à 14:32
19 juin 2019 à 14:32
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
senecartour
Messages postés
325
Date d'inscription
dimanche 12 mai 2013
Statut
Membre
Dernière intervention
29 octobre 2020
3
20 juin 2019 à 17:54
20 juin 2019 à 17:54
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,
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
21 juin 2019 à 08:37
21 juin 2019 à 08:37
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.
yg_be
Messages postés
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
1 476
28 avril 2020 à 16:18
28 avril 2020 à 16:18
peux-tu créer une nouvelle discussion, et y partager ton code?
pour contrôler la colonne de destination, il suffit de remplacer
si tu préservé la logique du code ci-dessus, il sera assez simple de faire les sommes.
pour contrôler la colonne de destination, il suffit de remplacer
Cells(I, "B")par
Cells(I, lenumerodelacolonne)
si tu préservé la logique du code ci-dessus, il sera assez simple de faire les sommes.
loic841
>
yg_be
Messages postés
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
29 avril 2020 à 14:14
29 avril 2020 à 14:14
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
yg_be
Messages postés
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
1 476
>
loic841
29 avril 2020 à 16:19
29 avril 2020 à 16:19
pour info, au lieu d'utiliser SO, tu aurais aussi pu faire ainsi:
OD.Cells(i, COL).Value = 0 ' ... OD.Cells(i, COL).Value = OD.Cells(i, COL).Value + TVS(j, 10)
loic841
>
yg_be
Messages postés
22720
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 avril 2024
29 avril 2020 à 23:00
29 avril 2020 à 23:00
Merci, effectivement je me suis compliqué la vie mais c'était ma première macro.
Bonne soirée.
Bonne soirée.