Recherche parti d'une cellule et résultats multiples

chantalc33

XLDnaute Nouveau
Bonjour à tous!

Voilà, j'ai un classeur excel avec 2 feuilles.
Sur la feuille 2, je veux que l'utilisateur puisse entrée une valeur dans B2, qui sera recherché dans l'ensemble de la feuille 1.
Par exemple, sur la feuille 2 en B2, on entre "Berge" et on recherche alors toutes les données qui contiennent le mot *Berge* dans la feuille 1.
Par la suite, pour chaque résultat trouvé, je voudrais que la ligne complete où le résultat a été trouvé soit copiée sur la feuille 2...
Exemple, si la valeur *Berge* a été trouvé en B10, on copier toute la ligne 10 (de A à ZZ) en feuille 2.

Est-ce que vous auriez une façon simple de faire ceci?

Merci :)
 

Brice G

XLDnaute Occasionnel
Bonsoir,
un fichier exemple est toujours très bien, même si vous avez bien posé votre problème.:)

Pour ma part je pense à, soit :
- une solution en VBA, sans doute plus élégante ;
- une autre avec la fonction RECHERCHEV, pas tellement plus compliquée.

Je peux vous le faire avec un fichier exemple si besoin.:)
 

Theze

XLDnaute Occasionnel
Bonsoir,

A mettre dans le module de la feuille 2 car procédure événementielle Change(). Adapter le nom de la feuille 1 dans cette ligne Set Fe_1 = Worksheets("Feuil1") puis tester :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
   
    Dim Fe_1 As Worksheet
    Dim Fe_2 As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Adr As String
    Dim Lig As Long
    Dim Col As Long
   
    'seulement B2
    If Target.Address(0, 0) <> "B2" Then Exit Sub
   
    On Error GoTo Fin 'gestionnaire d'erreur
   
    Set Fe_1 = Worksheets("Feuil1")
    Set Fe_2 = ActiveSheet
   
    'défini la plage sur toute la feuille
    Set Plage = DefPlage(Fe_1)
   
    'commence la recherche
    Set Cel = Plage.Find(Target.Value, , xlValues, xlPart)
   
    'si trouvé...
    If Not Cel Is Nothing Then
       
        Application.EnableEvents = False 'gel des événements
   
        Adr = Cel.Address
       
        Do
           
            'recherche la dernière colonne non vide où se trouve la cellule contenant la valeur cherchée
            Col = Fe_1.Cells(Cel.Row, Columns.Count).End(xlToLeft).Column
           
            With Fe_2
           
                'recherche de la première cellule vide (+1) sur la colonne A de la feuille active
                Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
               
                'si inférieur à la ligne 3 donc commence à 3 (valeur cherchée en B2 !)
                If Lig < 3 Then Lig = 3
               
                'récupère les valeurs
                .Range(.Cells(Lig, 1), .Cells(Lig, Col)).Value = Fe_1.Range(Fe_1.Cells(Cel.Row, 1), Fe_1.Cells(Cel.Row, Col)).Value
               
            End With
           
            Set Cel = Plage.FindNext(Cel)
           
        Loop While Cel.Address <> Adr
       
    End If
   
Fin:
   
    Application.EnableEvents = True
   
End Sub

Function DefPlage(Fe As Worksheet, Optional L As Long = 1, Optional C As Long = 1) As Range
   
    On Error GoTo Fin
   
    With Fe

        Set DefPlage = .Range(.Cells(L, C), _
                       .Cells(.Cells.Find("*", .[A1], -4123, , _
                       1, 2).Row, .Cells.Find("*", .[A1], -4123, , _
                       2, 2).Column))

    End With
   
    Exit Function
   
Fin:

    Set DefPlage = Nothing

End Function
 

chantalc33

XLDnaute Nouveau
Bonjour!
Merci pour vos réponses. Je joins un exemple.
Theze, ça marche presque parfaitement ton code, mais :
1 - Il garde les résultats, donc si j'efface la recherché et en fait une autre, il mets les résultats des 2 recherches à la suite l'un de l'autre. Il faudrait qu'il affiche uniquement les résultats de la recherche en cours.
2 - Quand le champ est vide, il retourne tous les résultats de la première feuille, alors qu'il faudrait plutôt qu'il ne retourne aucun résultat.

Merci pour votre aide à tous les deux! :)
 

Pièces jointes

  • Classeur1.xlsx
    12.8 KB · Affichages: 34

Discussions similaires

Réponses
24
Affichages
411

Statistiques des forums

Discussions
312 183
Messages
2 086 005
Membres
103 087
dernier inscrit
sarah.caneri