XL 2019 Affichage plusieurs colonne dans Listbox avec tri Combobox

Jacquie

XLDnaute Nouveau
Bonjour à tous,

je fais appel aux aguerris du VBA dans l'espoir de trouver une solution à mon problème.
Dans mon fichier joint que j'ai eu grâce à ce forum, j'ai actuellement un Userform qui me sert à filtrer un tableau qui se trouve dans ma feuille nommée "Données" et à récupérer dans ma "Feuil1" la sélection choisi.
Jusqu'ici tout fonctionne parfaitement.

Je voudrais pouvoir afficher dans ma ListBox1 les colonnes "dimensions, poids.." que j'ai nommé au dessus de celle-ci et trier la colonne choisi avec ma ComboBox1 du plus grand au plus petit.
A savoir que le contenu de ma liste de donnée peux être modifié et complété mais le nombre de colonne restera le même.

Quelqu'un a t-il une idée ?

Merci par avance pour votre aide.
 

Pièces jointes

  • Essai liste avec tri.xlsm
    41 KB · Affichages: 24
Dernière édition:

patricktoulon

XLDnaute Barbatruc
ben en fait tout le monde a la salle manie d'utiliser le dico pour trier les doublons d'un tablo d'une colonne
alors qu'il est possible de trier le tableau x colonne avec un dico
le dico sert simplement de controleur de la colonne en paramètre
tiens un exemple comme ça vite fait
un userform , une listbox , un bouton et un tableau structuré nommé"Tableau1" dans une feuille
et voila le tour est joué tu a ta liste sans doublons dans la colonne 1
VB:
Private Sub CommandButton1_Click()
    Dim a&, i&, dico As Object, tbl(), tablo
    tablo = Range("tableau1")
    Set dico = CreateObject("scripting.dictionary")
    For i = 1 To UBound(tablo)
        If Not dico.exists(tablo(i, 1)) Then
            dico(tablo(i, 1)) = ""    ' le dico sert juste a controler on ne se sert pas de son .keys ou .items
            a = a + 1: ReDim Preserve tbl(1 To UBound(tablo, 2), 1 To a)
            For c = 1 To UBound(tablo, 2): tbl(c, a) = tablo(i, c): Next
        End If
    Next
    With ListBox1
        .ColumnCount = UBound(tablo)
        .Column = tbl
    End With
End Sub
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
de bon matin le lundi à la fraîche je reprends cet userform
j'ouvre le module je fait un CTRL+A et touche Suppr
voila c'est propre
je l'arrange un peu (il me plait pas tout gris clair:D🤣
je transforme cette plage en tableau structuré ( la moindre des choses sur une mini BDD comme ça )
j'ajoute une colonne (ligne) comme ça si exploitation plus approfondi de la la listproduit on a pas a aller chercher l'index de ligne si on a filtré au par avant

bon alors
les 3 OpTionbutton liste dans la listbox la liste complete selon l'Optionbutton
ils liste en même temps sans doublons les types dans la listbox type

le click sur list type va filtrer les type dans la listbox (listproduit)

et enfin
la combo tri va trier la listbox(listproduit ) en fonction de la colonne choisi dedans

le bouton ok renvoie la ligne sélectionnée et transposée dans la feuille "feuil1"

et voila
demo.gif


;)
 

Pièces jointes

  • Essai liste avec tri patricktoulon V°1.xlsm
    52.2 KB · Affichages: 14

Jacquie

XLDnaute Nouveau
Bonjour patricktoulon,

Merci énormément, ç'est exactement ce que je cherchais.
Juste quelque réglage à faire si vous voulez bien :

- les valeurs renvoyées dans ma Feuil1 sont je pense au format texte car j'utilise ces valeurs dans des formules comme par exemple "cellule C11 + 10" et le résultat n'apparait pas.
- Il y a un petit bug lorsque je fais cette manip par exemple : clic sur Définir->Vis->Tête H, puis tri par poids ->je change par "Ecrou" puis tri par dimensions. une fenêtre d'erreur s'affiche :
1635159028756.png

- Comment régler la largeur de la première colonne pour lire la référence en entier (je n'ai pas le mot rondelle en entier par exemple).
- je souhaiterais si possible que les cellules ne s'efface pas lorsque je clic sur Définir et que l'Userform se ferme lorsque je clic sur Ok.

Merci par avance.
Jacquie
 

Jacquie

XLDnaute Nouveau
une énorme merci Patricktoulon, heureusement que des gens comme vous sont là pour des gens comme moi!

Je n'y connais pas grand chose en VBA mais j'ai ajoutée " Unload Me" pour quitter la fenêtre après avoir cliquée sur OK et j'ai enlevée "[C8:C15].ClearContents" pour ne pas que les cellules s’effacent à l'ouverture.

Juste une chose que je n'arrive pas à faire : agrandir la première colonne pour lire "rondelle" en entier.
Quel est la démarche?

Bon après midi et bonne continuation! :)
Jacquie
 

Jacquie

XLDnaute Nouveau
Au risque d'abuser de votre sympathie, que dois je rajouter au code de mon bouton "Ok" pour éviter de générer un message d'erreur si j'ai oublié de sélectionner un des 3 paramètres?
par exemple si je sélectionne "écrou" et ma ligne " écrou borgne ..." sans cliquer sur type "borgne" avant.
Y a t-il possibilité d'afficher un message "Tous les paramètres ne sont pas remplis"?
 

Pièces jointes

  • SOLUTION liste avec tri patricktoulon V°1-1.xlsm
    50.9 KB · Affichages: 13

patricktoulon

XLDnaute Barbatruc
re
a mettre dans l'event du bouton avant le reste du code
VB:
if truc="" then  msgbox "tete plate!! tu a oublié de choisir un TRUC":exit sub

ou bien les deux
Code:
if truc="" or le_type="" then msgbox "double tete plate!! tu a oublié de choisir un TRUC":exit sub

ou bien les 3 avec la condition sélection effective dans la liste
Code:
if truc="" or le_type="" or listProduit.listindex=-1 then msgbox "triple tete plate!! tu a oublié de choisir un TRUC":exit sub
 

Discussions similaires

Réponses
10
Affichages
1 K

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh