Macro de recherche et extraction d'informations à travers plusieurs fichiers

anbert

XLDnaute Nouveau
Bonjour à tous,

Je sollicite votre aide pour finalisation de ma macro.

J'ai des fichiers que je créé année après année.
Or je dois très régulièrement rechercher des données qui peuvent se trouver dans une ou plusieurs années différentes.
Je passe donc à l'étape "macro" pour faire cette recherche.

Je créé une plage avec les données que je recherche
Je créé une plage avec les liens des différents fichiers dans lesquels chercher
La macro ouvre tous les fichiers les copie et les colle dans des feuilles différents.
Puis la recherche s'effectue dans tous les feuilles

Mon objectif :
A chaque fois qu'une occurence est trouvée, une copie de toute la ligne est faite dans la feuille principale.

Je rencontre plusieurs problèmes :
- Au moment où la donnée est copiée, je reviens sur la feuille principal pour coller, mais la macro semble boucler sur cette feuille
- Comment faire une recherche dans toutes les feuilles HORMIS la première ?
- Pourquoi n'ai-je que le résultat de ma recherche qui se colle, et pas toute la ligne ?

Merci

Bonne journée

A
 

Pièces jointes

  • Recherche_Lots.xlsm
    21.3 KB · Affichages: 30

vgendron

XLDnaute Barbatruc
Hello

une idée à tester
Comment faire une recherche dans toutes les feuilles HORMIS la première ?
faire une boucle sur toutes les feuilles du classeur
for each Ws in activeworkbook
if Ws.name<> "Nom de la feuille à ne pas traiter" then
code
end if
next Ws


Pourquoi n'ai-je que le résultat de ma recherche qui se colle, et pas toute la ligne ?
je suppose que c'est la ligne qui contient "trouve"
tu peux faire un: trouve.entirerow.copy

sinon, pour aller plus loin, il faudrait que tu postes un ou deux fichiers "sources" ou alors mettre des données déjà importées dans ton classeur récap
 

anbert

XLDnaute Nouveau
Bonjour vgendron.

J'ai essayé d'insérer ton ws.name, mais j'ai du faire une erreur, car il plante sur cette ligne. Dans tous les cas, tu m'as donné une super idée... ...que je n'ai pas réussi à faire fonctionner.
Tu peux le découvrir dans le fichier.

J'ai rajouté deux onglets de recherche et supprimé la première partie de la macro, vu qu'elle marche. Ca permet de tester plus simplement la partie qui ne marche pas.
 

Pièces jointes

  • Recherche_Lots4.xlsm
    24.9 KB · Affichages: 27

vgendron

XLDnaute Barbatruc
Re,
à la lecture du code, je ne comprend pas ce que tu souhaites faire exactement...

1) tu as importé plusieurs feuilles de data dont les noms sont dans le tableau "Base de donnée de recherche") :ici 2 feuilles
2) pour chaque élément du tableau "Lots à chercher"
tu cherches la ligne (ou LES lignes??) correspondante dans chaque feuille
tu copies et tu la colles...ou ca?

les questions sont donc:
==> dans chaque feuille; peut il y avoir plusieurs lignes correspondant au numéro de lot cherché, ou une seule?
et ou souhaites tu coller les infos trouvées?
 

anbert

XLDnaute Nouveau
Je ne suis effectivement pas très clair, excuse moi.

- Dans chaque feuille, il peut y avoir : 0, 1 ou plusieurs occurences du lot cherché.
- A chaque occurence, quelque soit la feuille d'origine, je souhaite coller toute la ligne de l'occurence dans la feuille principale "Recherche", à partir de la cellule F5. et donc ligne après ligne. En colonne E, je colle en face de l'occurence, le nom de la feuille d'où provient l'occurence.
 

vgendron

XLDnaute Barbatruc
Un petit bout de code commenté :-D --> valable si une seule ligne est possible
VB:
Sub Recherche()
Dim wbRecap As Workbook         'fichier recap
Dim wsRecap As Worksheet        'feuille où on écrit les données
Dim wbSource As Workbook        'fichier à ouvrir
Dim wsSource As Worksheet       'feuille où on cherche les données
Dim DernLign As Integer         'ligne où on écrit les données
Dim vFichiers As Variant        'noms des fichiers
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim rgRecap As Range            'plage où on copie les données
Dim NomFichier As String        'Nom du fichier excel à ouvrir
Dim AdrFichier As String        'Adrese du fichier excel à ouvrir
Dim ExtFichier As String        'Extension du fichier excel à ouvrir
Dim NomFeuille As String        'Nom de la feuille à ouvrir
Dim NumLot As String            'Numéro de lot cherche

Set wbRecap = ThisWorkbook       'Fichier récapitulatif
Set wsRecap = wbRecap.Sheets(1)  'on écrit dans la feuille 1 du fichier récapitulatif

'Copie de tous les fichiers sources avant recherche des données
'Actions à réaliser tant que les lignes sont remplies

'Recherche au sein des onglets

k = Range("A" & Rows.Count).End(xlUp).Row 'récupère la dernière ligne remplie sur la colonne A

Set LotsAChercher = Range("B3").CurrentRegion 'on detecte automatiquement le tableau des Lots à chercher = equivalent d'un Ctrl+A après avoir sélectionné la cellule B3
NbLots = LotsAChercher.Rows.Count - 1 'donne le nombre de lots à chercher


For i = 1 To NbLots 'Pour chaque lot
    NumLot = LotsAChercher.Item(i + 1) 'Récupération du numero de lot
    For Each Ws In Worksheets 'pour chaque feuille
        If Ws.Name <> "Recherche" Then 'si c'est pas la feuille de recherche
            With Ws
                Set trouve = .Cells.Find(NumLot, LookIn:=xlValues, LookAt:=xlWhole) 'on cherche le numéro de lot
                If Not trouve Is Nothing Then
                    trouve.Resize(1, 4).Copy Destination:=ActiveSheet.Range("D" & Rows.Count).End(xlUp).Offset(1, 0) 'on copie colle directement la ligne dans la feuille Recherche
                    ActiveSheet.Range("H" & Rows.Count).End(xlUp).Offset(1, 0) = Ws.Name 'on place le nom de la feuille en colonne H
                End If
            End With
        End If
    Next Ws
j = j + 1
Next i
End Sub
 

vgendron

XLDnaute Barbatruc
Voir PJ pour que ca fonctionne avec plusieurs lignes à copier

PS: Dans les feuilles importées, il faut que tu ajouttes une ligne d'entete au dessus des datas ==> sinon les filtres buggent
C'est facile à faire au moment de l'importation
 

Pièces jointes

  • Recherche_Lots4.xlsm
    58.8 KB · Affichages: 46

Discussions similaires