Sélection par curseur

Bonjour Amis du forum,

Mon problème aujourd’hui est le suivant :

J’ai un USF avec une combo + listbox + bouton de commande.

Quand je sollicite la combo j’ai une liste qui se déroule et qui affiche les noms contenus dans la colonne B. quand je sélectionne un nom ce même nom apparaît dans la listbox autant de fois où il est présent dans la colonne B.

Ce que je veux c’est que quand je fais un choix dans la listbox et je valide, le curseur se place exactement dans la cellule contenant ce nom.

Exemple : si le nom « Jean » apparaît 3 fois et que je clique le 2éme alors le curseur va dans la 2éme cellule qui contient « Jean ».

Ci_joint un exemple.

En vous remerciant par avance.

18selection.xlsm (23.05 Ko)

Bonjour Latef, bonjour le forum,

Essaie avec le code ci-dessous. Le numéro de ligne est stocké dans une colonne cachée de la ListBox1. Quand on clique sur un de ses éléments, on récupère son numéro de ligne. Tu peux même te passer du bouton Valider et obtenir la sélection en cliquant directement dans la ListBox1...

Le code commenté :

Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)

Private Sub UserForm_Initialize()
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I  As Long 'déclare la variable I (Incrément)

Set O = Worksheets("Feuil1") 'définit l'onglet O
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
'définit la tableau des valeurs TV
TV = O.Range("B4:B" & O.Cells(Application.Rows.Count, "B").End(xlUp).Row).Value
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    D(TV(I, 1)) = "" 'alimente le dictionnaire avec les données de la colonne 1 de TV
Next I 'prochane ligne de la boucle
ComboBox1.List = D.Keys 'alimente la ListBox1 avec la liste des éléments du dictionnaire D sans doublon
With Me.ListBox1 'prend en compte la ListBox1
    .ColumnCount = 2 'définit la nombre de colonnes
    .ColumnWidths = "50;0" 'dimensionne la colonne 0 et masque la colonne 1
End With 'fin de la prise en compte de la ListBox1

End Sub

Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Dim I  As Long 'déclare la variable I (Incrément)

ListBox1.Clear 'vide la ListBox1
If Me.ComboBox1.Value = "" Then Exit Sub 'si la ComboBox1 est effacée, sort de la procédure
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If TV(I, 1) = ComboBox1.Value Then 'si la donnée ligne I colonne 1 de TV est égare à la ComboBox1
        Me.ListBox1.AddItem 'ajoute un élément à la ListBox1
        With Me.ListBox1 'prend en compte la ListBox1
            .Column(0, .ListCount - 1) = TV(I, 1) 'récupère la donnée dans la colonne 0
            .Column(1, .ListCount - 1) = I 'récupère dans la colonne I le numéro I (cette colonne est cachée...)
        End With 'fin de la prise en compte de la ListBox1
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub

Private Sub ListBox1_Click() 'au clic dans la ListBox1
Dim LI As Long 'déclare la variable LI (Ligne)
With Me.ListBox1 'prend en compte la ListBox1
    LI = .Column(1, .ListIndex) + 3 'définit la ligne LI (on ajoute 3 car le premier élément commence à la ligne 4)
End With 'fin de la prise en compte de la ListBox1
O.Cells(LI, "B").Select 'sélectionne la cellule ligne LI colonne B de l'onglet O
End Sub

Private Sub CommandButton1_Click() 'bouton "Valider"

Dim LI As Long 'déclare la variable LI (Ligne)
With Me.ListBox1 'prend en compte la ListBox1
    LI = .Column(1, .ListIndex) + 3 'définit la ligne LI (on ajoute 3 car le premier élément commence à la ligne 4)
End With 'fin de la prise en compte de la ListBox1
O.Cells(LI, "B").Select 'sélectionne la cellule ligne LI colonne B de l'onglet O
End Sub

Bonsoir,

Grand merci à toi Tau Theme.

exactement ce que je voulais.

encore une fois merci

Rechercher des sujets similaires à "selection curseur"