Additem listbox en multicolonnes [Résolu/Fermé]

Signaler
-
 GrandJean -
Bonjour,



Je cherche à alimenter une Listbox 2 colonnes à partir d'une recherche par lettre dans une plage de données (ville et code postal). Le nom d'une ville pouvant avoir plusieurs codes postaux, je veux pouvoir sélectionner la bonne ville, d'où l'affichage du code postal. J'arrive à afficher l'info si je n'ai qu'une colonne, pas avec 2. J'ai effectué des tas de tests, avec column aussi. J'arrive à afficher les deux infos dans une colonne si je fais Me.Texte_4.AddItem c.Offset(1, 0) & " " & c.Offset(1, -1), mais cela ne m'arrange pas car je ne veux récupérer qu'une des deux valeurs, le nom de la ville.
Je tourne en rond, étant persuadé que la solution est très simple. J'apprécierai votre aide pour avancer. D'avance, merci.

Voici mon code :
dim plage

With Sheets("Tables")
finVille = .Cells(Rows.count, "E").End(xlUp).Row
Set plage = .Range(.Cells(10, "E"), .Cells(finVille + 1, "E"))

For Each c In plage
If UCase(c) Like UCase(Me.TB_Lettres) & "*" Then Me.Texte_4.AddItem
Me.Texte_4.List(, 0) = c.Offset(1, 0)
Me.Texte_4.List(, 1) = c.Offset(1, -1)

Next c
End With

End If

4 réponses

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 591
Bonjour,

C'est, en effet, un peu plus compliqué que cela.
Je te recommande d'aller voir ce tuto :
https://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-G
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Merci Franck, d'avoir regardé ma question. J'avais déjà vu ce tuto lors de mes recherches avant de "poster" et, sauf erreur ou incompréhension de ma part, je n'y ai pas trouvé de réponse à mon souci.

Donc, la question reste ouverte.

Jean
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 591
Et pourtant la réponse y est...

Alimenter la listbox 2 colonnes :
ListBox1.AddItem c.Offset(1, 0) 
ListBox1.List(ListBox1.ListCount - 1, 1) = c.Offset(1, -1)
Oui, j'avais vu cet exemple et l'avais essayé, sans succès.
Je viens de retenter et j'ai toujours la même erreur "impossible de définir la propriété list".
J'ai donc fait un petit fichier test :
http://www.cjoint.com/?0JisthXVPby

J'ai sans doute raté une étape. Je pense que cela doit venir de la recherche par caractère mais bon. Il y a quelques explications sur le premier onglet excel.

Jean
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 591
Tu as sans doute râté l'étape du If...
Tu as écris ceci :
Private Sub TB_Lettres_Change()
Dim c
Dim plage

Me.ListBox5.Clear
Me.TB_Lettres.SetFocus

With Sheets("Tables")
finVille = .Cells(Rows.Count, "E").End(xlUp).Row
Set plage = .Range(.Cells(10, "E"), .Cells(finVille + 1, "E"))
For Each c In plage
If UCase(c) Like UCase(Me.TB_Lettres) & "*" Then Me.ListBox5.AddItem c.Offset(0, 0)
ListBox5.List(ListBox5.ListCount - 1, 1) = c.Offset(0, -1)
Next c
End With
End Sub

Au lieu de :
Private Sub TB_Lettres_Change()
Dim c
Dim plage

Me.ListBox5.Clear
Me.TB_Lettres.SetFocus

With Sheets("Tables")
finVille = .Cells(Rows.Count, "E").End(xlUp).Row
Set plage = .Range(.Cells(10, "E"), .Cells(finVille + 1, "E"))
For Each c In plage
If UCase(c) Like UCase(Me.TB_Lettres) & "*" Then
Me.ListBox5.AddItem c.Offset(0, 0)
ListBox5.List(ListBox5.ListCount - 1, 1) = c.Offset(0, -1)
End If
Next c
End With
End Sub

Dans le cas de :
If blalba = True Then titi = truc
toto = machin
Le code exécute TOUJOURS toto = machin, même si blabla = False

Par contre, dans le cas :
If Blabla = True Then
titi = truc
tata = machin
End If
Le code n'exécute les deux lignes que si Blabla est vrai!!!

Ok?
Merci de ta patience. c'était effectivement tout bête. Je faisais aussi une autre erreur : le premier additem était après then, et non pas sur une autre ligne.

Enfin, maintenant, tout fonctionne.
Encore merci
Bonne soirée

Jean