Créer une ListBox (débutant)

Créer une ListBox (débutant) - VB/VBA/VBS - Programmation

Marsh Posté le 30-06-2009 à 11:27:36    

Bonjour tout le monde.
 
J'aurais besoin d'un (sacré) coup de main pour la création d'une ListBox.  
Je suis archi débutant en VB, et même en parcourant les forums et en demandant de l'aide à l'ami Google, je n'ai pas réussi à m'en sortir. Je ne comprends pas ou mettre quoi, dans userform, dans le workbook, quelle syntaxe employer....etc
 
Pour commencer je vais vous expliquer ce que je souhaite faire pour être sur que c'est bien d'une ListBox dont j'ai besoin.
 
En fait j'ai un fichier Excel dans lequel se trouve des données sous forme de tableau (jusque la normal pour excel )
 
L'une des colonnes de mon tableau se nomme "Chapitre" (dans cette colonne il y a plusieurs lignes qui correspondent à chaque chapitre, le nombre de ligne étant différent pour chaque chapitres).  
Et ce que je cherche à faire et de faire apparaitre une fenêtre à l'écran dans laquelle la liste des chapitres apparait et qui demande à l'utilisateur de faire un choix des chapitres (1 ou plusieurs) qu'il veut analyser.  
 
(Pour info par la suite une fois ce choix fait, il faudra que je trouve le moyen de me servir de ce qu'il à selectionné pour faire un total par chapitre de certaines colonnes et faire apparaitre ces différents totaux (par chapitre) sur un graphique).
 
Et je n'arrive pas du tout à mettre cela en place. Quelqu'un aurait-il la patience de m'expliquer la démarche à suivre s'il vous plait ?

Reply

Marsh Posté le 30-06-2009 à 11:27:36   

Reply

Marsh Posté le 30-06-2009 à 14:13:26    

Bon c'est pas gagné de le faire par écrit dans un forum.
Tu peux faire cela sans code,
D'abord click droit dans la barre de menu, pour afficher la barre de menu "Boite à outil Controles". Là tu cliques sur le petit symbole "zone de liste" (quand la souris passe dessus cela s'affiche)
Puis tu glisses sur ta feuille Excel pour créer la liste
Click droit sur la zone ainsi créée, et cliquer sur "Propriétés"
Tu as alors accès à toutes les caractéristiques de la zone de liste.
Tu peux accéder à 2 champs en particulier
* Linkedcell: adresse de la cellule dans laquelle tu veux le résultat
* ListFillRange: zone contenant les informations à mettre dans la liste
Et le tour est joué.

Reply

Marsh Posté le 30-06-2009 à 14:57:24    


Hi,
 
Ce n'est pas compliqué de le faire avec un userform, le tout est de bien procéder par étapes si tu débutes.
 
1. Crée un userform avec 3 (ou plus) combobox (plus pratiques que les listbox je trouve).
2. Lors de l'initialisation de l'userform, charge les données que tu veux dans les combobox.
3. Lors de la fermeture de l'userform, récupère les valeurs sélectionnées.
 
Tu peux te baser sur le code ci-dessous, pas super propre mais je l'ai fait à l'arrache, après c'est à toi d'optimiser :

Code :
  1. Dim Selec1, Selec2, Selec3 As String
  2. Dim NbLignes, a, b As Integer
  3. 'Lors du clic "OK", on enregistre les chapitres sélectionnés et on ferme l'Userform
  4. Sub CommandButton1_Click()
  5. Selec1 = EssaiListBox.ComboBox1
  6. Selec2 = EssaiListBox.ComboBox2
  7. Selec3 = EssaiListBox.ComboBox3
  8. Unload Me
  9. End Sub
  10. 'Annuler
  11. Private Sub CommandButton2_Click()
  12. Unload Me
  13. End Sub
  14. 'Lors du lancement de l'Userform, on charge les variables dans les combobox
  15. Private Sub UserForm_Initialize()
  16. 'Calcul à l'arrache du nombre de lignes dans le tableau
  17. NbLignes = Sheet1.Range("C65536" ).End(xlUp).Row
  18. 'On boucle sur chaque combobox
  19. For a = 1 To 3
  20. 'Et sur chaque chapitre dans le tableau
  21. For b = 4 To NbLignes
  22. 'Pour éviter les doublons on sélectionne la dernière ligne dans laquelle le chapitre est cité.
  23. If Sheet1.Range("C" & b) <> Sheet1.Range("C" & b + 1) Then
  24. NomChapitre = Sheet1.Range("C" & b)
  25. EssaiListBox.Controls("ComboBox" & a).AddItem NomChapitre
  26. End If
  27. Next b
  28. Next a
  29. End Sub


 
Tout ça dans l'UserForm.
 
Ce qui donne :
 
http://img218.imageshack.us/img218/6100/listbox.jpg
 


---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 01-07-2009 à 09:08:29    

Salut Ctplm,
 
Tout d'abord merci pour ta réponse, c'est vrai qu'elle me dégrossit un peu le travail déjà.
Pourtant j'ai encore quelques soucis. En fait j'aurais besoin de 5 selection, j'ai donc fait 5 ComboBox, et les données qui doivent figurer dans les listes des ComboBox sont les mêmes à chaque fois (elles sont située en colonne A de la ligne 5 à la ligne LignesTableau ), sachant qu'un tri préalable empeche qu'il y ai des doublons dans cette colonne
 
Ce qui se passe c'est que la boirte de dialogue s'ouvre mais y' rien dans les liste des ComboBox...
 
Voila ce que j'ai mis :
 
DANS USERFORM
 
 
Dim Selec1, Selec2, Selec3 As String
Dim NbLignes, a, b As Integer
 
 
'Lors du clic "OK", on enregistre les chapitres sélectionnés et on ferme l'Userform
 
Sub CommandButton1_Click()
 
Selec1 = EssaiListBox.ComboBox1
Selec2 = EssaiListBox.ComboBox2
Selec3 = EssaiListBox.ComboBox3
Selec4 = EssaiListBox.ComboBox4
Selec5 = EssaiListBox.ComboBox5
 
Unload Me
 
End Sub
 
'Annuler
Private Sub CommandButton2_Click()
 
Unload Me
 
End Sub
 
'Lors du lancement de l'Userform, on charge les variables dans les combobox
Private Sub UserForm1_Initialize()
 
'Calcul du nombre de lignes dans le tableau
LignesTableau = Sheets("Calcul" ).Application.CountA(Range("A1:A65536" )) + 4
 
 
'On boucle sur chaque combobox
For a = 1 To 5
'Et sur chaque chapitre dans le tableau
For b = 4 To LignesTableau
 
'Pour éviter les doublons on sélectionne la dernière ligne dans laquelle le chapitre est cité.
 
NomChapitre = Sheets("Calcul" ).Range("A" & b)
EssaiListBox.Controls("ComboBox" & a).AddItem NomChapitre
End If
 
Next b
Next a
 
End Sub
 
 
 
DANS UN MODULE  
 
Public Sub Lancement()
UserForm1.Show 1  
End Sub
 
 
pour lancer mon userform

Reply

Marsh Posté le 01-07-2009 à 20:08:20    


Hi,
 
Est-ce que tu as essayé d'exécuter ton code en mode pas à pas pour trouver le problème ?


---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 02-07-2009 à 14:05:17    

En fait je me met dans l'userForm,  
et je me place sur Private Sub UserForm_Initialize(), je fais F8 et la il m'affiche corréctement la boite de dialogue et tous les appuis de f8 suivant ne me font plus avancer pas à pas. Ca reste "bloqué" sur la fenêtre de l'userForm

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed