[VBA] ListBox avec plusieurs colonnes

lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010 - 19 juin 2006 à 07:27
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
A voir également:

9 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2006 à 12:42
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 
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
19 juin 2006 à 17:58
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
19 juin 2006 à 18:06
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
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
19 juin 2006 à 18:45
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
20 juin 2006 à 20:46
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 !
0
lolpop Messages postés 211 Date d'inscription mercredi 4 août 2004 Statut Membre Dernière intervention 18 octobre 2010
21 juin 2006 à 07:09
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 :)
0
jvann Messages postés 1 Date d'inscription vendredi 25 septembre 2009 Statut Membre Dernière intervention 13 octobre 2010
13 oct. 2010 à 12:40
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
0
mldfromdtklan Messages postés 2 Date d'inscription dimanche 30 novembre 2008 Statut Membre Dernière intervention 4 mars 2011
4 mars 2011 à 13:12
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
0
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
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
0
Rejoignez-nous