Recherche de données dans 1000+ fichiers

Résolu/Fermé
cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018 - 9 mars 2018 à 17:51
cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018 - 19 mars 2018 à 16:04
Chers tous,

Je me retrouve avec un travail assez laborieux à effectuer. J’ai un fichier Excel récapitulatif (voir exemple.xlsx) reprenant en colonne A « Filename » les noms de +/- 1000 autres fichiers excel (présent dans le même répertoire).

Ce fichier récapitulatif comprend également une série d’autres colonnes portant des noms spécifiques (pour l’exemple, B1= X, C1 = Y et D1 = Z)

Les 1000 fichiers de données (voir example2.xlsx) se composent comme suit : la colonne B contient une suite de lettre majuscule de longueur variable et d’ordre variable (mais unique) et la colonne C contient les valeurs qui m’intéressent.

J’aimerai à partir du fichier récapitulatif, créer une macro qui ouvrirait les uns à la suite des autres les 1000 fichiers et chercherait dans la colonne B de ceux-ci les valeurs X, Y et Z (les unes après les autres) et me rapportent les valeurs correspondantes de la colonne C dans le fichier récapitulatif.

Pour l’heure, je procède manuellement avec une formule vlookup et différentes procédures manuelles mais ce n’est vraiment pas efficace.

Auriez-vous des indications, pistes ou commentaires ? Toute aide serait grandement appréciée !

Pour télécharger les exemples, voici un lien : https://fromsmash.com/exemple-Macro

Merci beaucoup

CL


A voir également:

1 réponse

yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
9 mars 2018 à 20:08
bonsoir, je suis un peu déçu par les deux fichiers exemples.
dis-toi bien que nous avons tous intérêt à ce que tout soit le plus clair possible. toi pour obtenir ce dont tu as besoin, nous pour éviter du travail inutile.
peux-tu donc faire un effort de réalisme, par exemple avec les noms des fichiers en colonne A, et y ajouter un troisième fichier qui montre à quoi ressemblera le fichier récapitulatif à la fin du traitement?
peux-tu aussi décrire ton expérience en VBA? cherches-tu des pistes, ou un travail tout fait?
0
cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018
9 mars 2018 à 22:32
Merci pour ta réponse ! Toutes mes excuses, je vais essayer de clarifier.

Tout d'abord, les noms de fichiers. Je dois les exporter manuellement d'un programme particulier et chacun d'eux fait référence à un individu qui s'est vu attribuer une valeur allant de 1 à 998. Ils sont donc nommés 1.xlsx, 2.xlsx, etc.

Ensuite, dans l'exemple2.xlsx, j'ai en colonne B près de 200 variables différentes, ordonnées de façon différente mais toujours unique. Et je cherche la valeur de la colonne C associée à 3 de ces variables bien précises. Pour l'exemple ici, VARIABLE_X, VARIABLE_Y et VARIABLE_Z.

Je ne peux malheureusement pas fournir un fichier réel. J'ai donc produit un exemple un peu plus proche de la réalité, j'espère que ce sera plus 'parlant'.

https://fromsmash.com/exemple-Macro

Pour ce qui est de mon expérience en VBA, j'y ai déjà un peu chipoté il y a quelques temps et je comprends pas mal de choses. Je ne sais pas créer du code à partir de rien mais suis tout à fait capable d'adapter différentes macros ou en combiner pour arriver à mes fins.

Encore merci et très bonne soirée,

CL
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018
9 mars 2018 à 23:54
cela me semble très clair, merci.
suggestion:
Option Explicit

Sub cletess()
Dim wb As Workbook
Dim fdest As Worksheet, fsource As Worksheet
Dim dlig As Long
Dim sfich As String
Dim srow As Range
Dim crit1 As String, crit2 As String, crit3 As String
Dim skey, sval, cpath As String

cpath = ThisWorkbook.Path & "\"
Set fdest = ActiveSheet
crit1 = fdest.Cells(1, 2)
crit2 = fdest.Cells(1, 3)
crit3 = fdest.Cells(1, 4)
dlig = 2
sfich = fdest.Cells(dlig, 1)
Do While sfich <> ""
    Set wb = Workbooks.Open(cpath & sfich & ".xlsx")
    Set fsource = wb.Sheets(1)
    For Each srow In fsource.UsedRange.Rows
        skey = srow.Cells(1, 2)
        sval = srow.Cells(1, 3)
        Select Case skey
            Case Is = crit1
                fdest.Cells(dlig, 2) = sval
            Case Is = crit2
                fdest.Cells(dlig, 3) = sval
            Case Is = crit3
                fdest.Cells(dlig, 4) = sval
        End Select
    Next srow
    wb.Close
    dlig = dlig + 1
    sfich = fdest.Cells(dlig, 1)
Loop
End Sub
0
cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018
19 mars 2018 à 10:05
Magnifique, ça fonctionne à merveille ! Merci pour votre temps/aide !

En rajoutant quelques crit* j'ai pu extraire toutes les données dont j'avais besoin en un rien de temps :)

Très bonne journée et encore merci !!
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018
19 mars 2018 à 10:33
super, peux-tu alors marquer le sujet comme résolu (via la roue dentée à droite du titre)?
0
cletess Messages postés 38 Date d'inscription jeudi 10 janvier 2013 Statut Membre Dernière intervention 5 avril 2018
19 mars 2018 à 10:35
Un petite précision : Disons que j'ai les valeurs d'une trentaine de variables différentes à aller chercher dans les fichiers de données, est-ce faisable/optimal de répéter la procédure suivante 34 fois pour autant que j'ai défini crit1 à crit 34 as String ?

Select Case skey
Case Is = crit1
fdest.Cells(dlig, 2) = sval
0