Recherchez 1000 numéros dans 1000 classurs

J'ai cherché un peu pour une macro / code pour m'aider à le faire, et même si j'ai trouvé plusieurs conseils, je n'ai pas trouvé de solution. Peut-être que c'est mon inexpérience avec vba ou que c'est une situation unique que je n'ai pas pu personnaliser ces codes pour fonctionner pour moi. Comme vous pouvez espérer voir à partir des autres questions que j'ai posées, j'essaie toujours de tenter une solution avant de publier ici, mais c'est une situation avec laquelle j'ai vraiment lutté et j'espère que c'est quelque chose de simple avec lequel vous pouvez m'aider.

  • Ma feuille de calcul: Book1.xls , a une list de 1000 numéros
  • En feuille: Sheets1 , dans la colonne A, je souhaite find chacun de ces nombres en bouclant environ 1000 files dans 10 dossiers

"DirectoryA \ A",
"DirectoryA \ B",
"DirectoryA \ C",
"DirectoryA \ D",
"DirectoryA \ E",
"DirectoryA \ F",
"DirectoryA \ G",
"DirectoryA \ H",
"DirectoryA \ I",
"DirectoryA \ J"

  • chaque fois que je trouve le numéro, je veux renvoyer le contenu de la cellule à droite du numéro et l'imprimer à droite de sa valeur correspondante dans Book1.xls.

Merci comme toujours.

Voici une option qui

  • devrait être placé dans le classur qui contient les nombres dans la colonne A des Sheets
  • Il parcourt les premières colonnes de tous les files dans un dossier spécifié, en recherchant chacun des nombres dans la colonne A
  • les numéros trouvés sont renvoyés de la colonne B du file recherché
  • ceux-ci sont ajoutés dans un set variant de nombres originaux
  • le tableau de variantes est déversé sur une nouvelle feuille dans le classur actuel, puis divisé en colonnes à l'aide de TexttoColumns

Si cela veut que vous le souhaitiez, cela peut être pointé plusieurs fois dans vos 10 dossiers ou mis à jour pour faire une boucle dans les sous-dossiers de DirectoryA

code

 Sub LoopThroughFiles() Dim Wb As Workbook Dim Wb2 As Workbook Dim ws As Worksheet Dim StrFile As Ssortingng Dim strDelim As Ssortingng Dim rng1 As Range Dim rng2 As Range Dim X Dim Y Dim lngCalc As Long Dim lngCnt As Long Set Wb = ThisWorkbook Set ws = Wb.Sheets("Sheets1") Set rng1 = ws.Range(ws.[a1], ws.Cells(Rows.Count, "A").End(xlUp)) If rng1 Is Nothing Then Exit Sub X = rng1.Value2 Y = X strDelim = ";" With Application .EnableEvents = False .ScreenUpdating = False lngCalc = .Calculation .Calculation = xlManual End With StrFile = Dir("c:\temp\*.xls*") Do While Len(StrFile) > 0 Set Wb2 = Workbooks.Open("c:\temp\" & StrFile) For lngCnt = 1 To UBound(X) If Len(lngCnt) > 0 Then If IsNumeric(lngCnt) Then Set rng2 = Wb2.Sheets(1).Columns(1).Find(X(lngCnt, 1), , xlValues, xlWhole) If Not rng2 Is Nothing Then Y(lngCnt, 1) = Y(lngCnt, 1) & ";" & rng2.Offset(0, 1) End If End If End If Next StrFile = Dir Wb2.Close False Loop Set ws = Wb.Sheets.Add ws.[a1].Resize(UBound(X), 1).Value2 = Y ws.Columns(1).TextToColumns ws.[a1], xlDelimited, , True, Other:=True With Application .EnableEvents = True .ScreenUpdating = True .Calculation = lngCalc End With End Sub