Microsoft 365 Recherche dans fichier excel dans un répertoire

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Loulou27

XLDnaute Nouveau
Bonjour,

Je voulais rechercher des choses dans des fichiers excel dans 1 répertoire mais je me rends compte que avec la fonction "Recherche" de l'explorateur, je n'ai apparemment pas ce qu'il faut comme résultat (manque des fichiers ou pas les bons)

Je pense le faire en ouvrant les fichiers excel 1 à 1 mais va prendre un temps fou je pense car j'ai plus de 6500 fichiers / mois

Avez-vous une solution simple (peut-être paramètrages windows .... autre que en passant par excel) ?

Il faut que je cherche une référence telle que ce format XX XX XX puis dans tous ces fichiers, une seconde référence en XX XX XX XX XX


De plus, les fichiers sont en xlsx donc faut -il les renommer en xls o =u cela ne sert à rien ?


N.B :
j'ai essayé avec cette fonction
FINDSTR /M /C:"*XX XX XX*" *.*

mais cela ne marche pas du tout


Merci pour votre aide
 
Dernière édition:
Bonjour Patrick,

Comment fais-tu si les références recherchées peuvent se trouver dans n'importe quelle colonne ?

A+
C’est pour ça que je recherchais par l’explorateur comme ça je scrute tous les fichiers ?

Je sais que celles-ci sont toujours dans le même onglet et dans les mêmes colonnes

C’est déjà ça

Donc il faut forcément ouvrir les fichiers 1 à 1 ?


Aujourd’hui, la recherche par l’explorateur a eu l’air de bien marché
Mais cette recherche sera plus « sûre » en automatique par Excel ?
 
Salut,
En adaptant le code du classeur de Dudu2 qui se trouve ici, on doit pouvoir balayer tous les fichiers d'un répertoire et repérer ceux qui contiennent les références. La fonction :
VB:
ValeursClasseurFerméEnTable(ByVal Chemin As String, _
                                     ByVal fichier As String, _
                                     ByVal Feuille As String, _
                                     Optional ByVal Plage As String = "") As Variant()
Va chercher le contenu d'une plage d'un fichier excel en donnant le nom de la feuille, et la plage à scruter.
Il suffit de regarder si dans les données récupérées il y a les références souhaitées. Par exemple avec un code comme celui-ci dans la boucle des TabRecords :
VB:
If InStr(1, TabRecords(j, i), "XX XX XX") Then MsgBox "Référence trouvée : j=" & CStr(j) & "- i=" & CStr(i)
La fonction utilise le driver ACE (Microsoft Access Database Engine) avec adodb. Si le répertoire à scruter est sur un Ram Drive ou un SSD, cela sera plus rapide que si il est sur un disque magnétique :
La mémoire vive (RAM), les disques SSD (Solid State Drives) et les disques durs (HDD) diffèrent considérablement en termes de temps d'accès aux fichiers La RAM est beaucoup plus rapide que les SSD et les disques durs.

Le temps d'accès à la RAM est mesuré en nanosecondes (ns), généralement autour de 50 ns pour les systèmes modernes.
C'est des ordres de grandeur plus rapide que les SSD, qui ont des temps d'accès de l'ordre de 0,05 milliseconde (ms), soit l'équivalent de 50 000 ns.
Cela signifie que la RAM peut répondre aux demandes de données environ 1 000 fois plus rapidement qu'un SSD NVMe.
Pour les disques durs, le temps d'accès est nettement plus lent, généralement d'environ 5 millisecondes (ms), soit 5 000 000 ns, ce qui les rend environ 100 000 fois plus lents que la RAM pour un accès aléatoire.

Nullosse
 
Dernière édition:
Si l'on connaît le nom de la feuille et les colonnes concernées c'est assez simple avec un code de ce genre :
VB:
Const feuil$ = "MaFeuille"
Const col1% = 3 'colonne C
Const col2% = 7 'colonne G
Const crit1$ = "?? ?? ??"
Const crit2$ = "?? ?? ?? ?? ??"
Dim fichier$, lig&

Sub Recherche()
Dim chemin$, form$
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin & "*.xlsx") '1er fichier du dossier
lig = 2
Application.ScreenUpdating = False
Rows(lig + 1 & ":" & Rows.Count).ClearContents 'RAZ
While fichier <> ""
    form = "'" & chemin & "[" & fichier & "]" & feuil & "'!"
    Formule form, col1, crit1
    Formule form, col2, crit2
    fichier = Dir 'fichier suivant
Wend
End Sub

Sub Formule(form$, col%, crit$)
Dim f$, v
f = "MATCH(""" & crit & """," & form & "C" & col & ",0)"
v = ExecuteExcel4Macro(f)
If IsNumeric(v) Then
    lig = lig + 1
    Cells(lig, 1) = fichier
    Cells(lig, 2) = col
    Cells(lig, 3) = v
    Cells(lig, 4) = ExecuteExcel4Macro(form & "R" & v & "C" & col)
End If
End Sub
Dans chacune des 2 colonnes seule la 1ère occurrence est renvoyée.

Tous les fichiers joints doivent se trouver dans le même dossier (le bureau).
 

Pièces jointes

Dernière édition:
D'après le test que j'ai effectué le traitement de 6500 fichiers devrait prendre 39 secondes.

Merci beaucoup job75 pour toutes ces explications et implications

Je vois ça mais sûrement lundi au travail


J’adapterai en fonction de mon besoin car il faut que si la 1’ occurrence est trouvée, je vérifie que la 2’ n’existe pas ou qu’elle existe avec une occurrence spécifique
À moi de voir quelle solution est maintenant la mieux adaptatee à mon besoin
 
Pour éviter les durées rédhibitoires quand les critères ne sont pas trouvés, il faut limiter la colonne de recherche.

Par exemple à 10 000 lignes, dans la macro Formule :
VB:
f = "MATCH(""" & crit & """," & form & "R1C" & col & ":R10000C" & col & ",0)"
Maintenant avec 6500 fichiers vides le code s'exécute en 20 secondes.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour