[VBA] ListBox avec plusieurs colonnes

Messages postés
211
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
18 octobre 2010
- - Dernière réponse : mldfromdtklan
Messages postés
2
Date d'inscription
dimanche 30 novembre 2008
Statut
Membre
Dernière intervention
4 mars 2011
- 4 mars 2011 à 19:15
Bonjour
je reviens vers vous car cela fait 1semaine et demi que je n'avance pas.
je vous décris mon problème, comme je programme habituellement en php je vais fonctionnerpareil avec une colonne ID
Sous excel j'ai une feuille avec 3 colonnes, A=ID, B=nom, et C=age.
la premier ligne de chaque colonne indique a quoi elle corespond:
|id|  nom   | age     |
-------------------
|   |           |           |

J'ai créé un userform afin d'ajouter des entrées, et j'ai fait une list box simple colonne qui affiche la colonne nom, et lorsque l'on clique dessus cela affiche un nouveau userform avec des textbox pour modifier l'entré cliqué,mais mon probleme et que si il y a plusieur nom identique ça n'en prend qu'un, cest pourquoi j'ai décidé de travailler avec un id pour chaque.
Donc je voudrai savoir comme faire pour afficher dans la listbox 3 colonnes:id,nom et age et que ça ai les meme fonctionnalité que précédément.(ouvrir l'autre userform et pouvoir modifier l'entré)
je galère avec le rowsource mais je ne sais pas si c'est avec cela que l'on peut le faire.
si quelqu'un pouvais m'aider, ca serait super simpas.
merci
Afficher la suite 

9 réponses

Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Salut,

Effectivement c'est avec le rowsource.
Ex : ListBox1.RowSource = "Feuil1!A2:C100"

Ensuite voit la propriété ColumnCount   (c'est le nombre de colonne)
et ColumnWidth   (c'est la taille en largeur des colonnes)    dans la fenêtre des propriétés, il faut séparer les valeurs (en pts) par le point-virgule ' ;
'

@++
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>  Mortalino 

Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement

/recherche.aspx?r=Requ%eate+access&tr=source 
Commenter la réponse de mortalino
Messages postés
211
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
18 octobre 2010
0
Merci
merci pour ta réponce mortalino mais le probleme c'est que si j'ai que quelque entrée il va y avoir des lignes vide, mais j'ai fait un code dans ce sens mais j'ai encore 1-2 soucis:

voila le code de luserform1 initialize

Private Sub UserForm_Initialize()


i = 2
While Feuil1.Cells(i, 1) <> ""
i = i + 1
Wend
i = i - 1


UserForm1.choix.ColumnCount = 3
UserForm1.choix.BoundColumn = 2
choix.RowSource = ("Feuil1!A2:Ci")


End Sub

Mon problème est que j'ai une erreur la: ("Feuil1!A2:Ci") le i n'est pas completer par le nombre qu'il devrai, quelqu'un aurait une solution.
et mon second probleme c'est que lorsque l'on clique sur une ligne ca ouvre un nouveau userform mais meme en modifiant le boundcolumn ca affiche toujour l'id alor que le 2 corespond a la seconde colonne c'est a dire au nom. voila le code de luserform2

Private Sub UserForm_Initialize()
moi = UserForm1.choix.Text
UserForm2.nom2.Text = UserForm1.choix.Text
Unload UserForm1
End Sub

j'espere que quelqu'un pourra m'aider
Commenter la réponse de lolpop
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Voilà la bonne syntaxe :

choix.RowSource = "Feuil1!A2:C" & i
(entre guillemets, c'est du texte.)















Pas trop compris ton 2nd problème et je ne peux plus t'aider car je dois partir. Réexplique mieux ton problème et si quelqu'un passe par là, il t'aidera bien volontier.

Sinon, je repasse demain vers 18h, j'ai pour habitude de vérifier les mails de la veille donc dans tout les cas je revisiterai ta question et t'aiderai si personne n'a pu le faire.



















@++ & bonne soirée
<?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>  Mortalino 

Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement
Commenter la réponse de mortalino
Messages postés
211
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
18 octobre 2010
0
Merci
mon premier problème est résolu merci bien martalino.
alor je vais essayer de réexpliquer mon second probleme :)
j'ai mon premier userform avec juste une listbox multicolonne | ID | Nom | Age|
j'arrive à afficher parfaitement les données de ma feuille excel.
Lorsque l'on clique sur une ligne de la listbox, par exemple la premier ligne qui est
| 1 | Morgan | 19 |, ça ouvre un second userform ( cet userform sert en fait a modifier le nom), dans cet userform il y a un textbox qui normelement récupère le nom qui été selectionner dans la listbox, (quand je faisait ca avec un listbox simple a une colonne cela marché trés bien) mais la le probleme c'est que a la place d'afficher le nom ca affiche l'id.
pourtant j'ai définie le BoundColumn dans le premier userform.
les code sont juste au dessu,
jespere que j'aurais été claire :)
merci
Commenter la réponse de lolpop
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Salut,

Je pense que ce n'est pas nécessaire d'utiliser la propriété BoundColumn.

Pour reprendre ton exemple

| 1 | Morgan | 19 | (admettons tu as ceci que tu veux sélectionner dans la ListBox de ton 1er UserForm)

* Admettons aussi dans ton 2eme UserForm tu as un TextBox1 (pour l'ID), un TextBox2 (pour le nom) et un TextBox3 (pour l'age) :

Dans la procédure du UserForm1 :

Sub ListBox1.Click()
With UserForm2
.TextBox1.Text = Me.ListBox1.Column(0) '1ere valeur de la ligne sélectionnée
.TextBox2.Text = Me.ListBox1.Column(1) '2eme valeur
.TextBox3.Text = Me.ListBox1.Column(2) '3eme valeur
.Show
End With
Me.Hide
End Sub

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
Commenter la réponse de mortalino
Messages postés
211
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
18 octobre 2010
0
Merci
d'accord, donc si je comprend bien with userform sert a concaténé chaque ligne?
je n'avais jamais vu l'utilisation de with je recopier toujour userform2.textbox...

merci en tout ca :)
Commenter la réponse de lolpop
Messages postés
1
Date d'inscription
vendredi 25 septembre 2009
Statut
Membre
Dernière intervention
13 octobre 2010
0
Merci
Bonjour à tous,
Mon problème est commet afficher seulement la colonne A et C dans le meme listbox"Feuil1!A2:C100" affiche A B et C
je ne ceux afficher que les colonne A et C

Merci d'avance
Commenter la réponse de jvann
Messages postés
2
Date d'inscription
dimanche 30 novembre 2008
Statut
Membre
Dernière intervention
4 mars 2011
0
Merci
bonjour mon Grant je refait ton code et je l'ai réussi voila cadeau : de la part de mld

Private Sub CommandButton5_Click()
i = 2
While Feuil1.Cells(i, 1) <> ""
i = i + 1
Wend
i = i - 1

UserForm1.choix.ColumnCount = 3
UserForm1.choix.BoundColumn = 2
choix.RowSource = "Feuil1!A2:" & "C" & i
End Sub
à bientôt merci
Commenter la réponse de mldfromdtklan
Messages postés
2
Date d'inscription
dimanche 30 novembre 2008
Statut
Membre
Dernière intervention
4 mars 2011
0
Merci
salut je suis dsl j'avai pas vue ton 2 probleme XD.

'pour ton problème 1 tu crées une boite de dialogue nommer "Userform1".
'dans ce userform1 tu crées ton Listbox nommer "choix".
'tu crées une 2ème boite de dialogue nommer "Userform2".
'dans ce userform2 tu crées 3 labels "Label1", "Label2" et "Label3".
'puis tu crées 3 textboxs "TextBox1", "TextBox2" et "TextBox3".
'tu aligne "TextBox1" et "Label1" sur la meme ligne (cote à cote) ,
'tu aligne "TextBox2" et "Label2" sur la meme ligne (cote à cote) et
'"TextBox3" et "Label3" sur la meme ligne (cote à cote)

Private Sub UserForm_Initialize()
'nommer les labels par le titre de votre choix
Label1.Caption = "ID" 'tu mets ton titre entre les "".
Label2.Caption = "Nom" 'tu mets ton titre entre les "".
Label2.Caption = "Age" 'tu mets ton titre entre les "".

i = 2
While Feuil1.Cells(i, 1) <> ""
i = i + 1
Wend
i = i - 1

UserForm1.choix.ColumnCount = 2
'UserForm1.choix.BoundColumn = 2 'cette ligne là tu n'en a pas besoin ok?
choix.ColumnHeads = True 'affiche le titre des colones
choix.RowSource = "Feuil1!A2:C" & i
End Sub

'ton 2eme problème est là je l'ai testé ça marche à merveille.
Private Sub choix_Click()

With UserForm2
.TextBox1.Text = Me.choix.Column(0) '1ere valeur de la ligne sélectionnée
.TextBox2.Text = Me.choix.Column(1) '2eme valeur de la ligne sélectionnée
.TextBox3.Text = Me.choix.Column(2) '2eme valeur de la ligne sélectionnée
End With
UserForm2.Show
End Sub
'aller teste le pour voir mon pote
Commenter la réponse de mldfromdtklan