Recherche occurence dans plusieurs fichiers excell

trumanberic

XLDnaute Nouveau
Bonjour à toutes et tous :)


Alors, je suis totalement newbie pour commencer , donc désolé d'avance si cette question vous semble idiote....
Je viens d'être promu à mon boulot et je n'avais, dans le poste que j'occupais auparavant, absolument pas la nécessité d'utiliser Excell comme je dois l'utiliser aujourd'hui.
Je souhaiterais savoir s'il est possible, à travers un batch, script ou autre, la possibilité de chercher dans plusieurs fichiers Excell une occurence particulière. Dans un seul fichier, pas de pbe, je lance CTRL + F mais je perds bcp de temps chaque jour à devoir chercher des séries de nombres (de 14 chiffres) dans plusieurs fichiers excell, à devoir ouvrir les un après les autres (et fermer !) tous ces fichiers lorsque je cherche une occurence.

Existe il une option moins chronophage pour m'aider ?
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour et bienvenue sur le forum,

C'est peut-être que la question n'est pas assez précise. Quelles données dans Quels fichiers pour quel traitement?
On ne peut rien faire si on n'en sait pas plus.
Vous pourriez peut-être faire deux classeurs exemples (anonymisés) et nous en dire un peu plus.
N'oubliez pas d'indiquer votre version excel de travail.

A vous relire
 

trumanberic

XLDnaute Nouveau
Bonjour,

Merci pour votre retour, je comprends, permettez moi de reformuler.

Disons que j'ai des employés qui "scannent" des documents et qui tiennent des inventaires sur Excel des documents qu'ils scannent et traitent. Imaginons que je doivent savoir quel employé "X" ou "Y" ait traité le document N° "37531005538351"

Existe t il un moyen d'automatiser une recherche de cet occurence dans les classeurs Excell sans avoir a tous les ouvrir et fermé un a par un ?
Lorsque je cherche qui a traité tel ou tel document cette manip' est assez chronophage sur trente ou quarante fichiers a ouvrir plus Ctrl +F puis fermeture du fichier etc ....
(Sur les exemples en pièces jointe il n'y qu'un seul onglet mais les fichiers que nous traitons en contiennent plusieurs)
Je ne peux vous dire quelle Version de Excell en revanche dslé, nous en avons plusieurs dans l'établissement.
 

Pièces jointes

  • Y.xlsx
    11.8 KB · Affichages: 18
  • X.xlsx
    15.9 KB · Affichages: 10

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

J'ai bien compris. Seulement vous ne nous dites toujours pas quelle information renvoyer et où lorsqu'une occurrence a été trouvée.
Egalement, est-ce que les occurences à trouver sont toujours en colonne B des feuilles des classeurs X ou Y?
Sur quoi nous basons-nous pour renvoyer le nom de celui qui a traité le dossier? Le nom du classeur, une cellule dans le classeur, laquelle?
Faut-il renvoyer également l'endroit où l'occurrence à été trouvée et sous quelle forme? ex: [X.xlsx]Janvier!B13
Faut-il s'arrêter à la première occurrence trouvée, dans la feuille? dans le classeur?
S'il l'occurence est trouvée plusieurs fois dans la même feuille et/ou le même classeur, que fait-on de ces informations?

Bref on peut trouver ce que vous voulez mais on en fait quoi ? Faites nous un exemple de résultats recherchés. Si il y a plusieurs cas de figure, illustrez les.

A vous relire
 

job75

XLDnaute Barbatruc
Bonjour trumanberic, Roblochon,

Voyez le fichier joint et cette macro :
VB:
Sub Recherche()
Dim chemin$, fichier$, d As Object, w As Worksheet, tablo, e, a, b(), i&, j%
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin & "*.xls*") '1er fichier du dossier
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si un fichier est déjà ouvert
While fichier <> ""
    If fichier <> ThisWorkbook.Name Then
        With Workbooks.Open(chemin & fichier)
            For Each w In .Worksheets
                tablo = w.UsedRange
                If Not IsArray(tablo) Then tablo = w.UsedRange.Resize(2)
                For Each e In tablo
                    If e Like "##############" Then d(e & Chr(1) & .Name) = ""
            Next e, w
            .Close
        End With
    End If
    fichier = Dir 'fichier suivant
Wend
'---restitution et mise en forme---
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 'si la feuille est filtrée
Range("A2:B" & Rows.Count).ClearContents 'RAZ
If d.Count = 0 Then Exit Sub
a = d.keys
ReDim b(UBound(a), 1) 'base 0
For i = 0 To UBound(a)
    j = InStr(a(i), Chr(1))
    b(i, 0) = Left(a(i), j - 1)
    b(i, 1) = Mid(a(i), j + 1)
Next
[A:A].NumberFormat = String(14, "0")
[A2].Resize(i, 2) = b
[A2].Resize(i, 2).Sort [A2], xlAscending, [B2], , xlAscending, Header:=xlNo 'tri sur 2 colonnes
Columns("A:B").AutoFit 'ajustement largeur
With ActiveSheet.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Bien sûr l'ouverture et la fermeture de 30 ou 40 fichiers prendra du temps.

A+
 

Pièces jointes

  • Recherche(1).xlsm
    23.5 KB · Affichages: 11

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Mettre les 3 fichiers dans le même dossier. Ouvrir le fichier 'Recherche.xlsm' et cliquer sur le bouton 'Rechercher'

Bonne soirée
 

Pièces jointes

  • recherche.xlsm
    24.6 KB · Affichages: 8
  • X.xlsx
    16 KB · Affichages: 7
  • Y.xlsx
    12 KB · Affichages: 5

trumanberic

XLDnaute Nouveau
Bonjour, merci pour votre attention et votre retour.

vous ne nous dites toujours pas quelle information renvoyer et où lorsqu'une occurrence a été trouvée.

Rien, l'analyse peut s'arrêter. Pas de nécessiter à créer un rapport ou un autre fichier. J'ai juste besoin de savoir qui a scanné tel ou tel document.

Egalement, est-ce que les occurences à trouver sont toujours en colonne B des feuilles des classeurs X ou Y?

Oui

Sur quoi nous basons-nous pour renvoyer le nom de celui qui a traité le dossier? Le nom du classeur, une cellule dans le classeur, laquelle?
Faut-il renvoyer également l'endroit où l'occurrence à été trouvée et sous quelle forme? ex: [X.xlsx]Janvier!B13

Le nom du classeur suffit, il porte le nom de la personne "Mr X", "Mde Y".
EDIT: a la limite si c'est possible, connaitre la date de la création du "job" , savoir quelle jour à a été traité le document en question. Cette se trouve, et se trouvera toujours, dans la colonne A dans le format "DATE: JJ/MM/AAAA" et les infos en colonne E " Commentaires"


Faut-il s'arrêter à la première occurrence trouvée, dans la feuille? dans le classeur?
S'il l'occurence est trouvée plusieurs fois dans la même feuille et/ou le même classeur, que fait-on de ces informations?

Oui l'analyse peut/doit s'arrêter au premier résultat trouvé, l'occurence ne peut se trouver dans deux fichiers, ni être traitée deux fois par la même personne, aucune raison donc de la trouver deux fois, ni dans un seul fichier ni dans deux.
 
Dernière édition:

job75

XLDnaute Barbatruc
Puisque les occurrences sont toujours en colonne B ma macro sera plus rapide avec :
VB:
                tablo = w.UsedRange.Columns(2) 'colonne B
                If Not IsArray(tablo) Then tablo = w.UsedRange.Columns(2).Resize(2)
Vous semblez ne pas avoir testé ma solution, pourtant elle ramène toutes les occurrences dans le 1er fichier.

Pour une occurrence particulière il suffit ensuite de la rechercher en colonne A (touches Ctrl+F).
 

Pièces jointes

  • Recherche(2).xlsm
    24.7 KB · Affichages: 7
  • X.xlsx
    15.9 KB · Affichages: 4
  • Y.xlsx
    11.8 KB · Affichages: 3

trumanberic

XLDnaute Nouveau
EDIT: J'ai essaye votre fichier "recherche" c'est bien l'idée, je comprends qu'au vu des infos pas assez précises que je vous ai donné vous ayez fait de votre mieux, et je vous en remercie ! OK, je comprends que votre macro permet d'extraire tous les chiffres et que je dois lancer Ctrl + F dans la colonne A ! (d'ou l'abondance de résultat), je m'imaginais une macro capable de lancer le Ctrl F indépendamment de l'utilisateur, de façon totalement autonome.

Je me permet de poster ici l'idée du résultat d'une recherche optimum, s'il existe un moyen d'y arriver, pour une lisibilité plus facile .

Je vous remercie une nouvelle fois.
 

Pièces jointes

  • Résultat idéal.xlsm
    16.2 KB · Affichages: 6

job75

XLDnaute Barbatruc
La macro adaptée à votre dernier fichier :
VB:
Sub Recherche()
Dim chemin$, fichier$, d As Object, w As Worksheet, tablo, nom$, e, x$, i&
chemin = ThisWorkbook.Path & "\"
fichier = Dir(chemin & "*.xls*") '1er fichier du dossier
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si un fichier est déjà ouvert
While fichier <> ""
    If fichier <> ThisWorkbook.Name Then
        With Workbooks.Open(chemin & fichier)
            For Each w In .Worksheets
                tablo = w.UsedRange.Columns(2)
                nom = "#" & .Name & "#"
                If Not IsArray(tablo) Then tablo = w.UsedRange.Columns(2).Resize(2)
                For Each e In tablo
                    x = CStr(e)
                    If x Like "##############" Then _
                        If InStr("#" & d(x) & "#", nom) = 0 Then _
                            d(x) = IIf(d(x) = "", "", d(x) & "#") & .Name
            Next e, w
            .Close
        End With
    End If
    fichier = Dir 'fichier suivant
Wend
'---restitution---
tablo = ActiveSheet.UsedRange.Resize(, 2)
For i = 2 To UBound(tablo)
    tablo(i, 2) = d(CStr(tablo(i, 1)))
Next
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData 'si la feuille est filtrée
[B1].Resize(UBound(tablo)) = Application.Index(tablo, , 2)
Columns("B").AutoFit 'ajustement largeur
End Sub
Nota : si un même numéro se trouve dans plusieurs fichiers les noms de ces fichiers sont concaténés en colonne B.
 

Pièces jointes

  • Résultat idéal(1).xlsm
    23.6 KB · Affichages: 6
  • X.xlsx
    15.9 KB · Affichages: 3
  • Y.xlsx
    11.8 KB · Affichages: 2

trumanberic

XLDnaute Nouveau
Re bonjour,

MERCI,
merci infiniment pour votre retour et votre solution :)

Je ne veux absolument pas avoir l'air d'insister mais serait il possible également de renseigner la date de la création du "job" (Cette date se trouve, et se trouvera toujours, dans la colonne A dans le format "DATE: JJ/MM/AAAA" ) ainsi les infos en colonne E " Commentaires" (si et quand il y en a) ?

Exemple sur "X" le document 37531021708236 traité le 4/12/2018, et le commentaire " EN COURS"
 

Pièces jointes

  • X.xlsx
    15.8 KB · Affichages: 3

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

J'ai complété la demande dans ce dernier essai. Parfois les Dates sont des dates et parfois des textes "Date: 11/12/2018". La macro les retourne telle qu'elle les trouve à charge pour vous de faire le traitement adéquate (formule).

Le classeur joint fonctionne sur les classeurs y.xlsx et x.xlsx de son répertoire.

Bonne fin d'après-midi

Edit: Oups, j'avais laissé traîner un Stop de test dans la macro
 

Pièces jointes

  • recherche.xlsm
    29.3 KB · Affichages: 5

trumanberic

XLDnaute Nouveau
Trop tard, vous en avez tout à fait l'air.
Ben je vais assumer, heureusement que je suis poli et souriant ^^

Ce serait en colonne E, les date sont dans la colonne A, elles sont inscrites après les caractères "DATE", la ligne exacte variant d'une journée à l'autre je ne peux donner plus de précisions hélàs.

Je vous remercie
 

Pièces jointes

  • Z.xlsx
    16.2 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 841
dernier inscrit
ferid87