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

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
Lionel, nous balancer :
VB:
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
alors qu'on ne fait que sélectionner est insupportable !!!.

Si tu veux éviter les usines à gaz tâche de modérer tes ardeurs !!!

@ChTi160 :un message est nécessaire mais seulement quand c'est nécessaire !!!
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Dsl Jean-Marie mon niveau ne me permet pas d'être capable de te répondre
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
OUI Gérard, je comprends ce que tu dis.
Mais dans mes fichiers des codes s'exécutent à la sélection de cellules "Private Sub Worksheet_SelectionChange(ByVal R As Range)" et je dois les neutraliser avant la sélection et les remettre après pour continuer mon "boulot".
Comment faire autrement ?
lionel
 
Dernière édition:

job75

XLDnaute Barbatruc
D'accord, s'il y a des macros SelectionChange il faut les Application.EnableEvents.

Mais les Application.ScreenUpdating et Application.Calculation sont inutiles.
Quel message ?
Eh bien celui qui est au bout de cette ligne :
VB:
If wb Is Nothing And Cells(lig, 4) <> "" And lig > 1 Then Cancel = True: MsgBox "Fichier '" & Cells(lig, 4) & "' introuvable !", 48
 

ChTi160

XLDnaute Barbatruc
Re
Gérard
Effectivement mon petit niveau (mais je progresse) a fait que je voyais plus cette Ecriture ( que celle de Lionel!)
VB:
On Error Resume Next
Set wb = Workbooks(CStr(Cells(lig, 4)))
If wb Is Nothing And Cells(lig, 4) <> "" And lig > 1 Then Cancel = True: MsgBox "Ouvrez le fichier '" & Cells(lig, 4) & "' !", 48
Etc Etc
d'où mon erreur !
Et cette gestion (d'erreur) n'aura d'effet que si le fichier source est traité fermé ! ou la fermeture accidentelle du Fichier Source .
Mais bon je note votre remarque !
Merci encore de votre partage
Bonne fin de Soirée
Jean marie
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
J'avais évoqué la possibilité ou pas d'utiliser des Liens Hypertext !
Mais Bon !
J'ai à mon petit niveau réussi à ça ! Je me permets de mettre une petite vidéo (Les 3 Fichiers source sont fermés dans la Vidéo)
Bonne fin de Soirée
Jean marie
 

Pièces jointes

  • Lionel-2.gif
    199 KB · Affichages: 12

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Dsl pas compris : tu me donnes le code complet ,
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
@Gérard
Effectivement ! Mais ce n'était qu'un exemple adaptable facilement à la Procédure du #80
Voir ci-dessous :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B1]) Is Nothing Then Exit Sub
Dim cible$, chemin$, fichier, feuille$, col$, lig&, x$, i As Variant
cible = [B1] 'à adapter
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Dir(chemin & "isiTel*.xlsb") '1er fichier du dossier
feuille = "Appels"
col = "C6" 'colonne F en notation R1C1
lig = 2
 With ActiveSheet.Hyperlinks
                 .Delete
    While fichier <> ""
        x = chemin & "[" & fichier & "]" & feuille & "'!" & col & ",0)"
        i = ExecuteExcel4Macro("MATCH(" & cible & ",'" & x) 'recherche un nombre
        If IsError(i) Then i = ExecuteExcel4Macro("MATCH(""" & cible & """,'" & x) 'recherche un texte
        If IsNumeric(i) Then
                 .Add Anchor:=Cells(lig, 4), Address:=fichier, SubAddress:="Appels!F" & i, _
                                                  ScreenTip:=fichier, TextToDisplay:=fichier ' On ajoute le Lien Hypertext vers la cellule du Fichier concerné
            Cells(lig, 5) = feuille 'le Nom de la feuille Source
            Cells(lig, 6) = "F" & i 'l'adresse de la cellule source
            lig = lig + 1 'On incrémente la Ligne
        End If
        fichier = Dir 'fichier suivant
    Wend
End With
Range("D" & lig & ":F" & Rows.Count).ClearContents 'RAZ
End Sub
Ainsi la Procédure :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
n'a plus lieu d'être!
Bonne Journée
Jean marie
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re- Jean-Marie,

Après tests, ton code me pose un souci.
Il atteint bien le numéro de téléphone cherché mais j'ai un autre besoin :
- J'utilise des filtrages dans mes fichiers de travail,
- après avoir atteint le numéro, je dois pouvoir continuer mon travail et là ton code désactive les codes sans que je puisse les réactiver par "Application.EnableEvents = True"

Dans le code de Gérard (double clic, ) :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.EnableEvents = False
'ActiveSheet.Unprotect Password:=""
Dim wb As Workbook, lig&
lig = Target.Row
On Error Resume Next
Set wb = Workbooks(CStr(Cells(lig, 4)))
Application.Goto wb.Sheets(CStr(Cells(lig, 5))).Range(Cells(lig, 6))
    ActiveWindow.ScrollRow = Selection.Row
    ActiveCell.RowHeight = 55
   ActiveCell.Offset(0, -5).Select
If wb Is Nothing And Cells(lig, 4) <> "" And lig > 1 Then Cancel = True: MsgBox "Ouvrez le fichier '" & Cells(lig, 4) & "' !", 48
'ActiveSheet.Protect Password:="", DrawingObjects:=True, Contents:=True, Scenarios:=True
Application.EnableEvents = True
End Sub
ActiveWindow.ScrollRow = Selection.Row = me permet d'atteindre le numéro
ActiveCell.RowHeight = 55 = mettre la ligne à hauteur 55, si la ligne est filtrée (hauteur 0),
ActiveCell.Offset(0, -5).Select = sélection de la cellule A de la mettre ligne sans déclencher d'éxécution de code non souhaité,
et ensuite de pouvoir travailler sur la ligne pour le rappel.
lionel
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Gérard,
J'ai beaucoup testé cette nuit et j'ai fait le tour de tous les cas qui peuvent se présenter.
Ton code dernière version #post 80 fonctionne nickel :
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B1]) Is Nothing Then Exit Sub
Dim cible$, chemin$, fichier, feuille$, col$, lig&, x$, i As Variant
cible = [B1] 'à adapter
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = Dir(chemin & "isiTel*.xlsb") '1er fichier du dossier
feuille = "Appels"
col = "C6" 'colonne F en notation R1C1
lig = 2
While fichier <> ""
    x = chemin & "[" & fichier & "]" & feuille & "'!" & col & ",0)"
    i = ExecuteExcel4Macro("MATCH(" & cible & ",'" & x) 'recherche un nombre
    If IsError(i) Then i = ExecuteExcel4Macro("MATCH(""" & cible & """,'" & x) 'recherche un texte
    If IsNumeric(i) Then
        Cells(lig, 4) = fichier
        Cells(lig, 5) = feuille
        Cells(lig, 6) = "F" & i
        lig = lig + 1
    End If
    fichier = Dir 'fichier suivant
Wend
Range("D" & lig & ":F" & Rows.Count).ClearContents 'RAZ
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.EnableEvents = False
Dim wb As Workbook, lig&
lig = Target.Row
On Error Resume Next
Set wb = Workbooks(CStr(Cells(lig, 4)))
Application.Goto wb.Sheets(CStr(Cells(lig, 5))).Range(Cells(lig, 6))
    ActiveWindow.ScrollRow = Selection.Row
ActiveCell.RowHeight = 55
ActiveCell.Offset(0, -5).Select
If wb Is Nothing And Cells(lig, 4) <> "" And lig > 1 Then Cancel = True: MsgBox "Ouvrez le fichier '" & Cells(lig, 4) & "' !", 48
Application.EnableEvents = True
End Sub
Mais j'ai encore 2 soucis, pour 2 situations qui peuvent se produire, je n'y avais pas pensé, et je pense que ce sera complet cette fois-ci.

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 ?

2 - Tous mes numéros commencent par 33 et ensuite les 9 chiffres
Que le prospect habite en France métropolitaine ou en Outer mer, c'est toujours avec le 33 devant les 9 chiffres que je les appelle.
Quand un prospect me rappelle d'Outre mer, Il arrive de temps en temps (et je ne sais pas pourquoi) que l'indicatif téléphonique de son département s'affiche devant les 9 autres chiffres à la place du 33 par exemple 262111111111 etc…
Et puisque j'ai 33111111111 dans le fichier, la recherche ne trouve pas.
Est-il possible que la recherche se fasse non pas sur 33+les 9 chiffres mais sur les 9 derniers chiffres ?

Veux-tu encore m'aider et je pense que cette fois-ci, vu tous les tests que j'ai fait cette nuit, ce sera complet.
Je te souhaite ainsi qu'à tous un bon dimanche,
lionel
 
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…