Recherche de données dans 1000+ fichiers

Résolu
cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -  
cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention   -
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > cletess Messages postés 38 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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