Microsoft 365 ListBox / ListView et combobox avec choix de colonnes

RaVenSs

XLDnaute Nouveau
Bonjour,

Je me permet de venir soliciter votre aide pour résoudre un problème sur lequel je bloque depuis quelques jours.
Je suis en train de préparer quelques feuilles automatiser avec du vba pour ma société mais étant débutant je galère pas mal.

Mon problème actuel:
J'ai une liste de devis dont certains ont comme caractéristique un numéro de chantier dans la colonne 24.

Je souhaiterai faire un userform pour un bouton recherche devis liés à un chantier: en gros, j'aurai une combobox2 qui irait chercher les numéros de chantier (sachant qu'il y aura plusieurs devis par chantier) et à partir du choix de la combobox2, la liste des devis ayant cette caractéristique devrait sortir dans la listbox1 sachant que celle-ci doit afficher seulement quelques colonnes de mon tableau ListeDevis1.

voici le code actuel :

Option Compare Text
Dim f, Rng, ColVisu(), TBlBD()
Private Sub UserForm_Initialize()

Set f = Sheets("ListeDesDevis") ' Adapter
nomTableau = "ListeDevis1"
TBlBD = Range(nomTableau).Value
Set Rng = f.Range("A2:G" & f.[A65000].End(xlUp).Row) ' Adapter
ColVisu = Array(1, 2, 4, 6) ' Adapter
LargeurCol = Array(60, 50, 50, 100) ' Adapter
Me.ListBox1.ColumnCount = UBound(ColVisu) + 1
Me.ListBox1.ColumnWidths = Join(LargeurCol, ";")
Me.ListBox1.List = Application.Index(Rng, Evaluate("Row(1:" & Rng.Rows.Count & ")"), ColVisu)


'--- ComboBox
Set d = CreateObject("scripting.dictionary")
d("*") = ""
For i = 1 To UBound(TBlBD): d(TBlBD(i, 26)) = "": Next i
Me.ComboBox2.List = d.keys



End Sub


Private Sub ComboBox2_click()
ColRecherche = 26
clé = Me.ComboBox2: n = 0
Dim Tbl()
For i = 1 To UBound(TBlBD)
If TBlBD(i, ColRecherche) Like clé Then
n = n + 1: ReDim Preserve Tbl(1 To UBound(TBlBD, 2), 1 To n)
For k = 1 To UBound(TBlBD, 2): Tbl(k, n) = TBlBD(i, k): Next k
End If
Next i
If n > 0 Then Me.ListBox1.Column = Tbl Else Me.ListBox1.Clear
End Sub

Celui-ci ne fonctionne pas quand j'utilise la combobox :/
Pourriez vous m'aiguiller ?
Merci d'avance,
 

RaVenSs

XLDnaute Nouveau
1) Merci, j'ai hésité à déclarer ma feuille comme variable mais je pensais que ca marchait avec les coordonnées et le nom de la feuille. autant pour moi.

2) justement, je ne comprends pas trop la syntaxe et de là est mon erreur:
Pouvez vous m'expliquer comment se traduit la première et la deuxième ligne ? je pensais que la première ligne servait juste de "repère"
Set Item = ListView1.ListItems.Add(Text:=ListeDesDevis.Cells(i, 2))
Item.SubItems(1) = ListeDesDevis.Cells(i, 3)

3) Oui, je les supprime pour les mettre sur le forum mais autant faire des exemples plus "Dupont & Dupond" afin de ne pas avoir à les supprimer.

en tout cas, je ne vous remercie encore. Je vais essayer ce soir de passer avec la combobox.
 

vgendron

XLDnaute Barbatruc
Set Item = ListView1.ListItems.Add(Text:=ListeDesDevis.Cells(i, 2))
Item.SubItems(1) = ListeDesDevis.Cells(i, 3)

la première créé un item (1ere colonne)
les suivantes crééent les SUB items: colonnes suivantes
subitem(1) = colonne 2
 

RaVenSs

XLDnaute Nouveau
Décidément, je n'arrive a rien.
J'ai essayé à partir d'exemples de réaliser ma combobox mais d'une je n'ai plus les colonnes et la mise en forme souhaitées; mais avant toute chose, quand je dis que si la combobox est égale à la colonne où elle va chercher les valeurs, cela ne me ressort rien :/
c'est très compliqué cette partie. Comment puis je apprendre sans embêter tout le monde ici ?

Pourquoi je vois dans de nombreux exemple la fonction tri ?
merci d'avance,
 

Pièces jointes

  • DEVIS Liste 30.xlsm
    367.8 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
Hello
si tu es ici pour apprendre, alors, aucun souci, tu ne dérangera jamais personne ==> au contraire.. ca change des gens qui viennent pour une solution clé en main et basta...

pour la fonction tri: elle est souvent utilisée, car effectivement, c'est plus sympa et pratique d'avoir des listes triées==> dans ton combobox, il suffit d'appeler la fonction de tri avant de le charger ==> voir PJ

quand tu sélectionne un numéro chantier, la liste box est vide car il ne trouve pas le numéro au moment de recharger
dans le tableau "tbl", les numéros de chantier sont des nombres, alors que dans le combo, ce sont des chaines de caractères==> il suffit de transformer les nombres en Chaine avc le Cstr
 

Pièces jointes

  • DEVIS Liste 30.xlsm
    376 KB · Affichages: 22

Discussions similaires

Réponses
3
Affichages
533