XL 2019 Choisir colonnes non contiguës pour une listbox

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!!!!!
 

vgendron

XLDnaute Barbatruc
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
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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

  • François14850- Choisir colonne- v1.xlsm
    28.4 KB · Affichages: 5
Dernière édition:

François14850

XLDnaute Nouveau
Bonjour Mapomme, effectivement, j'ai oublié de mettre mon fichier en pièce jointe.

Je viens d'appliquer ta modification qui fonctionne à merveille :)

Tu trouveras mon fichier en PJ cette fois!

Encore merci!
 

Pièces jointes

  • Gestion pièces détachées AfB Vbêta.xlsm
    364.5 KB · Affichages: 4

mapomme

XLDnaute Barbatruc
Supporter XLD
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.
 

Discussions similaires

Réponses
6
Affichages
341

Statistiques des forums

Discussions
311 721
Messages
2 081 927
Membres
101 842
dernier inscrit
seb0390