XL 2016 Recherche multi classeurs

FS69

XLDnaute Nouveau
Bonjour,

Je souhaiterais votre aide car je ne trouve pas après de multiples recherches quelque chose approchant de mon besoin et je suis novice en macro Excel.

J'ai 4 classeurs dont certains sont assez volumineux (plus de 300 000lignes) avec des formats différents certains allant de A à D et d'autres de A à P.

Aussi, je souhaiterais pouvoir lancer une recherche sur ces 4 classeurs et que cela me ramène toutes les lignes trouvées pour un même critère à savoir un numéro de client (je peux mettre s'il faut le critère de recherche en colonne A pour tous les classeurs).
De plus, il faudrait que le fichier porte également le chemin ou a été trouvé l'information (classeur/feuille/nom de la cellule) en 1e colonne.

Est ce que cela vous semble possible ? Auriez vous un modèle sur lequel m'appuyer pour essayer de l'adapter à mon besoin ?
 

FS69

XLDnaute Nouveau
Bonjour

Mode Boule de Cristal ON
va voir du coté de Power Query
Mode Boule de Cristal OFF
Bonjour,

Tout d'abord merci pour votre réponse.

J'ai un peu progressé dans ma recherche et j'ai trouvé le code ci dessous :

VB:
Sub SearchInMultipleWorkbooks()
    Dim FolderPath As String
    Dim FileName As String
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim SearchTerm As String
    Dim ResultSheet As Worksheet
    Dim LastRow As Long

    ' Définir le chemin du dossier et le terme de recherche
    FolderPath = "C:\Chemin\Vers\Votre\Dossier\"
    SearchTerm = "VotreTermeDeRecherche"

'ou  
    ' Lire le terme de recherche depuis la cellule A1 de la feuille active
    'SearchTerm = ThisWorkbook.Sheets("NomDeVotreFeuille").Range("A1").Value

    ' Créer une nouvelle feuille pour les résultats
    Set ResultSheet = ThisWorkbook.Sheets.Add
    ResultSheet.Name = "Résultats"

    ' Boucler à travers tous les fichiers Excel dans le dossier
    FileName = Dir(FolderPath & "*.xls*")
    Do While FileName <> ""
        Set wb = Workbooks.Open(FolderPath & FileName)
        For Each ws In wb.Sheets
            LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
            For i = 1 To LastRow
                If InStr(1, ws.Cells(i, 1).Value, SearchTerm, vbTextCompare) > 0 Then
                    ws.Rows(i).Copy Destination:=ResultSheet.Cells(ResultSheet.Rows.Count, "A").End(xlUp).Offset(1, 0)
                End If
            Next i
        Next ws
        wb.Close SaveChanges:=False
        FileName = Dir
    Loop
End Sub


Cela s'approche de mon besoin mais je n'arrive pas à :
ramener en colonne A le chemin ou a été trouvé la ligne
 
Dernière édition:

mromain

XLDnaute Barbatruc
Bonjour FS69, vgendron, le forum,

@FS69 :
Tu trouveras ci-joint une solution à base de PowerQuery.
Pour l'utiliser, il te faut :
  • renseigner le terme recherché en A1 ;
  • renseigner les chemin des fichiers dans lesquels on recherche dans le tableau bleu ;
  • mettre à jour la requête (clic droit sur le tableau vert, puis Actualiser).

Le tableau vert contient le résultat de la recherche avec le nom du fichier, la feuille, la colonne, la ligne, la valeur de la cellule et un lien hypertexte pour ouvrir le fichier source.

PS : je n'ai pas testé sur un gros volume de données, peut-être que la requête mettra un peu de temps à s'exécuter.

A+
 

Pièces jointes

  • Recherche.xlsx
    20.1 KB · Affichages: 3

FS69

XLDnaute Nouveau
Bonjour FS69, vgendron, le forum,

@FS69 :
Tu trouveras ci-joint une solution à base de PowerQuery.
Pour l'utiliser, il te faut :
  • renseigner le terme recherché en A1 ;
  • renseigner les chemin des fichiers dans lesquels on recherche dans le tableau bleu ;
  • mettre à jour la requête (clic droit sur le tableau vert, puis Actualiser).

Le tableau vert contient le résultat de la recherche avec le nom du fichier, la feuille, la colonne, la ligne, la valeur de la cellule et un lien hypertexte pour ouvrir le fichier source.

PS : je n'ai pas testé sur un gros volume de données, peut-être que la requête mettra un peu de temps à s'exécuter.

A+

Bonjour,

Merci pour votre proposition qui fonctionne néanmoins le temps de réponse est beaucoup plus long qu'en passant par la macro vba.
 

mromain

XLDnaute Barbatruc
Bonjour FS69, le forum,

Merci pour votre proposition qui fonctionne néanmoins le temps de réponse est beaucoup plus long qu'en passant par la macro vba

Je m'en doutais un peu...
En regardant le code VBA que tu as proposé au post #3, tu semble n'effectuer la recherche qu'en colonne A.

J'ai modifié mon fichier précédent pour aussi n'effectuer la recherche que sur la colonne A.
Les performances devraient être améliorées, même si ça mouline encore.
Chez moi, la recherche sur 3 classeurs de 300000 lignes (20 Mo chacun) prend 22 secondes.

A+
 

Pièces jointes

  • Recherche2.xlsx
    18.8 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
315 083
Messages
2 116 041
Membres
112 641
dernier inscrit
chab77