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

XL 2019 Choisir colonnes non contiguës pour une listbox

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 !

François14850

XLDnaute Nouveau
Bonjour,

Une petite question qui devrait être simple pour vous mais pas pour moi 🤣🤣🤣🤣

Dans les tutos que je regarde pour faire un moteur de recherche via un formulaire, les listbox sont alimentées par des colonnes qui se suivent.

Dans mon cas, je n'aurais besoin que de 4 ou 5 colonnes sur 8.
VB:
Option Explicit

'Déclaration des variables

Dim i As Integer, col(), T As String, Cl As Integer

'Macros

Sub afficher_list()
col = Feuil6.Range("B5:I" & Feuil6.[B65000].End(xlUp).Row)
With Fmprio.ListBox1
.ColumnWidths = "70;200;60;50;50;50;50;50"
.ColumnCount = 8
.List = col

End With


End Sub

Que dois je changer pour n'avoir que les colonnes B, C, D, G et I ?????

Je bug la!!!!!!

Merci d'avance!!!!!
 
bonjour

regarde ce code que tu dois adapter pour mettre les bonnes données

VB:
Private Sub UserForm_Initialize()
    Dim i As Byte, j As Byte
    
    'Définit le nombre de colonnes dans la ListBox
    ListBox1.ColumnCount = 7
    
    '---
    'Définit la largeur des colonnes d'une ListBox:
    'Par défaut, la largeur des colonnes est de 72 points
    '(72 points = 1 pouce)
    ListBox1.ColumnWidths = "50;80;50;60;50;70;50"     
        '---
        'Il est aussi possible de définir la dimension des colonnes en centimètres
        'ListBox1.ColumnWidths = "2 cm; 1,5 cm ......"
        '---
    '---
    
    For i = 1 To 20
        'Ajoute une ligne et insère une donnée dans la colonne de gauche
        ListBox1.AddItem "Ligne" & i
        
        'Ajoute des données dans les colonnes de droite
        For j = 1 To 7
        ListBox1.List(ListBox1.ListCount - 1, j) = i & j 'au lieu de i&j, mettre la donnée que tu souhaites: '
        Next j
        
    Next i
End Sub
 
Bonjour à tous,🙂

il eut été de bon ton de fournir un fichier 😠

Le principe est de déplacer les colonnes utiles vers un nouveau tableau.
Deux constantes fixent les colonnes à retenir et leurs largeurs.

Testez ce code un peu commenté (associé au Userform) :
nota : bizarre autant qu'étrange : j'ai bien la balise CODE=vb et pourtant le code ne se colore pas 🥺
VB:
Private Sub UserForm_Initialize()
Const MesColonnes = "b;c;d;g;i"
Const MesLargeurs = "70;200;60;50;50"
Dim tablo, Tres, nbrColres&, i&, j&, colTexte, colNum&
   With Feuil6
      If .FilterMode Then .ShowAllData    'on ôte les critère de filtre le cas échéant
      tablo = .Range("b5:i" & .Cells(.Rows.Count, "b").End(xlUp).Row)   'on lit les valeurs colonnes B à I
   End With
   'on dimensionne donc le tablo résultat Tres aux seules colonnes utiles
   nbrColres = UBound(Split(MesColonnes, ";")) + 1
   ReDim Tres(1 To UBound(tablo), 1 To nbrColres)
   For Each colTexte In Split(MesColonnes, ";") 'pour chaque colonne de MesColonnes
      j = j + 1      'on incrémente la colonne du tableau Tres où copier les données de la colonne coltexte
      'on connait la lettre absolue "coltexte" de la colonne à copier dans la colonne j
      'il faut qu'on connaisse le numéro de cette colonne "colnum" dans le tableau tablo
      ' ex: la colonne B correspond à la deuxième colonne de Feuil6 (colonne n° 2)
      ' mais en fait à la colonne 1 de tablo (tablo prend ces valeurs à partir de la colonne B et non A)
      colNum = Cells(1, colTexte).Column - 1
      'on copie toutes les valeurs de la colonne colnum vers la colonne j de Tres
      For i = 1 To UBound(tablo): Tres(i, j) = tablo(i, colNum): Next i
   Next colTexte
   With Fmprio.ListBox1
      .ColumnCount = j
      .ColumnWidths = MesLargeurs
      .List = Tres      'affectation de Tres à la liste de listbox1
   End With
End Sub
 

Pièces jointes

Dernière édition:
est-ce que le code serait différent pour des tableaux structurés?
Bonjour @rlesouef, bienvenue sur XLD 🙂

Oui le code serait un tout petit peu différent.
Il faudrait connaitre le nom du tableau structuré
La constante désignant les colonnes utiles pourrait être exprimée en numéro de colonne au sein du tableau structuré et non en colonne de la feuille.
Plus besoin d'ôter un éventuel filtre et d'utiliser l'instruction End(xlUp).
Sinon après, cela ressemblerait au code initial.
Le mieux est de fournir un fichier exemple pour pouvoir travailler sur du concret.

On pourrait faire une fonction générique qui en entrée prendrait le tableau structuré ainsi que la liste des numéros de colonnes à retenir et en sortie un tableau de type array avec les données utiles.
Ce tableau pourrait ensuite être affecté à une listbox ou en faire autre chose.
 
- 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
Microsoft 365 ListBox TextBox
Réponses
5
Affichages
2 K
Réponses
68
Affichages
8 K
Réponses
8
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…