Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Afficher, dans une listbox, une plage après filtre.

HD7448

XLDnaute Nouveau
Bonjour à tous,

J'ai une BDD qui regroupe tout les infos relatives à des agences. Dans la BDD en colonne "A" il y a la référence (numéro) en "B" le nom de l'agence et plus loin en "H" le nom de la région.

Ma feuille principale (ROOT) a un bouton qui mène à la feuille (Map). Sur cette feuille Map, il y a un carte où tous les région sont des boutons que l'on peut cliquer. Lorsqu'on clique sur une région, cela lance une macro (rangée dans un module) et qui fait un filtre sur la BDD qui va masquer toutes les régions différente que celle sélectionnée en cliquant sur la carte. À la fin de la macro, s'ouvre un UserForm qui aura pour but de consulter, modifier ou supprimer les infos relatives au agence.

À l'initialisation du UserForm, il y a une ListBox1, en 2 colonnes (Ref et nom d'agence) qui dois s'alimenter avec la BDD. La ListBox1 est bien alimentée, mais avec toutes les agence toutes régions confondues et pas uniquement avec les agences visible après le filtre.

Comment faire pour alimenter la ListBox1 uniquement avec les données visibles de la BDD? J'ai, dans mon code, une variante "Dim Tableau_plage_listbox1 As Variant" que je n'arrive pas à setter et je ne sais même pas si cette variante est obligatoire.

Soyez indulgent, ca ne fait qu'une semaine que j'ai les pieds dans le VBA.

Merci d'avance

Private Sub UserForm_Initialize()

Dim onglet As Worksheet
Dim derniere_ligne As Long
Dim Tableau_plage_listbox1 As Variant
Dim arr_data() As Variant

Set onglet = Worksheets(3)

derniere_ligne = onglet.Cells(Rows.Count, 1).End(xlUp).Row

If derniere_ligne > 1 Then

arr_data = onglet.Range(onglet.Cells(2, 1), onglet.Cells(derniere_ligne, 2))

ListBox1.ColumnCount = 2
frmconsmodsup.ListBox1.ColumnWidths = "20;250"
ListBox1.List = arr_data

End If

End Sub
 
Solution
Voici la solution qui m'a était donnée.

Private Sub UserForm_Initialize()

Dim onglet As Worksheet
Dim derniere_ligne As Long
Dim Tableau_plage_listbox1 As Variant
Dim arr_data As Range Dim area As Range Dim i&

Set onglet = Worksheets(3)
derniere_ligne = onglet.Cells(Rows.Count, 1).End(xlUp).Row If derniere_ligne > 1 Then
Set arr_data = onglet.Range(onglet.Cells(2, 1), onglet.Cells(derniere_ligne, 2)).SpecialCells(xlVisible).Cells
With ListBox1 .ColumnCount = 2 .ColumnWidths = "20;250"
For Each area In arr_data.Areas
For i = 1 To area.Rows.Count
.AddItem area.Cells(i, 1): .List(.ListCount - 1, 1) = area.Cells(i, 2)...

HD7448

XLDnaute Nouveau
Voici la solution qui m'a était donnée.

Private Sub UserForm_Initialize()

Dim onglet As Worksheet
Dim derniere_ligne As Long
Dim Tableau_plage_listbox1 As Variant
Dim arr_data As Range Dim area As Range Dim i&

Set onglet = Worksheets(3)
derniere_ligne = onglet.Cells(Rows.Count, 1).End(xlUp).Row If derniere_ligne > 1 Then
Set arr_data = onglet.Range(onglet.Cells(2, 1), onglet.Cells(derniere_ligne, 2)).SpecialCells(xlVisible).Cells
With ListBox1 .ColumnCount = 2 .ColumnWidths = "20;250"
For Each area In arr_data.Areas
For i = 1 To area.Rows.Count
.AddItem area.Cells(i, 1): .List(.ListCount - 1, 1) = area.Cells(i, 2)
Next
Next
End With
End If
End Sub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…