Atteindre une cellule par clic ListBox

Bonjour à tous,

Après avoir retourné toute la toile à la recherche d'une solution à mon problème, je me tourne (pour la première fois) vers vous !

Tout d'abord je souhaite préciser que je suis loin d'être un expert et que j'ai déjà réalisé moult recherches sur moult forum.

Je suis en train de développer un petit outils pour ma boite qui fera office d'annuaire. J'y ai intégré une barre de recherche à l'aide d'une TextBox rattachée à la une ListBox dans laquelle les résultats (colonne J) de recherche (colonne I) s'affichent.

Ce que j'aurais aimé faire :

-> lorsque je double-clique sur l'un des résultats présents dans la ListBox, ce double-clic me conduise à la cellule liées ;

ou

-> supprimer la ListBox et faire en sorte que le tableau qui contient les numéros affiche en tête les résultats de la recherches.

J'ai tout essayé mais rien y fait... je ne trouve pas de solution. Je joins donc mon projet en PJ en espérant que quelqu'un puisse m'aider.

Je vous remercie par avance et j'espère à bientôt

Hugo

17projet.xlsm (577.54 Ko)

Bonsoir,

voyez le fichier joint :

Il permet une recherche instantanée sur une plage et lors du clic sur un résultat, alors la cellule correspondante est sélectionnée !

@ bientôt

LouReeD

Bonjour LouReeD,

Merci infiniment pour le fichier, ça fonctionne parfaitement

A bientôt .

Hugo

Merci @ vous pour vos remerciements !

@ bientôt

LouReeD

J'ai encore une petite interrogation !

Dans mon cas, j'aimerais que la recherche soit réalisée sur plusieurs colonne. A savoir de la colonne 1 à 6 (A à F).

Mon tableau commence en ligne 30 soit A30 et n'a pas de fin. Comment modifier le code pour que la recherche fonctionne dans toutes les lignes et colonnes ?

Private Sub TextBox1_Change()
    Application.ScreenUpdating = False
    Dim Cpt As Long, LIGNE As Long, Der_Lig As Long
    Der_Lig = Range("A" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range("A30").CurrentRegion.EntireRow.Hidden = True
    Erase Tablo()
    Cpt = 0
    If TextBox1 <> "" Then
        For LIGNE = 1 To Der_Lig
            If Cells(LIGNE, 1) Like "*" & TextBox1 & "*" Then
                Cells(LIGNE, 1).EntireRow.Hidden = False
                ReDim Preserve Tablo(Cpt + 1)
                Tablo(Cpt) = LIGNE
                Cpt = Cpt + 1
            End If
        Next
    Else
        ActiveSheet.Range("A30").CurrentRegion.EntireRow.Hidden = False
    End If
End Sub

Merci par avance

Bonjour,

vous pouvez remplacer :

If Cells(LIGNE, 1) Like "*" & TextBox1 & "*" Then

par :

If Application.CountIf(Cells(LIGNE, 1).Resize(, 6), "*" & TextBox1 & "*") > 0 Then

La recherche se fait toujours ligne après ligne et le code laisse affiché les ligne qui contiennent au moins une fois le texte qui se trouve dans le TextBox1 et ce en regardant sur les 6 colonnes ( Resize(,6) ) et toujours avec "contient" grâce aux étoiles...

Pour ce qui est de la ligne de départ il suffit de modifier :

For Ligne = 2 To Der_Lig

par :

For Ligne = 30 To Der_Lig

Et Der_Lig sera toujours égale à la dernière ligne utilisée de la colonne A, si les colonnes B, C, D, E ou F risque d'avoir une donnée sans qu'il y en aie en colonne A alors il faut trouver la dernière cellule de la zone utilisée par votre tableau avec :

SpecialCells(xlLastCells) ou un truc de ce genre, une fois la cellule trouvée il suffit de dire que Der_Lig = la ligne de cette cellule.

@ bientôt

LouReeD

Merci pour ce retour.

Ça ne fonctionne pas mais j'ai réussi à trouver une autre solution :

 Application.ScreenUpdating = False
    Dim Cpt As Long, Ligne As Long, Der_Lig As Long
    Der_Lig = Range("A" & Rows.Count).End(xlUp).Row
    ' on indique la première ligne du tableau
    ActiveSheet.Range("A30").CurrentRegion.EntireRow.Hidden = True
    Erase Tablo()
    Cpt = 0
    If TextBox1 <> "" Then
    ' on indique uniquement le numéro de la premiere du tableau
        For Ligne = 30 To Der_Lig
        ' on indique les numéros de colonne
        For colonne = 1 To 6
            If Cells(Ligne, colonne) Like "*" & TextBox1 & "*" Then
                Cells(Ligne, 1).EntireRow.Hidden = False
                ReDim Preserve Tablo(Cpt + 1)
                Tablo(Cpt) = Ligne
                Cpt = Cpt + 1
            End If
        Next
    Next
    Else
        ' on indique la première ligne du tableau
        ActiveSheet.Range("A30").CurrentRegion.EntireRow.Hidden = False
    End If

Merci encore et à bientôt

Hugo

Bizarre chez moi ça marche...

Bref bravo @ vous pour avoir trouvé !

@ bientôt

LouReeD

Rechercher des sujets similaires à "atteindre clic listbox"