Recherche de données dans 1000+ fichiers

Résolu
cletess Messages postés 40 Statut Membre -  
cletess Messages postés 40 Statut Membre -
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

1 réponse

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    1. cletess Messages postés 40 Statut Membre
       
      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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > cletess Messages postés 40 Statut Membre
       
      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
    3. cletess Messages postés 40 Statut Membre
       
      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
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > cletess Messages postés 40 Statut Membre
       
      super, peux-tu alors marquer le sujet comme résolu (via la roue dentée à droite du titre)?
      0
    5. cletess Messages postés 40 Statut Membre
       
      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