Microsoft 365 Rechercher dans plusieurs fichiers

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

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

Phil69970

XLDnaute Barbatruc
Bonjour Lionel

Perso au vu de ton énoncé je raisonnerais à l'envers de toi c'est à dire :

A chaque fois que tu as un repondeur et que tu laisses un message.
Les Professionnels que nous appelons sont difficiles à joindre.
Nous avons souvent des répondeurs et nous laissons un message.
Donc quand tu laisses un message un clic sur un bouton copie dans un autre fichier le nom du contact et le
nom du fichier avec un tri alpha pour avoir ton contact dans l'ordre.
Quand il rappelle tu regardes le "fichier des absents" et tu auras le nom du contact et de quel fichier il vient d’être appelé. Il te resteras à le supprimé de la liste des absents pour avoir ton fichier à jour.

Si je ne t'ai pas perdu en route ..... voici mon point de vue.

@Phil69970
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bjr Phil :)
"Si je ne t'ai pas perdu en route ..... voici mon point de vue."

Hé ben non, tu ne m'as pas perdu et je trouve l'idée géniale .
Mais Bon sang, je n'y avais pas pensé :mad:
Il faudrait dans ce cas, basculer dans un nouveau classeur.
Je vais tenter de le faire ... mais lol, si c'est facile pour toi ...... :)
lionel :)
 

job75

XLDnaute Barbatruc
Regarde ce que donne ce fichier avec ces macros :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
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") & ".xlsx" 'à adapter au besoin
fichier = Array("isiTel_lionel_fichier1" & x, "isiTel_lionel_fichier2" & x, "isiTel_lionel_fichier3" & x) 'à adapter
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
    wb.Close 'ferme le fichier
Next fich
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
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))
End Sub
J'ai supposé que l'extension des 3 fichiers est .xlsx, modifie-la au besoin.

Bonne nuit.
 

Pièces jointes

  • Recherche(1).xlsm
    21.1 KB · Affichages: 8

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Si tu cliques sur OK et que tu as toujours le même message qui apparait, c'est probablement parce que, contrairement à ce que le message peut éventuellement laisser croire, le programme n'a pas créé le fichier quand tu as cliqué sur "OK", et donc il faut que tu le crées toi-même manuellement. ;)

ps : le message dit "créez". C'est un peu comme un ordre qu'il te donne.
S'il disait "créer", il le ferait probablement lui-même quand tu cliques sur "OK". ;)
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Si tu cliques sur OK et que tu as toujours le même message qui apparait, c'est probablement parce que, contrairement à ce que le message peut éventuellement laisser croire, le programme n'a pas créé le fichier quand tu as cliqué sur "OK", et donc il faut que tu le crées toi-même manuellement. ;)

ps : le message dit "créez". C'est un peu comme un ordre qu'il te donne.
S'il disait "créer", il le ferait probablement lui-même quand tu cliques sur "OK". ;)
Bjr Marcel :)
Voire ma réponse #post 13 :)
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87