Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Recherche parti d'une cellule et résultats multiples

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
19
Affichages
480
Réponses
5
Affichages
288
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…