Microsoft 365 Rechercher dans plusieurs fichiers

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 !

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
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

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 <> ""...
J'ai testé le fichier du post #6 avec les 3 fichiers joints comprenant 3 tableaux 12 x 10 000.

Ma macro s'exécute en 1,4 seconde, c'est tout à fait acceptable.

Lionel tu tournes en rond, si tu es incapable d'adapter la macro pour tes 3 fichiers dépose-les ici.

Et si tu regardes la macro tu verras que la macro ouvre et ferme les 3 fichiers.
 

Pièces jointes

Bonjour Gérard, le Forum 🙂
Ayant quelques soucis, je ne suis pas trop présent en ce moment, je te prie de m'en excuser 🙂

J'ai testé ce matin et j'ai un beug :
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 = [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 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
sur cette ligne : If tablo(i, j) = cible Then
1647412569605.png

Bonne journée à toutes et à tous 🙂
lionel 🙂
 
Bonjour Lionel, le forum,

1) Le bug est certainement dû au fait qu'il existe des valeurs d'erreur, arrange-toi pour les supprimer.

Si ce n'est pas possible il faut ajouter un test mais c'est un peu stupide :
VB:
                If Not IsError(tablo(i, j)) 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
                End If
2) La macro recherche une correspondance exacte donc si tu recherches des numéros de téléphone la recherche de 33 ne donnera rien.

Une recherche avec des caractères génériques n'est pas souhaitable car cela peut donner des milliers de résultats, ce qui est sans intérêt et prendra du temps.

A+
 
Merci Gérard pour ce retour 🙂

"Le bug est certainement dû au fait qu'il existe des valeurs d'erreur, arrange-toi pour les supprimer."
Dans tous mes fichiers, les numéros de téléphones sont dans la feuille "Appels" et les cellule F6:F10000.
Je n'ai pas de valeurs d'erreur dans cette colonne.

"La macro recherche une correspondance exacte donc si tu recherches des numéros de téléphone la recherche de 33 ne donnera rien"
Le numéro cherché est toujours du même type : 33111111111
(dans la photo, j'ai masqué les numéros après le 33)

J'essaie de voir dès que j'ai un moment.
Encore merci gérard 🙂
 
Tu parles du N° de téléphone : c'est un numéro complet 33......... (33et 9chiffres)
Moi, je dirai de mettre le curseur sur la variable cible sur la ligne jaune, pour connaître sa valeur, au moment du plantage.

Je te soupçonne d'avoir laissé B1. Nan ?
Ceci dit, peut-être qu'il faut laisser B1, mais dans le code il est dit qu'il faut adapter :
Code:
cible = [B1].Value 'à adapter
 
Moi, je dirai de mettre le curseur sur la variable cible sur la ligne jaune, pour connaître sa valeur, au moment du plantage.

Je te soupçonne d'avoir laissé B1. Nan ?
Ceci dit, peut-être qu'il faut laisser B1, mais dans le code il est dit qu'il faut adapter :
Code:
cible = [B1].Value 'à adapter
Re Marcel, bon sang, je suis découvert lol

Effectivement, j'ai bien laissé B1 mais la cellule target est bien B1 et c'est dans cette cellule que je mets le n° à chercher ...
LOL, si je me suis trompé là, je suis vraiment neuneu 🙂
 
- 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

Réponses
13
Affichages
787
Réponses
10
Affichages
4 K
Retour