Recherche "noms" multi fichiers

Bonjour,

Je n’arrive pas à faire une macro me permettant de rechercher dans 10 fichiers .xls des noms afin de rechercher par patronyme.

J’ai tenté par la fonction développeur et enregistrer macro, mais sans succès.

Les fichiers comportent la colonne (A) avec les noms et ensuite 8 autres colonnes de renseignements. (même répertoire)

Bien sûr, je peux en ouvrant chaque fichier utiliser la fonction « rechercher » puis rechercher tout, mais c’est fastidieux, d’où le fait d’écrire une macro qui permettrait de rechercher dans chaque fichier le « nom » rechercher.

Alors un petit coup de main serait le bienvenu

Cordialement

Bonjour,

Voici un exemple pour lire la colonne A des fichiers sur une feuille temporaire.

Avant d 'exécuter la macro, n'oublie pas de modifier les lignes qui ont un commentaire " à adapter "

et activer la référence: Microsoft ActiveX Data Objects xx Library -->au menu vba, Outils, Référence

Sub Read_File_xlsx_2()
Dim Repertoire As String, Fichier As String, Feuille As String, AddrLire As String
Dim Ligne As Long, oFile As Object

'--- derniere ligne de la feuille active, les données seront transférées à cette endroit ---
Ligne = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row + 1

'--- répertoire des fichiers "audit"---
Repertoire = ThisWorkbook.Path

'--- nom de la feuille des fichiers "audit"---
NomFeuille = "stats"

Set fso = CreateObject("Scripting.FileSystemObject")
Set sfofolder = fso.GetFolder(Repertoire)

 For Each oFile In sfofolder.Files
     f = Split(oFile, "\")
     Fich = f(UBound(f))

     If Left(Fich, 5) = "audit" And Right(Fich, 4) = "xlsm" Then  'à adapter

        Set Cnn = New ADODB.Connection

        '--- Connexion ---
        With Cnn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
        & oFile & ";Extended Properties=""Excel 12.0;HDR=NO;"""
        .Open
        End With

        '--- récupérer les données --

        Set rs = Cnn.Execute("SELECT * FROM [" & NomFeuille & "$A2:A20" & "]")  'à adapter
        Cells(Ligne, "A") = Fich
        Cells(Ligne, "B").CopyFromRecordset rs
        rs.Close
        Ligne = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row + 1

    End If
 Next oFile
Cnn.Close
Set rs = Nothing
Set Cnn = Nothing
End Sub

Merci pour la macro, je vais voir ce que j'arrive à faire avec en l'adaptant. (Je ne suis pas un doué dans ce domaine)

Cordialement

Bonjour,

Quand je lance la macro en "pas à pas détaillé", dés cette étape le message erreu de compilation End sub attendu ?

Pourtant en dernière ligne il y a bien End sub

Merci

re,

peux-tu joindre ton fichier excel ?

Bonjour

Merci de prendre le temps de me donner un coup de main vue mon niveau en VBA.

J'ai mis le fichier en annexe.

re,

tu a copié la macro à l'intérieur d'une autre macro,

Sub macro1()
Sub Read_File_xlsx_2()

enlève

Sub macro1()

aussi il y a deux End Sub à la fin, enlève en 1

Bonjour Isabelle

Merci de la réponse.

De mon coté parce que j'aime bien comprendre, j'ai commencé à utiliser "excel-pratique " et faire les exemples des macros afin de progresser dans la logique de l'écriture et des termes. J'ai également teléchargé la liste des codes VBA

Question:

Pour les lignes à adapter "

If Left(Fich, 5) = "audit" And Right(Fich, 4) = "xlsm" Then 'à adapter

Set Cnn = New ADODB.Connection

Left (fich, 5) je comprends qu'il y aura 5 caractères à partir de la gauche

Right (fich, 4) 4 caractères à partir de la droite

Set Cnn = correspondrait au fichiers/dossier

Comme tu le vois, je lance la barque et je dois ramer fort

Merci du coup de main

re,

pour la 1er question: oui

pour la 2èm question:

Set Cnn = New ADODB.Connection  'créer un instance d’objets ADO, ce n'est pas à adapter

Bonjour,

J'ai joint mon fichier de travail de ce dimanche avec la macro actuelle qui me reste à finir parce que je n'arrive pas encore à faire tout ce que je voudrais.

A cette étape, j'arrive à ouvrir le fichier "activite-1970.xlsx" en renseignant directement la ligne dans la macro.

Q=Mes fichiers vont de 1970 à 2019, comment les passer en revue les uns après les autres en respectant les étapes suivantes de la macro (une boucle, mais comment ?)

La recherche par nom fonctionne,

Q=je voudrais que la macro stoppe et pouvoir renseigner manuellement le nom à rechercher ? (exemple avec "BOILEAU" la macro trouve bien les données)

La macro indique bien la cellule où se trouve le nom "BOILEAU"

Q= mais je voudrais qu’elle affiche l’ensemble des lignes de données contenant "BOILEAU" comme dans la fonction Rechercher-Remplacer, « rechercher tout », comment faire ?

La macro de copie et transfert des données vers l'onglet "recherche" fonctionne. Elle fait la copie et ensuite l'insertion dans l'onglet "recherche" en ligne 3 avec décalage des cellules vers le bas, si je répète l'opération. (mais je le fais en sélectionnant la plage pour simuler le fonctionnement).

Q=Comment automatiser la sélection des lignes "BOILEAU" et faire ensuite la copie.

J'ai encore du travail et besoin d'un petit coup de main

Cordialement

peux-tu joindre un exemple des fichiers à lire ?

Bonjour,

Voilà un fichier joint

7activite-1970.xlsx (11.37 Ko)

re,

j'ai modifié la macro Read_File_xlsx

vu qu'on ne connait pas le nom de l'onglet sur les fichiers à lire

avant d'exécuter cette macro, vérifie au menu vba, Outils, Référence

que les références suivante sont cochées

Microsoft ADO ext x.x for DLL and Security

Microsoft ActiveX Data Objects x.x Library

une fois les données récupérées, tu peux faire une Recherche sur l'onglet "recherche"

Bonjour,

Merci pour l'aide.

Je suis chargé et je vais reprendre tout ça au calme en milieu de semaine.

Cordialement

Bonsoir,

Finalement coro……….perturbe les agendas, déjà que le vba me perturbait ….

J’ai vérifié que les références sont bien cochées

Microsoft ADO ext x.x for DLL and Security > OK

Microsoft ActiveX Data Objects x.x Library >OK

Merci pour les boutons des macros, ce sera bien pratique.

Pour résumer, mes fichiers sont dans le répertoire D:\Personnel&confidentiel\personne\activité\

Chaque-fichier est nommé « activite-1970 », jusqu’à « activite-2019 »

L’onglet où sont les données est appelé du même nom ex : activite-1970 pour le fichier activite-1970 (est-ce un problème ?).

Faut-il renommer les onglets simplement « feuille » ?

If Right(fich, 4) = "xlsx" Then 'à adapter

A cet endroit « xlsx » doit-être remplacé par quel nom de fichier avec l’extension xlsx ?

Set Rs = Cnn.Execute("SELECT * FROM [" & Feuille & "A1:I100" & "]") 'à adapter

Pour le nombre de lignes de A1 :I100 pas de souci c’est le nombre de ligne à ramener, si besoin je réduirai la valeur de 100.

J’ai compris que cette commande sert à ouvrir les fichiers, par contre « Feuille » est-il à remplacer par le nom de l’onglet contenant les données ou par ?

Est-ce que le nom des fichiers avec le - peut poser problème ?

Cordialement

re,

j'ai fait les modifications sur la macro selon tes indication,

à tester,

Bonjour,

On positive, puisqu'on va améliorer notre bilan carbone en télétravaillant..............

Au lancement j'ai le code erreur 91, variable objet ou variable de bloc With non définie

en débog, cnn.close

8debogage.docx (51.72 Ko)

est surligné en jaune

as-tu revérifié que les références que sont bien cochées sur le dernier fichier transmit ?

Microsoft ADO ext x.x for DLL and Security > OK

Microsoft ActiveX Data Objects x.x Library >OK

Bonjour,

Oui, c'est bien coché

7vba.docx (103.82 Ko)

peux-tu exécuter la macro en mode pas à pas pour voir s'il n'y a pas d'autre ligne qui bug ?

tu travailles sur quel version d'excel ?

Rechercher des sujets similaires à "recherche noms multi fichiers"