Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1498 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Créer une ListBox (débutant)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Créer une ListBox (débutant)

n°1900505
Tomuscz
Posté le 30-06-2009 à 11:27:36  profilanswer
 

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 ?

mood
Publicité
Posté le 30-06-2009 à 11:27:36  profilanswer
 

n°1900566
produvba
Posté le 30-06-2009 à 14:13:26  profilanswer
 

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é.

n°1900588
Ctplm
Posté le 30-06-2009 à 14:57:24  profilanswer
 


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."
n°1900866
Tomuscz
Posté le 01-07-2009 à 09:08:29  profilanswer
 

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

n°1901284
Ctplm
Posté le 01-07-2009 à 20:08:20  profilanswer
 


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."
n°1901549
Tomuscz
Posté le 02-07-2009 à 14:05:17  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Créer une ListBox (débutant)

 

Sujets relatifs
Sessions problème de débutantdebutant en programation besoin d'aide
[VBA] liste deroulante dans ComboBox : comment creer liste ??[C#] Questions de débutant...
Creer un fichier à partir de phpCréer calculs à trou donnant résultat
[HTML] creer un message d'erreur[Débutant][OpenGL ES] Problème affichage textures
Access : créer une condition IfAIDE créer une page en INTRANET
Plus de sujets relatifs à : Créer une ListBox (débutant)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR