XL 2010 VBA EXCEL : Ajout des colonnes sur une LISTBOX

  • Initiateur de la discussion Initiateur de la discussion Aragon10
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Aragon10

XLDnaute Occasionnel
Bonjour le Forum,

je voudrais ajouter des colonnes sur ma Listbox. Actuellement lorsque je clique sur un nom dans le combobox il m'affiche uniquement les données existantes sur la colonne 2. existe t-il une solution pour afficher les données de la colonne 3 et 4. (ci-dessous l'exemple).


Merci pour votre aide.
 
Bonjour Aragon, bonjour le forum,

J'ai modifié ton code en utilisant une méthode plus rapide sur les gros tableaux. Il devrait s'adapter à ton fichier original sans difficulté.

J'ai rajouté à la fin en double-cliquant sur un élément de la ListBox1 : la première cellule de la ligne de celui-ci est sélectionnée ou bien, cela se fait automatiquement si la ListBox1 ne contient qu'un seul élément...

Le nouveau code (qui doit remplacer l'ancien dans son intégralité) :

VB:
Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private NL As Integer 'déclare la variable NL (Nombre de Lignes)
Private NC As Byte 'déclare la variable NC (Nombre de Colonnes)

Private Sub UserForm_Initialize() 'a l'initialisation de l'UserForm
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)

Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des Valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
NC = UBound(TV, 2) 'définit le nombre de colonnes NC du tableau des valeurs TV
Me.ListBox1.ColumnCount = NC + 1 'définit le nombre de colonne de la Listbox1 (une de plus que NC)
Me.ListBox1.ColumnWidths = "0" 'masque la première colonne de la ListBox1
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To NL 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = "" 'alimente le dictionnaire avec la donnée en colonne 1 de TV
Next I 'prochaine ligne de la boucle
ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste  des éléments du dictionnaire D sans doublon
End Sub

Private Sub ComboBox1_Click() 'au clic dans la ComboBox1
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim LI As Integer 'déclare la variable LI(LIgne)

Me.ListBox1.Clear 'vide la ListBox1
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    If TV(I, 1) = Me.ComboBox1.Value Then 'condition : si la données ligne I colonne 1 de TV est égale à la valeur de la CommboBox1
        ReDim Preserve TL(1 To NC + 1, 1 To K) 'redimensionne le tableau des lignes TL (autant de lignes plus une que TV a de colonnes, K colonnes)
        TL(1, K) = I 'récupère dans la ligne 1 de TL le numéro de ligne (cette donnée sera masquée)
        For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
            TL(J + 1, K) = TV(I, J) 'récupère dans la ligne J + 1 de TL la donnée en colonne J de TV (= Transposition)
        Next J 'prochaine colonne de la boucle 2
        K = K + 1 'incrémente K (ajoute une colonne au tableau de lignes TL)
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
If K > 1 Then Me.ListBox1.Column = TL 'si K est supérierure à 1, alimente la ListBox1
If Me.ListBox1.ListCount = 1 Then 'condition : si la ListBox1 ne contien qu'une seule valeur
    LI = Me.ListBox1.Column(0, 0) 'définit la Ligne LI (récupérée dans la colonne masquée de la ListBox1)
    O.Activate 'active l'onglet O
    O.Cells(LI, 1).Select 'sélectionne la cellule ligne LI colonne 1 de l'onglet O
    Unload Me 'vide et ferme l'userForm en cours
End If 'fin de la condition
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'au double-clic dans un élément de la ListBox1
Dim LI As Integer 'déclare la variable LI(LIgne)

LI = Me.ListBox1.Column(0, Me.ListBox1.ListIndex) 'définit la variable LI (récupérée dans la colonne masquée de la ListBox1)
O.Activate 'actie l onglet O
O.Cells(LI, 1).Select 'sélectionne la cellule ligne LI colonne 1 de l'onglet O
Unload Me 'vide et ferme l'userForm en cours
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
286
Réponses
16
Affichages
951
Retour