Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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) ? :

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 <> ""...

job75

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

  • isiTel_lionel_fichier1 2022 03 15.xlsx
    941.9 KB · Affichages: 9
  • isiTel_lionel_fichier2 2022 03 15.xlsx
    941.9 KB · Affichages: 5
  • isiTel_lionel_fichier3 2022 03 15.xlsx
    941.9 KB · Affichages: 5

Usine à gaz

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

Bonne journée à toutes et à tous
lionel
 

job75

XLDnaute Barbatruc
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+
 

Usine à gaz

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

TooFatBoy

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

Usine à gaz

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

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…