Recherche dans une liste

Bonjour,

J'aimerais créer un outil de recherche facile à utiliser un peu comme un Ctrl F mais avec une plage ou n'importe quel utilisateur pourrait écrire le mot recherché par KeyWord.

Voici un exemple en PJ. la feuil 2 est la plage ou je voudrais faire la recherche Tous les nom des pays sont sous forme de Formule et elles doivent rester ainsi. Je voudrais que par exemple si quelqu'un écrit BR quelque part, les ligne avec un pays qui contient BR soit affiché et les autres masqué.

Ceci est un exemple mais mon fichier source comporte plusieurs milliers de ligne et les mots se répètent souvent donc cet outil deviendrait comme un moteur de recherche.

Je suis ouverte aux suggestions. soit sur la mêmes pages Feuil 2, ou sinon sur une autre page ou lorsque quelqu'un écrit un mot les colonnes de la feuil 2 apparaissent.

Merci de votre aide.

34test-recherche.xlsx (11.59 Ko)

Bonsoir,

une proposition :

En fait, il y a un text box dans lequel vous entrez les lettres de la recherche, les résultats s'affiche dans la liste box. Il suffit de cliquer sur l'un des résultats pour que la feuille "scroll" à la bonne cellule.

@ bientôt

LouReeD

Merci Intéressant,

Pourrais tu juste m'aider pour la finalité, je voudrais masquer les lignes si elles ne sont pas Vertes.

Aussi dans la macro je ne comprends pas comment elle prend le terme Tablo alors qu'aucun tableau ne se nomme Tablo ? Merci

Merci

Bonsoir,

voir ci dessous, il y a bien des "appels" à Tablo()

'Source : http://www.blog-excel.com/creer-un-champ-de-recherche-vba
Option Compare Text

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Cells(Tablo(ListBox1.ListIndex), 1).Activate
End Sub

Private Sub TextBox1_Change()
    Application.ScreenUpdating = False
    Dim Cpt As Long, Ligne As Long
    Dim Row As Range
    Erase Tablo()
    Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Interior.ColorIndex = 2
    ListBox1.Clear
    Cpt = 0
    If TextBox1 <> "" Then
        For Ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row
            If Cells(Ligne, 1) Like "*" & TextBox1 & "*" Then
                Cells(Ligne, 1).Interior.ColorIndex = 43
                ListBox1.AddItem Cells(Ligne, 1)
                ReDim Preserve Tablo(Cpt + 1)
                Tablo(Cpt) = Ligne                Cpt = Cpt + 1
            If Cells(Ligne, 1).Interior.ColorIndex = 43 Then
            Worksheets("Feuil").Columns("A").Hidden = True
            End If
            End If
        Next
  End If
End Sub

Le principe : Tablo() est créé en "public" afin d'être accessible de tout le projet VBA.

Cette définition se trouve en première ligne du Module1 VBA

Lors que la recherche abouti sur des réponse, pour chaque item trouvé qu'on inscrit dans la ListBox1, on inscrit également le numéro de ligne Excel où se trouve cet item.

Lorsque clique sur un des items de la listBox1, alors on "active" la ligne Excel correspondante par appel de la valeur de Tablo().

Dès qu'une nouvelle valeur est entrée dans la zone texte, on efface le Tablo(), puis on le recrée en fonction des nouveaux résultats.

Une piste pour votre première question .

Dans Tablo() se trouve les n° de lignes où il y a un résultat par rapport à la recherche, donc il suffit de mettre à "hidden" les n° de lignes qui ne figure pas dans le tableau, mais s'il y a plus de ligne à masquer qu'à laisser visible, le plus rapide serait de tout cacher et d'afficher le contenu du Tablo()...

@ bientôt

LouReeD

Voici le fichier modifié :

avec commentaires.

@ bientôt

LouReeD

Merci vraiment gentil de ton aide !!!!

Bonsoir,

merci de votre merci et ravis que cela vous convienne !

@ bientôt

LouReeD

Bonjour,

Je ne comprends pas quand je fais la macro pour le double Click :

J'ai l'erreur run time error 9 : Subscript out of range.

Peut-être car je fais référence à une autre page ?

Merci

[code][/Worksheets("DATA-ALL").Range("E4").Cells(Tablo(ListBox1.ListIndex)).Activatecode]

Bonsoir,

s'il n'y a pas de problème veuillez m'envoyer votre fichier ou une version "allégée" mais qui comporte la structure des deux feuilles, merci.

@ bientôt

LouReeD

Bonjour MERCI de votre réponse.

Je ne peux malheureusement vous envoyer de fichier présentement. mais voici les pages et mon code :

Page ou le Textbox et le listbox apparaît : "Tableau de matières"

Page ou ce trouve le tableau de référence : "DATA-ALL" l'information est dans la colonne E

Quand je double clique sur le texte dans ma list box : Message erreur 9 ; subscript out of range. Mais je sais que c'est du a la variable Tablo qui est mise dans le module 4 Public tablo ()

Option Compare Text

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    ' si on clic sur un item de la ListBox1 alors on active la cellule correspondante

    Worksheets("DATA-ALL").Range("E4").Cells(tablo(ListBox1.ListIndex), 1).Activate

End Sub

Private Sub TextBox1_Change()

    Dim ligne As Long

Application.ScreenUpdating = False

    ListBox1.Clear

    If TextBox1 <> "" Then
        For ligne = Worksheets("DATA-ALL").Range("e4").Row To Worksheets("DATA-ALL").Range("E" & Rows.Count).End(xlUp).Row
            If Worksheets("DATA-ALL").Range("E4").Cells(ligne) Like "*" & TextBox1 & "*" Then

                ListBox1.AddItem Worksheets("DATA-ALL").Range("E4").Cells(ligne).Value

            End If
        Next
    End If

End Sub

Veuillez essayer ceci :

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    ' si on clic sur un item de la ListBox1 alors on active la cellule correspondante
    Worksheets("DATA-ALL").Cells(Tablo(ListBox1.ListIndex), 5).Activate
End Sub

Private Sub TextBox1_Change()
    ' on défini 3 variables
    Dim Ligne As Long
    Application.ScreenUpdating = False
    ListBox1.Clear
    If TextBox1 <> "" Then
        For Ligne = 4 To Worksheets("DATA-ALL").Range("E" & Rows.Count).End(xlUp).Row
            If Worksheets("DATA-ALL").Cells(Ligne, 5) Like "*" & TextBox1 & "*" Then
                ListBox1.AddItem Worksheets("DATA-ALL").Cells(Ligne, 5).Value
            End If
        Next
    End If
End Sub

A savoir pour plus tard :

lorsque l'on veut sélectionner une cellule avec VBA il y a (au moins) deux méthode :

le Range("E4") pour sélectionner la cellule E4

le Cells(4,5) pour sélectionner E4

en effet Cells( n° de ligne , n° de colonne)

Bref ceci pour dire que lorsque vous écrivez :

 Worksheets("DATA-ALL").Range("E4").Cells(ligne)

vous mélangez les deux méthodes ! Il est normal que cela provoque des erreurs... A moins que je me trompe, vous savez je ne suis pas un "pro" du VBA

@ bientôt

LouReeD

LouReeD a écrit :

Bonsoir,

s'il n'y a pas de problème veuillez m'envoyer votre fichier ou une version "allégée" mais qui comporte la structure des deux feuilles, merci.

@ bientôt

LouReeD

voilà exactement l'erreur que j'ai Merci


LouReeD a écrit :

Veuillez essayer ceci :

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    ' si on clic sur un item de la ListBox1 alors on active la cellule correspondante
    Worksheets("DATA-ALL").Cells(Tablo(ListBox1.ListIndex), 5).Activate
End Sub

Private Sub TextBox1_Change()
    ' on défini 3 variables
    Dim Ligne As Long
    Application.ScreenUpdating = False
    ListBox1.Clear
    If TextBox1 <> "" Then
        For Ligne = 4 To Worksheets("DATA-ALL").Range("E" & Rows.Count).End(xlUp).Row
            If Worksheets("DATA-ALL").Cells(Ligne, 5) Like "*" & TextBox1 & "*" Then
                ListBox1.AddItem Worksheets("DATA-ALL").Cells(Ligne, 5).Value
            End If
        Next
    End If
End Sub

A savoir pour plus tard :

lorsque l'on veut sélectionner une cellule avec VBA il y a (au moins) deux méthode :

le Range("E4") pour sélectionner la cellule E4

le Cells(4,5) pour sélectionner E4

en effet Cells( n° de ligne , n° de colonne)

Bref ceci pour dire que lorsque vous écrivez :

 Worksheets("DATA-ALL").Range("E4").Cells(ligne)

vous mélangez les deux méthodes ! Il est normal que cela provoque des erreurs... A moins que je me trompe, vous savez je ne suis pas un "pro" du VBA

@ bientôt

LouReeD

Oh merci en effet il y avait confusion. Mais ca ne semble pas être la source du problème.

Je ne suis vraiment pas une experte non plus mais j'ai limpression que c'est avec le Tablo (). il ne semble pas le trouver . est ce possible?

5test.xlsm (25.71 Ko)

Bonjour et attention !

il faut suivre le fil de la discussion !

Votre code sur le fichier n'a rien à voir avec celui fourni précédemment...

Ci joint votre fichier test, il fonctionne chez moi... après les corrections de code effectuées suite à la suppression de ligne...

@ bientôt

LouReeD

bonjour,

Merci ca semble bien marcher ici aussi. Je ne suis pas certaine de comprendre la variable CPT mais c'était ce qui me manquait

Un gros merci pour votre aide

La variable Cpt est un "compteur" afin de redimensionner le tableau Tablo à la taille du nombre de cellule correspondant à la recherche.

Si le tableau n'est pas dimensionné, ce n'est pas bon, et si le dimensionne "en dur"

Dim Tablo(5000)

et bien soit il est trop grand (pas très grave), mais s'il est trop petit ce n'est pas bon, donc lors de la boucle, si on trouve une ligne qui correspond à la recherche, on ReDim Preserve (redimensionne) le tableau avec une taille de Cpt + 1 en préservant les données déjà inscrites dedans...

@ bientôt

LouReeD

Rechercher des sujets similaires à "recherche liste"