Microsoft 365 Effectué une recherche dans plusieurs fichiers

largo41270

XLDnaute Nouveau
Bonjour a tous

J’ai besoin de votre aide

Je dois effectue une recherche dans plusieurs fichiers excel (environ 20 fichiers) comportant 15 colonnes.

Imaginons que dans tous les fichiers source que la colonne M soit les n° de palettes et en R les n° de pièce

Je voudrais pouvoir effectuer la recherche soit par une partie du n° de palette ou du n° de la pièce et Afficher la ligne complète du fichier dans le cadre résultat et si je clic sur le résultat ca ouvre le fichier

En bas de la feuille j’ai mis des modèles de N° de pièce on constate qu’il y a des parties identique

Pour éviter que ça ram de trop dans le fichier j’ai fait une liste des dossiers ou je dois chercher

Et cellule G4 j’indique dans quel dossier chercher

Je reste a votre disposition et vous remercie d’avance
 

Pièces jointes

  • Classeur2.xlsm
    15 KB · Affichages: 8

job75

XLDnaute Barbatruc
Bonjour largo41270, le forum,

Pour colorer les cellules dans la feuille de restitution il suffit d'ajouter :
VB:
If plage(i, dercol) <> "" Then .Cells(lig, j + 2).Interior.ColorIndex = 6 'jaune
A+
 

Pièces jointes

  • recherche.zip
    219.6 KB · Affichages: 2

largo41270

XLDnaute Nouveau
bonjour job75,
j'ai un petit problème avec le code
quand ca effectue une recherche dans la colonne "s/n" ca ne donne pas dans quelle palette elle ce trouve
et pareille quand rentre une ref Pallet no ca ne nous donne pas les ref S/N qui sont associé

merci d'avance
 

Pièces jointes

  • recherche11.zip
    384.9 KB · Affichages: 0

job75

XLDnaute Barbatruc
Bonjour largo41270,
quand ca effectue une recherche dans la colonne "s/n" ca ne donne pas dans quelle palette elle ce trouve
La macro du post #31 restitue ce qui est recherché.

Si vous voulez voir toutes les valeurs de la ligne cliquez sur le lien en colonne A, il est fait pour ça.

Maintenant si vous voulez que les 2 colonnes S/N et Pallet No. soient renseignées utilisez :
VB:
            For j = 0 To 1
                If plage(i, col(j)) <> "" Then
                    If plage(i, col(j)).Text Like cible Then
                        .Hyperlinks.Add .Cells(lig, 1), sf & f.Name, TextToDisplay:=f.Name 'lien hypertecte
                        .Cells(lig, 2) = plage(i, col(0))
                        .Cells(lig, 3) = plage(i, col(1))
                        If plage(i, dercol) <> "" Then .Cells(lig, 2).Resize(, 2).Interior.ColorIndex = 6 'jaune
                        Exit For
                    End If
                End If
            Next j
A+
 

Pièces jointes

  • recherche.zip
    219.7 KB · Affichages: 2

largo41270

XLDnaute Nouveau
bonjour job75 et merci

est-ce que c'est possible si on fait une recherche avec cette "K012203110010" dans le dossier "doss1"
il trouves 36 résultats, que sur 10 des résultats je passe les cellules en jaune dans "S/N" et "Pallet no." et que je les attributs au client toto dans la colonne "affaire/client" j'ai un bouton pour enregistrer les modifications dans les fichiers de la colonne "A"
encore merci pour ton boulot
 

Pièces jointes

  • recherche.zip
    222.6 KB · Affichages: 1

job75

XLDnaute Barbatruc
Ah une coquille, il manquait le test If dercol Then sur cette ligne :
VB:
If dercol Then If plage(i, dercol) <> "" Then .Cells(lig, 2).Resize(, 2).Interior.ColorIndex = 6 'jaune
 

Pièces jointes

  • recherche.zip
    221 KB · Affichages: 2

largo41270

XLDnaute Nouveau
Vous pouvez toujours :

- cliquer sur un lien en colonne A pour ouvrir le fichier source

- modifier ce fichier, l'enregistrer et le refermer.
c'est une solution mais qui me fait perdre beaucoup de temp puisque je traite environ 50 a 100 palettes par jour en tapent une partie de la ref palette ca peut donner des résultats qui vont êtres sur plusieurs fichiers
donc je suis obligé ouvrir tous les fichier pour les modifier
c'est pour ca que j'aimerai avoir un bouton pour que l'enregistrement ce face directement
 

job75

XLDnaute Barbatruc
donc je suis obligé ouvrir tous les fichier pour les modifier

D'accord, alors vous pouvez utiliser cette macro, affectée au 2ème bouton :
VB:
Sub Modifier_client()
Dim w As Worksheet, c As Range, i&, client$, lig&, fichier$, cc As Range, n&
Set w = Sheets("Feuil1")
If Application.CountIf(w.[F:F], "X") = 0 Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each c In w.[F:F].SpecialCells(xlCellTypeConstants)
    If UCase(c) = "X" Then
        i = c.Row
        client = w.Cells(i, 4)
        lig = Val(w.Cells(i, 5))
        If lig <= 0 Then
            w.Cells(i, 6) = ""
        Else
            fichier = w.Cells(i, 1).Hyperlinks(1).Address
            If Dir(fichier) = "" Then fichier = ThisWorkbook.Path & "\" & fichier
            With Workbooks.Open(fichier).Sheets(1) 'ouvre le fichier
                Set cc = .Cells.Find("AFFAIRE/CLIENT")
                If cc Is Nothing Then
                    w.Cells(i, 6) = ""
                Else
                    n = n + 1
                .Cells(lig, cc.Column) = client
                End If
            .Parent.Close Not cc Is Nothing    'enregistre et ferme le fichier
            End With
        End If
    End If
Next
MsgBox n & " cellule(s) modifiée(s) dans les fichiers sources"
End Sub
Bonne nuit.
 

Pièces jointes

  • recherche.zip
    226.6 KB · Affichages: 0
Dernière édition:

largo41270

XLDnaute Nouveau
merci beaucoup
il y a un bug le chemin du fichier est marqué 2 fois
merci merci mille fois pour ton taff
bug.jpg
 

job75

XLDnaute Barbatruc
Bonjour largo41270, le forum,

Chez moi au post #41 il fallait cette ligne de code :
VB:
fichier = ThisWorkbook.Path & "\" & w.Cells(i, 1).Hyperlinks(1).Address
Pour que ça fonctionne dans tous les cas je viens de la remplacer par ces 2 lignes :
VB:
fichier = w.Cells(i, 1).Hyperlinks(1).Address
If Dir(fichier) = "" Then fichier = ThisWorkbook.Path & "\" & fichier
A+
 

Discussions similaires

Réponses
4
Affichages
531

Statistiques des forums

Discussions
315 120
Messages
2 116 441
Membres
112 745
dernier inscrit
mcanas