Microsoft 365 Rechercher dans plusieurs fichiers

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous :)

En voici une bonne pour ce début de semaine lol 🙃

Evidemment, je ne sais pas coder pour résoudre mon besoin !
Alors, je sollicite à nouveau nos chers ténors :

Voici le contexte de mon besoin :
NOUS TRAVAILLONS AVEC 3 FICHIERS ouverts généralement en même temps.

Les Professionnels que nous appelons sont difficiles à joindre.
Nous avons souvent des répondeurs et nous laissons un message.

Quand un Pro nous rappelle, NOUS DE DECROCHONS PAS.
Avant de rappeler nous vérifions à partir de quel fichier on a appelé pour savoir où nous en sommes avec le Pro.

Pour le rappeler il faut faire vite avant que le Pro ne soit à nouveau occupé.
Pour cela, il nous faut trouver très rapidement à partir de quel fichier nous avons appelé.

Nos 3 fichiers sont identiques et nous commençons toujours nos recherches par la feuille Appels,
Le besoin
Partant du principe que nos 3 fichiers sont généralement ouverts en même temps (mais ce n'est pas toujours le cas) :
Est-il possible si la recherche ne trouve rien dans la feuille active (Appels) du fichier actif que la recherche :
si pas trouvé que la recherche propose de chercher dans le fichier suivant (ouvert) ? :
1647274113301.png

Les noms des fichiers sont toujours les mêmes sauf la date qui change.
isiTel_lionel_fichier1 2022 03 14
isiTel_lionel_fichier2 2022 03 14
isiTel_lionel_fichier3 2022 03 14

Auriez-vous le bon code ?

Un grand merci par avance :)
Je continue à tâtonner .. et je joins un petit fichier test qui contient le code de la recherche.
Amicalement,
lionel :)
 

Pièces jointes

  • Recherche_classeurs.xlsm
    33.5 KB · Affichages: 23
Dernière édition:
Solution
Bonjour Lionel, le forum,

Je disais que ce fil était sans fin !!!

Pour traiter plusieurs feuilles il suffit d'ajouter une boucle sur les noms des feuilles :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B1]) Is Nothing Then Exit Sub
Dim cible$, chemin$, fichier, feuille, plage As Range, lig&, i%, col As Range, x$, n&
cible = Right([B1], 9) 'à adapter
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Dir(chemin & "isiTel*.xlsb") '1er fichier du dossier
feuille = Array("Appels", "Sextant", "Dr House") 'liste des feuilles où l'on recherche
Set plage = [D1:G10000] 'référence de la plage de recherche à adapter
lig = 2
Application.ScreenUpdating = False
Application.EnableEvents = False
While fichier <> ""...

Usine à gaz

XLDnaute Barbatruc
Re-Gérard, Marcel, le Forum :)

Qui a dit "on tourne en rond" ? lol

Gérard, c'est génial cette fois-ci et rapide avec ça :

1647445073373.png

Je vais tenter de comprendre ...

Merci Gérard, c'est nickel.
Vraiment génial.
Me connaissant, j'aurai peut-être 1 ou 2 questions à l'usage ... Mais champion et magique affaire résolue :)

Merci à Phill pour ton idée,
Merci Marcel pour m'avoir apporté ton aide,
lionel :)
 

Usine à gaz

XLDnaute Barbatruc
Bonjour Gérard, Le Forum :)

J'ai testé hier soir le fichier code modifié qui fonctionne très bien.
J'ai 1 p'tite demande :
1 - Partant du principe que les 3 fichiers sont toujours ouverts, ce serait mieux que le code
- n'ouvre pas les fichiers,
- et ne les ferme pas,
car après la recherche d'un n°, je continue à travailler avec les fichiers,
Voici le code modifié qui fonctionne :

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'Application.ScreenUpdating = False
'Application.Calculation = xlCalculationManual

If Intersect(Target, [B1]) Is Nothing Then Exit Sub
Dim cible, chemin$, x$, fichier, lig&, fich, wb As Workbook, w As Worksheet, tablo, ub%, i&, j%
cible = CStr([B1])
'cible = [B1].Value 'à adapter
chemin = ThisWorkbook.Path & "\" 'à adapter
x = Format(Date, " yyyy mm dd") & ".xlsb" 'à adapter au besoin
fichier = Array("isiTel_lionel_ExpRealty" & x, "isiTel_lionel_Global" & x, "isiTel_lionel_Mael" & x) 'à adapter
'isiTel_lionel_ExpRealty 2022 03 15
'isiTel_lionel_Global 2022 03 15
'isiTel_lionel_Mael 2022 03 15

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Range("D2:F" & Rows.Count).ClearContents 'RAZ
lig = 2
For Each fich In fichier
    If Dir(chemin & fich) = "" Then MsgBox "créez le fichier '" & fich & "' !", 48: Exit Sub
    Set wb = Workbooks.Open(chemin & fich)
    For Each w In wb.Worksheets
        tablo = w.Range("A1:A2", w.UsedRange) 'matrice, plus rapide, au moins 2 éléments
        ub = UBound(tablo, 2) 'nombre de colonnes
        For i = 1 To UBound(tablo)
            For j = 1 To ub
                If CStr(tablo(i, j)) = cible Then
                'If tablo(i, j) = cible Then
                    Cells(lig, 4) = wb.Name
                    Cells(lig, 5) = w.Name
                    Cells(lig, 6) = w.Cells(i, j).Address(0, 0)
                    lig = lig + 1
                End If
    Next j, i, w
    wb.Close 'ferme le fichier
Next fich
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Dim chemin$, wb As Workbook, lig&
chemin = ThisWorkbook.Path & "\" 'à adapter
lig = Target.Row
On Error Resume Next
Set wb = Workbooks.Open(chemin & Cells(lig, 4))
Application.Goto wb.Sheets(CStr(Cells(lig, 5))).Range(Cells(lig, 6))
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
J'ai bien vu où "ça ouvre" et où "ça ferme" mais quand j'ai neutralisé les 2 codes, le code ne fonctionne plus.
Encore merci Gérard,
lionel :)
 

job75

XLDnaute Barbatruc
Bonjour Lionel,

Ce n'est pas une bonne idée de laisser les fichiers ouverts.

Car quand on double-clique pour aller voir un résultat que fait-on ensuite ?

L'utilisateur sera tenté de fermer le fichier concerné et pour une nouvelle recherche il faudra donc le rouvrir.

Ouvrir et fermer les fichiers ne prend pas beaucoup de temps, ce n'est donc pas gênant.

Pour moi cette discussion est terminée.

A+
 

Usine à gaz

XLDnaute Barbatruc
Re-Gérard,
Ensuite ton code m'amène sur le bon fichier.
Il me faut laisser les fichiers ouverts :
1 - car je continue mes appels et les codes de mes fichiers doivent rester actifs,
2 - j'ai a rechercher d'autres n° selon les gens qui me rappellent et que je ne décroche pas.

Si c'est possible, ce serait super nickel :)
 

ChTi160

XLDnaute Barbatruc
Bonjour Lionel
Bonjour le Fil ,le Forum

Lionel , qu'entends-tu par :
1 - car je continue mes appels et les codes de mes fichiers doivent rester actifs,
2 - j'ai a rechercher d'autres n° selon les gens qui me rappellent et que je ne décroche pas.
Une fois les fichiers ouverts pour la première fois
Des données sont récupérées en fonction de la cellule [B1] si j'ai bien compris !
Ensuite tu veux pouvoir modifier [B1] pour rechercher d'autre données, c'est ça ?
y'a t'il des choses qui sont modifiées dans les 3 Fichiers Source ?
Dans la tente
Bonne fin de journée
Jean marie
 

ChTi160

XLDnaute Barbatruc
Re
Moi j'en suis resté à ces trois fichiers(ci-dessous) , mais sont-ce les Bons Lol

VB:
fichier = Array("isiTel_lionel_ExpRealty" & x, "isiTel_lionel_Global" & x, "isiTel_lionel_Mael" & x)

mais dans #16
On a trois fichier joins par Gérard.
Qui se nomme :
" isiTel_lionel_fichier1 2022 03 15 " " isiTel_lionel_fichier2 2022 03 15 "
" isiTel_lionel_fichier3 2022 03 15 "
Donc faut m'éclairer Lol
Jean marie
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Bonjour Lionel
Bonjour le Fil ,le Forum

Lionel , qu'entends-tu par :

Une fois les fichiers ouverts pour la première fois
Des données sont récupérées en fonction de la cellule [B1] si j'ai bien compris !
Ensuite tu veux pouvoir modifier [B1] pour rechercher d'autre données, c'est ça ?
y'a t'il des choses qui sont modifiées dans les 3 Fichiers Source ?
Dans la tente
Bonne fin de journée
Jean marie
Bonjour Jean-Marie,

Ces 3 fichiers sont des fichiers sont mes fichiers de travail avec lesquels j'appelle des Prospects.
Quand je suis au téléphone avec un Prospect et qu'un autre me rappelle, pour aller vite et le rappeler dès que j'ai fini mon appel, j'ai besoin de trouver rapidement "vitesse grand V" qui m'a rappelé et sur quel fichier.

Il me faut faire "dare-dare" et au plus vite une recherche qui m'anème direct sur le numéro qui m'a rappelé.
Ensuite, je continue à travailler pour appeler d'autres Prospects sur mes fichiers.

Et OUI, il y a des choses modifiées selon chaque résultat de mes appels dans le fichier avec lequel j'appelle et c'est pour ça que les macros de mes 3 fichiers doivent rester actives.

En fait, la recherche doit juste me trouver le numéro qui m'a rappelé et m'amener sur le fichier qui contient le numéro et "SURTOUT" ne rien toucher d'autre ni entraver le fonctionnement, ni bloquer les macros de mes fichiers.

Suis-je clair ... lol pas sûr :)
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 143
Membres
112 669
dernier inscrit
Guigui2502