Listbox deux colonnes

Bonjour,

j'ai une listbox à deux colonnes qui se complète par macro, jusque la tout va bien

à gauche les prénoms et à droite les noms

image

question:

quand je sélectionne une ligne et que je tape une lettre par exemple P sur mon clavier le sélection ira directement sur la ligne de Pablo seulement je souhaiterais que cela aille chercher dans la colonne des noms et pas des prénoms

aussi à moins d'inverser les colonnes ( ce qui impliquerait de toucher à la macro que je ne maitrise pas forcement) y aurait il une autre solution?

merci

Bonjour,

votre listbox est dans une USF ?

Si oui, vous devez utiliser le code KEYPRESS disponible pour votre listbox et ensuite balayer les items de votre listbox dans votre colonne Prénom

Cordialement

non celle-ci n'est pas un USF...

j'ai fais une recherche sur keypress

celle ci semble répondre mais comment balayer ensuite dedans?

Private Sub Listing_PI_keypress()
 Dim strCharacter As String
  ' Convert ANSI value to character string.
 strCharacter = Chr(KeyAscii)
 ' Convert character to upper case, then to ANSI value.
 KeyAscii = Asc(UCase(strCharacter))

End Sub

ok.

Si votre listbox a été créée via le menu "Inserer" --> "contrôle Activex", vous disposez également du code KEYPRESS

je viens juste d'éditer mon post précédent

avec une tentative de macro avec keypress justement

Bonjour Dan, j'ai donc testé la méthode keypress après recherche Private Sub PInvest_List_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) MsgBox ("test") End Sub cela renvoi bien le message test si je tente de MsgBox (KeyAscii) cela renvoi vers la premiere ligne trouvé je présume comment désormais rechercher dans la colonne des noms et non prénoms?

Il semble que par défaut excel recherche toujours en colonne 1. Du coup si vous avez un p dans les prénoms et rien dans les noms, il sélectionnera la ligne du p quand même.

Essayez toujours ce code

Private Sub ListBox_PI_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim strCharacter As String

'Convert ANSI value to character string.
strCharacter = Chr(KeyAscii)

For i = 0 To ListBox_PI.ListCount - 1
    If ListBox_PI.List(i, 1) Like "*" & strCharacter & "*" Then
        ListBox_PI.Selected(i) = True
    Exit Sub
    End If
Next i
End Sub

Dites moi

Bonsoir

j'ai testé et cela ne fonctionne pas meme si cela ne genere pas d'erreur

cela continu de chercher dans la colonne prenom et donc la premiere

Voila à tout hasard la macro qui renseigne cette listbox

Public Sub Listing_PI()
 Dim MaCollection As New Collection
 NomTableau = "Links14"
 TblBd = Sheets("Investigators").ListObjects(NomTableau).DataBodyRange.Value
 ID = Val("1"): N = 0
 ColVisu = Array(3, 4)
 LargeurCol = Array(50, 45)
 PInvest_List.ColumnCount = Sheets("Investigators").Range(NomTableau).Columns.Count - 5
 PInvest_List.ColumnWidths = Join(LargeurCol, ";")
   Dim tb_tri()
    Dim clé1_tri As Variant, clé2_tri As Variant
    Dim i1 As Integer, i2 As Integer, j As Integer, C As Integer

  Dim Tbl()
  ' En cas d'erreur
  On Error Resume Next
  ' Boucle
  For i = 1 To UBound(TblBd)

    MaCollection.Add TblBd(i, 4), TblBd(i, 4)
    ' Vérifier si erreur = doublon
    If Err.Number = 0 Then
    ' Sinon on  ajoute
     If TblBd(i, 1) = ID Then
        N = N + 1: ReDim Preserve Tbl(1 To UBound(TblBd, 2), 1 To N)
                 C = 0
        For Each k In ColVisu
           C = C + 1: Tbl(C, N) = TblBd(i, k)
          Next k
     End If
    Else
      Err.Clear
    End If

  Next i
  If N > 0 Then Me.PInvest_List.Column = Tbl Else Me.PInvest_List.Clear
' Tri le contenu du ComboBox par ordre alphabétique

    With Sheets("DashBoard").PInvest_List
        'Création d'un tableau dynamique trié par Nom/Prénom
        ReDim tb_tri(.ListCount, .ColumnCount)
        For i1 = 0 To .ListCount - 1
           clé1_tri = .List(i1, 1) & .List(i1, 0)

            j = 0
            For i2 = 0 To .ListCount - 1
            clé2_tri = .List(i2, 1) & .List(i2, 0)
                If clé1_tri > clé2_tri Then j = j + 1
            Next i2
            For C = 0 To .ColumnCount - 1
                tb_tri(j, C) = .List(i1, C)

            Next C
        Next i1

        'Rechargement Listbox triée
        .ListFillRange = Empty
        .List = tb_tri

    End With

End Sub

et la gestion du double clic qui lance un userform

Public Sub PInvest_List_DblClick(ByVal lstncel As MSForms.ReturnBoolean)
Dim FirstName, Name As String

FirstName = PInvest_List.Column(0)
Name = PInvest_List.Column(1)

PI_Projects_List.PI_FirstName = FirstName
PI_Projects_List.PI_Name = Name

PI_Projects_List.Show
PInvest_List.ListIndex = 0

End Sub

aussi j'ai tenté une autre approche avec votre méthode:

Private Sub PInvest_List_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

Dim strCharacter As String

'Convert ANSI value to character string.
strCharacter = Chr(KeyAscii)

For i = 0 To PInvest_List.ListCount - 1
'    If PInvest_List.List(i, 1) Like "*" & strCharacter & "*" Then
'        PInvest_List.Selected(i) = True
If PInvest_List.Column(1) Like "*" & strCharacter & "*" Then
        PInvest_List.Selected(i) = True
    Exit Sub
    End If
Next i

End Sub

mais cela ne change rien pour autant.

une piste avec toutes ces informations?

merci à vous par avance

Bonjour …

Un exemple à tester* pour le contrôle ActiveX ListBox à 2 colonnes en Multiselect.

Attention : si la liste est vide, cliquer dessus pour l'initialiser !

*Dan(salut) je ne suis pas MAC

Bonjour

Heu ... ici --> https://forum.excel-pratique.com/s/goto/1137169 vous me dites que la listbox n'est pas sur une Userform et dans votre message vous écrivez " gestion du double clic qui lance un userform" Quid ?

Une chose que je ne vous ai pas dites c'est le code proposé doit être placé dans la feuille et non dans un module. Mais là je suppose que vous savez...

Faites un essai en enlevant le EXIT SUB

Aussi en mettant la propriété Mulitselect sur True (comme Ordonc le signale dans son post), cela fonctionne. Par contre si vous choisissez une autre lettre il faut recliquer sur la sélection pour désélectionner la première.

@Ordonc : oui pour le MAC mais là j'avais testé sous PC en créant aussi la listbox via contrôle ActiveX.

Bonjour

je vais regarder Ordonc merci pour cette proposition

j'ai bien une listbox dans ma feuille qui lance un userform une fois le nom/prenom choisi

ici je suis bien dans la feuille en question et pas un module !

chose bizarre quand je passe en mode developpeur et que je selectionne ma listbox pour faire propriétés

c'est tout vide..

image

edit je viens de regarder la propo de ordonc et cela fonctionne correctement sous reserve d'avoir un autre champ de recherche par initiale si je tape une lettre sur le clavier dans la listbox cela renvoi toujours ves la premiere colonne..

chose bizarre quand je passe en mode developpeur et que je selectionne ma listbox pour faire propriétés

Bizarre effectivement...

Moi j'ai ceci (basé sur un fichier que je me suis fait pour vous aider)

presse papier02

j'ai trouvé c'etait parce que je n'avais pas ouvert vba et indiqué mon mot de passe

une fois cela fait je peux voir les propriétés de la listbox qui de base sont comme cela:

image

néanmoins cela ne répond pas comme je voudrais

En effet si une litsbox est sur une seule colonne et si on choisis une lettre cela rejoins directement la ligne concerne si double colonne cela fonctionne mais ça va sur la première colonne uniquement

Aussi j’ai l’impression que hormis par un système de tri comme le propose ordonc cela ne peut pas fonctionner

En effet si une litsbox est sur une seule colonne et si on choisis une lettre cela rejoins directement la ligne concerne si double colonne cela fonctionne mais ça va sur la première colonne uniquement

Oui et non. Dans les propriétés je suppose que vous avez mis columncount à la valeur 2.

Sinon le fichier sur lequel j'ai fait le code.

3classeur1.xlsm (22.80 Ko)

Sinon prenez celui d'Ordonc

Crdlt

bonjour et merci pour votre retour

En effet de mon coté je suis bien en columncount = 2 car c'est la macro vba qui vient la compléter sur 2 colonnes (voir macro plus haut si besoin)

je vais tenter de regarder vos fichiers respectifs et voir comment peux s'appliquer chez moi :)

mais sauf erreur dans un cas tri a part pour sélectionner la ligne et votre coté multiselect qui affiche plusieurs lignes en simultanée du coup je ne suis mem pas sur que le dblklclick fonctionnera correctement

Rechercher des sujets similaires à "listbox deux colonnes"