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

Usine à gaz

XLDnaute Barbatruc
Re-Phil,
En fait, si le fichier est ouvert, ton code fonctionne nickel
Ce qui serait bien, ce serait qu'au clic sur le lien, à l'arrivée sur le fichier, ce code puisse s'exécuter :
VB:
Application.EnableEvents = False
ActiveWindow.ScrollRow = Selection.Row
ActiveCell.RowHeight = 55
ActiveCell.Offset(0, -5).Select
Application.EnableEvents = True
@+,
lionel
 

ChTi160

XLDnaute Barbatruc
Re
Ah ! y fonctionne pas fichiers fermés ?
Gardes donc la version de Gérard qui fonctionne avec le Double_Click ce sera plus simple puisque ça fonctionne déjà ! Lol
Pourquoi faire compliqué quand on peut faire simple lol
Bonne journée
Jean marie
 

job75

XLDnaute Barbatruc
Est-il possible que la recherche se fasse non pas sur 33+les 9 chiffres mais sur les 9 derniers chiffres ?
J'ai eu du mal mais j'ai trouvé, et effectivement une 4ème colonne est bien utile, fichier (5) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B1]) Is Nothing Then Exit Sub
Dim cible$, chemin$, fichier, feuille$, plage$, lig&, x$
cible = Right([B1], 9) 'à adapter
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Dir(chemin & "isiTel*.xlsb") '1er fichier du dossier
feuille = "Appels"
plage = "F1:F10000" 'plage de recherche à adapter
lig = 2
Application.ScreenUpdating = False
Application.EnableEvents = False
While fichier <> ""
    x = chemin & "[" & fichier & "]" & feuille & "'!" & plage
    Cells(lig, 6).FormulaArray = "=MATCH(""*" & cible & """,""""&'" & x & ",0)" 'formule matricielle
    If IsNumeric(CStr(Cells(lig, 6))) Then
        Cells(lig, 4) = fichier
        Cells(lig, 5) = feuille
        Cells(lig, 7) = "=INDEX('" & x & "," & Cells(lig, 6) & ")"
        Cells(lig, 7) = Cells(lig, 7).Value 'supprime la formule
        Cells(lig, 7).NumberFormat = "General"
        Cells(lig, 6) = "F" & Cells(lig, 6) 'supprime la formule
        lig = lig + 1
    End If
    fichier = Dir 'fichier suivant
Wend
Range("D" & lig & ":F" & Rows.Count).ClearContents 'RAZ
Application.EnableEvents = True
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(CStr(Cells(lig, 4)))
If wb Is Nothing Then
    Set wb = Workbooks.Open(chemin & Cells(lig, 4))
    Application.EnableEvents = False
    Application.Goto wb.Sheets(CStr(Cells(lig, 5))).Range(Cells(lig, 6)).Offset(, -5), True 'cadrage
    If Not wb Is Nothing Then ActiveCell.RowHeight = 55
    Application.EnableEvents = True
End If
If wb Is Nothing And Cells(lig, 4) <> "" And lig > 1 Then Cancel = True: MsgBox "Fichier '" & Cells(lig, 4) & "' introuvable !", 48
End Sub
C'est toujours la 1ère occurrence de chaque feuille qui est récupérée.

Tu remarqueras que j'ai simplifié ton code sur la 2ème macro.
 

Pièces jointes

  • Recherche(5).xlsm
    23.8 KB · Affichages: 4
  • isiTel_lionel_ExpRealty 2022 03 20.xlsb
    9.3 KB · Affichages: 1
  • isiTel_lionel_Global 2022 03 20.xlsb
    9.3 KB · Affichages: 1
  • isiTel_lionel_Mael 2022 03 20.xlsb
    9.3 KB · Affichages: 1

ChTi160

XLDnaute Barbatruc
Re
Ça n'a pas beaucoup d'importance , mais je propose de modifier cette Ligne pour y inclure la Colonne "G"
VB:
Range("D" & lig & ":F" & Rows.Count).ClearContents 'RAZ
en
Range("D" & lig & ":G" & Rows.Count).ClearContents 'RAZ
bien vue je n'avais pas fait attention à cette demande !
Usine à gaz à dit:
Est-il possible que la recherche se fasse non pas sur 33+les 9 chiffres mais sur les 9 derniers chiffres ?

Bonne fin de Journée
Jean marie
 

Usine à gaz

XLDnaute Barbatruc
Re-
He Gérard, MERCI, je suis toujours en train de plancher sur mes 2 derniers soucis.
Je vais tester et je reviens te dire
 

Usine à gaz

XLDnaute Barbatruc
Jean-Marie
Je viens de résoudre le problème de ton code an ajoutant ce code :

VB:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Application.EnableEvents = False
ActiveCell.Offset(0, 8) = ""
ActiveCell.RowHeight = 55
ActiveCell.Offset(0, -5).Select
Application.EnableEvents = True
Application.CutCopyMode = False
End Sub
Ton code va bien maintenant
Il me reste mes 2 soucis du #post103 mais Gérard vient de m'envoyer une nouvelle version que je vais tester
 

Usine à gaz

XLDnaute Barbatruc
Re-

He Gérard, MERCI, je suis toujours en train de plancher sur mes 2 derniers soucis.
Je vais tester et je reviens te dire
Re-Gérard, re-super et Merci encore le point 2 est résolu

Il ne reste plus que celui-là :
1 - J'avais réservé 4 colonnes (D-E-F-G) ou je pourrais mettre les numéros de téléphone.
A 99 % j'ai un seul numéro de téléphone par Prospect qui toujours est mis en col F
Exceptionnellement il peut arriver que j'ai plusieurs numéros de téléphone pour un Prospect
Est-il possible de rechercher dans les colonnes D-E-F-G ?

Je continue à chercher de mon côté ...
je suis en train de regarder comment fonctionnent les applications MATCH.
Je suis actuellement sur cette vidéo :
 
Dernière édition:

job75

XLDnaute Barbatruc
Est-il possible de rechercher dans les colonnes D-E-F-G ?
Oui Lionel, mais MATCH (EQUIV) ne recherche que dans une seule colonne.

Pour rechercher dans plusieurs colonnes il suffit de faire une boucle, fichier (6) :
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&, col As Range, x$
cible = Right([B1], 9) 'à adapter
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Dir(chemin & "isiTel*.xlsb") '1er fichier du dossier
feuille = "Appels"
Set plage = [D1:G10000] 'référence de la plage de recherche à adapter
lig = 2
Application.ScreenUpdating = False
Application.EnableEvents = False
While fichier <> ""
    For Each col In plage.Columns
        x = chemin & "[" & fichier & "]" & feuille & "'!" & col.Address
        Cells(lig, 6).FormulaArray = "=MATCH(""*" & cible & """,""""&'" & x & ",0)" 'formule matricielle
        If IsNumeric(CStr(Cells(lig, 6))) Then
            Cells(lig, 4) = fichier
            Cells(lig, 5) = feuille
            Cells(lig, 7) = "=INDEX('" & x & "," & Cells(lig, 6) & ")"
            Cells(lig, 7) = Cells(lig, 7).Value 'supprime la formule
            Cells(lig, 7).NumberFormat = "General" 'format Standard
            Cells(lig, 6) = Split(col.Address, "$")(1) & Cells(lig, 6) 'adresse qui écrase la formule
            lig = lig + 1
    End If
    Next col
    fichier = Dir 'fichier suivant
Wend
Range("D" & lig & ":G" & Rows.Count).ClearContents 'RAZ
Application.EnableEvents = True
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim chemin$, lig&, wb As Workbook
chemin = ThisWorkbook.Path & "\" 'à adapter
lig = Target.Row
On Error Resume Next
Set wb = Workbooks(CStr(Cells(lig, 4)))
If wb Is Nothing Then
    Set wb = Workbooks.Open(chemin & Cells(lig, 4))
    Application.EnableEvents = False
    With wb.Sheets(CStr(Cells(lig, 5))).Range(Cells(lig, 6))
        Application.Goto .Cells(1, 2 - .Column), True 'cadrage
        .RowHeight = 55
    End With
    Application.EnableEvents = True
End If
If wb Is Nothing And Cells(lig, 4) <> "" And lig > 1 Then Cancel = True: MsgBox "Fichier '" & Cells(lig, 4) & "' introuvable !", 48
End Sub
La 1ère occurrence de chaque colonne est récupérée.
 

Pièces jointes

  • Recherche(6).xlsm
    24.8 KB · Affichages: 1
  • isiTel_lionel_ExpRealty 2022 03 20.xlsb
    9.4 KB · Affichages: 1
Dernière édition:

Discussions similaires

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