Moteur de recherche simplifié

Gilb-r

XLDnaute Nouveau
Bonjour à la Team,

J’ai réalisé quelques recherches mais cela ne correspond pas tout à fait à ce que je souhaite faire (Moteur de recherche simplifié).
Je pense qu’avec votre expérience en un rien temps vous pourrez m’aider.
Je m’explique :
A partir du fichier1 (feuill1) dans une cellule je saisi une donnée à rechercher.
Si la boucle trouve des occurrences dans la totalité d’un autre fichier Excel (Feuil2) ces derniers seront renvoyés en Fichier1 (Feuil1) dans une plage de cellule quelconque.

Je vous avouerai que j’ai essayé Equiv et index mais je m’y perds… et je suis un peu léger : je pense qu’une boucle en VBA devrait suffire.

Des idées ?
 

Paf

XLDnaute Barbatruc
Bonjour,

un essai à copier dans la feuille de code de la feuille 1:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim W2 As Worksheet, x As Long, Cel As Range
Set W2 = Worksheets("Feuil2")
x = 5
If Not Intersect(Target, Range("B2")) Is Nothing Then
    Application.EnableEvents = False
    Range("B5:B" & Range("B" & Rows.Count).End(xlUp).Row).ClearContents
    For Each Cel In W2.Range("A2:A" & W2.Range("A" & Rows.Count).End(xlUp).Row)
        If Cel Like Range("B2") & "*" Then
            Cells(x, 2) = Cel
            x = x + 1
        End If
    Next
    Application.EnableEvents = True
End If
End Sub

A+
 

belkacem_64

XLDnaute Junior
Salut


Sub RECHERCHER()

Application.ScreenUpdating = False
Dim i As Long, R As Long, x As Integer, Sh As Worksheet, N As Worksheet
Set Sh = Sheets("Feuil2")
Set N = Sheets("Feuil1")
N.Range("B5:B100").ClearContents
With Sh
R = .Cells(Rows.Count, 1).End(xlUp).Row
x = 4
For i = 2 To R
If Left(CStr(.Cells(i, 1)), Len(N.Range("B2"))) = CStr(N.Range("B2")) Then
x = x + 1
N.Cells(x, 2) = .Cells(i, 1)
End If
Next
End With
Application.ScreenUpdating = True

End Sub
 

Gilb-r

XLDnaute Nouveau
Hello Belkacem64 !

Tout d'abord mes remerciements : cela fonctionne plein pot ! ;)

Ensuite, dans mon élan j'ai rajouté une seconde recherche avec la même feuille de source :
le script reprend toutes les bonnes données mais ne change pas de cellule et reste dans la cellule initiale pour afficher le résultat...
Donc je suis un peu frustré... :mad:

Des idées ? une variable à réinitialiser ? Peut on faire plus simple avec ce que j'ai rajouté ?
Merci encore une fois pour l'aide précieuse !

Voici le code :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim W2 As Worksheet, x As Long, Cel As Range

Set W2 = Worksheets("Lst_Mat")

x = 41
If Not Intersect(Target, Range("A31")) Is Nothing Then
    Application.EnableEvents = False
    Range("D41:D" & Range("D" & Rows.Count).End(xlUp).Row).ClearContents
    For Each Cel In W2.Range("A2:A" & W2.Range("A" & Rows.Count).End(xlUp).Row)
       If Cel Like Range("A31") & "*" Then
            Cells(x, 4) = Cel
            x = x + 1
        End If
    Next
    MsgBox x
    Application.EnableEvents = True

End If

'2nde partie ajouté par mes soins

Dim W3 As Worksheet, y As Long, Cely As Range
Set W3 = Worksheets("Lst_Mat")

y = 41

If Not Intersect(Target, Range("B16")) Is Nothing Then
    Application.EnableEvents = False
   
    Range("F41:F" & Range("F" & Rows.Count).End(xlUp).Row).ClearContents
    For Each Cely In W3.Range("A2:A" & W3.Range("A" & Rows.Count).End(xlUp).Row)
        If Cely Like Range("B16") & "*" Then
            Cells(x, 6) = Cely
            y = y + 1
            MsgBox Cely
            MsgBox y
        End If
    Next
    MsgBox y
   
    Application.EnableEvents = True

End If

End Sub
 

Paf

XLDnaute Barbatruc
re,

La partie rajoutée est sans doute issue d'un copier coller, adapté.... mais pas partout...

Code:
            Cells(x, 6) = Cely
            y = y + 1

on incrémente bien y, mais la ligne de la cellule dans laquelle on écrit est déterminée par x !! qui lui ne bouge pas

A+
 

Gilb-r

XLDnaute Nouveau
Bonjour,

Une dernière question :
Mes champs de recherche (A31 et B16) sont alimentés par une formule.
Ces derniers ont bien la bonne valeur.
Par contre le script ne récupère pas les données pour afficher le résultat de la recherche.
Si je rentre dans les cellules A31 et B16 + clique sur l’icône coche verte au niveau du bandeau formule, là le script est exécuté sans problème.

Existerait-il un moyen pour que je ne sois pas obligé manuellement de réaliser une validation dans la barre de formule pour que le script se lance
(que cela se fasse automatiquement ?)

Encore une fois merci pour votre aide précieuse.
 

Statistiques des forums

Discussions
312 501
Messages
2 089 014
Membres
104 005
dernier inscrit
Maxence