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

Tableau et recherche dans Listbox

Calvus

XLDnaute Barbatruc
Bonsoir le forum,

Après avoir cherché tout le week-end mais en arrivant seulement à un résultat partiel, je me tourne vers vous.

J'aimerais sélectionner une ligne particulière dans une listbox, et obtenir l'adresse ou la référence de la ligne.
J'y arrive, mais seulement pour une occurrence.

Le code concerne la Private Sub ListBox1_Click()

La procédure est expliquée dans le fichier.

Merci de votre aide.

PS: je sais qu'une partie du code de mon projet est une usine à gaz, mais je n'ai pas encore trouvé le moyen d'optimiser.
Mais cela n'influe pas sur la recherche de ce fil.
 

Pièces jointes

  • Temp Creaction Formulaire 4 Forum.xlsm
    110 KB · Affichages: 65

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Je ne suis pas certain de bien saisir car d'après ce que je comprends la réponse serait simplement ListBox1.ListIndex.


[edit]Bon ben c'est bien ce que je disais : j'ai pô compris la question. [/edit]
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Bonsoir Marcel,

Si tu suis l'exemple que j'ai donné, il y a 3 occurrences. Or Listbox1.Listindex va me donner une valeur selon le numéro de l'index que j'aurai défini.
Par exemple Listindex = 3.
Mais moi j'ai besoin de trouver la ligne sur laquelle je clique. J'y arrive avec
[Donnees].Find(Me.ListBox1.List(Me.ListBox1.ListIndex, 3), Lookat:=xlWhole), mais la macro s'arrête sur la 1ère occurence et ne voit pas le reste de la colonne.
J'ai tenté Find Next mais sans réussir.

Voici le résultat souhaité.
Merci

 

TooFatBoy

XLDnaute Barbatruc
Oui, donc c'est bien ce que j'avais fini par comprendre : tu veux retrouver dans ton tableau la ligne correspondant à celle sur laquelle tu as cliqué dans ta ListBox.

Tu filtres ton tableau et en suite tu descends d'autant de lignes que nécessaire, peut-être.
 

TooFatBoy

XLDnaute Barbatruc
Ce que j'entends par-là c'est que tu peux peut-être filtrer ton tableau avec les mêmes critères que ceux qui t'ont permis de remplir ta ListBox, et il ne te resterait donc plus qu'à aller à la ligne correspondant au ListIndex par exemple en partant du titre et en descendant de "ListIndex + 1" lignes.
 

TooFatBoy

XLDnaute Barbatruc
Ou alors tu ajoutes une colonne à ton tableau qui serait une référence unique (par exemple le numéro de la ligne, comme ça tu as directement le numéro que tu cherches à obtenir), une sorte d'index.
 

TooFatBoy

XLDnaute Barbatruc
Pas besoin de clic. Tu peux par macro filtrer ton tableau.
Il me semblait qu'en suite on pouvait, aussi par macro, descendre d'une ligne, mais je ne retrouve pas comment faire et du coup je n'en suis plus vraiment sûr... (et trop mal en point pour chercher)
 

Calvus

XLDnaute Barbatruc
je n'en suis plus vraiment sûr... (et trop mal en point pour chercher)
Je vais chercher de mon coté, mais je ne suis pas sûr d'avoir compris la logique de la procédure.
Sinon attendre un peu.... et repose toi bien surtout.

L'autre solution est celle de l'index en effet, sauf qu'il va falloir réécrire tout le code, ce qui n'est pas aisé...
Merci et à bientôt.
 

TooFatBoy

XLDnaute Barbatruc
Ce n'est pas très joli, ça ressemble plus à du bidouillage qu'à autre chose, mais tu peux essayer ceci :

VB:
Private Sub ListBox1_Click()
Dim k As Single, valeur As Range, f As Worksheet
Dim i As Long, MaLigne As Long
    [Donnees].Find(Me.ListBox1.List(Me.ListBox1.ListIndex, 0), Lookat:=xlWhole).Select
    For i = 1 To ListBox1.ListIndex
        [Donnees].Find(Me.ListBox1.List(Me.ListBox1.ListIndex, 0), after:=ActiveCell, Lookat:=xlWhole).Select
    Next i
    MaLigne = Selection.Row
    On Error Resume Next
    Set f = Sheets(2)
    If OptionButton1 Then
        Set valeur = f.Range("B:B").Find(Me.ComboBox1, Lookat:=xlWhole)
    Else
        Set valeur = f.Range("B:B").Find(Me.ListBox1.Column(1), Lookat:=xlWhole)
    End If
    For k = 6 To 12
        Me("Label" & k) = valeur.Offset(, k - 6)
    Next k
End Sub
 

Discussions similaires

Réponses
18
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…