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

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 :


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

RaVenSs

XLDnaute Nouveau
Le voici, je m'excuse d'ores et déjà de l'amateurisme du fichier/code.
Je pars de 0 et j'ai essayé en grattant des exemples par ci par là de réaliser ce fichier.
Je viens d'acheter un livre pour reprendre les bases du vba.

j'ai vu que pour la gestion des listes devis/clients/chantiers, je pourrai envisager une utilisation d'une base de donnée Access. Une prochaine étape ?
 

Pièces jointes

  • DEVIS Liste 22 + - Forum.xlsm
    377.5 KB · Affichages: 29

vgendron

XLDnaute Barbatruc
essaie avec ce code
apparemment, tu te trompais de colonne: 26 au lieu de 24
et tu remplissais ton tableau avec TOUTES les colonnes, mais ta listbox ne possède que 4 colonnes

VB:
Option Compare Text
Dim f, Rng, ColVisu(), TBlBD()
Private Sub UserForm_Initialize()
Me.ComboBox2.Clear
Me.ListBox1.Clear
Set f = Sheets("ListeDesDevis")                          ' Adapter
nomTableau = "ListeDevis1"
TBlBD = Range(nomTableau).Value
Set Rng = f.Range("A2:G" & f.Range("A" & Rows.Count).End(xlUp).Row) ' Adapter
ColVisu = Array(1, 2, 4, 6)                 ' Adapter
LargeurCol = Array(150, 150, 150, 100) ' Adapter

Me.ListBox1.ColumnCount = UBound(ColVisu) + 1
Me.ListBox1.ColumnWidths = Join(LargeurCol, ";")
Me.ListBox1.List = Application.Index(Rng, Evaluate("Row(2:" & Rng.Rows.Count & ")"), ColVisu)
 
    '--- ComboBox
Set d = CreateObject("scripting.dictionary")

'd("*") = ""
For i = 2 To UBound(TBlBD, 1)
    If Not d.exists(TBlBD(i, 24)) Then
        d.Add TBlBD(i, 24), ""
    End If
Next i
Me.ComboBox2.List = d.keys


End Sub


Private Sub ComboBox2_click()
Me.ListBox1.Clear
ColRecherche = 24
clé = Me.ComboBox2: n = 0
Dim Tbl()
For i = 1 To UBound(TBlBD)
    If TBlBD(i, ColRecherche) Like clé Then
        Me.ListBox1.AddItem TBlBD(i, 1)
        Me.ListBox1.List(ListBox1.ListCount - 1, 1) = TBlBD(i, 2)
        Me.ListBox1.List(ListBox1.ListCount - 1, 2) = TBlBD(i, 4)
        Me.ListBox1.List(ListBox1.ListCount - 1, 3) = TBlBD(i, 6)
    End If
Next i
End Sub
 

RaVenSs

XLDnaute Nouveau
oh parfait, cela à l'air de fonctionner! je ne savais pas la tournure pour la combobox, je vous en remercie.

pouvez vous m'expliquer pourquoi mettre ces deux lignes en début ? est ce une sorte de reset au cas ou ?
Me.ComboBox2.Clear
Me.ListBox1.Clear

Je vais essayer de mettre le format monétaire et les tailles de colonne.s
 

vgendron

XLDnaute Barbatruc
oui ,c'est pour vider les controls,
je ne comprenais pas pourquoi à l'intialisation, le listbox avait déjà des infos alors qu'on a pas encore sélectionné de numéro de chantier dans le combo
du coup, j'ai mis ces .clear.. qui ne changeaient rien
la ligne en cause est celle ci
VB:
Me.ListBox1.List = Application.Index(Rng, Evaluate("Row(2:" & Rng.Rows.Count & ")"), ColVisu)
il vaut mieux la supprimer
 

RaVenSs

XLDnaute Nouveau
C'est noté pour la suppression de la ligne et les explications. je vous en remercie.

Quand je regarde un peu, apparemment avec listview, il est possible de mettre une mise en forme de couleurs selon une donnée (accepté/refusé/en attente par exemple). Avec ListBox est-ce possible ?

Si non, puis-je adapter ce code pour une listview, où n'est ce pas possible ? je ne comprend pas trop la différence entre ceux deux éléments.
 

RaVenSs

XLDnaute Nouveau
Merci, il y a t'il des limites avec listview contrairement à listbox ? si non, il est plus intéressant d'utiliser listview ?
je vais essayer de "traduire"en listview comme entrainement ce soir. Puis je vous embêter ici si jamais je coince ?
 

vgendron

XLDnaute Barbatruc
quelque chose qui m'a beaucoup embete lorsque j'ai utilisé les controls ListView, TreeView et Flex dans mon ancien boulot. c'est que ces controls sont apparus avec Common Controls Visual Basic 6.0 qui n'était pas présent sur tous les PC..
sinon.. je vois pas trop. mais comme tout, il y a une limitation lorsqu'on tombe dessus :-D
n'hésite pas à poster ici tes questions==> ca peut toujours servir à un maximum de gens, et il y a toujours des gens plus compétants pour y répondre.
 

RaVenSs

XLDnaute Nouveau
Rebonjour,

je commence à déclarer ma listview1. Je suis parti à partir d'exemples.
Mais il m'indique qu'il manque un objet, à priori au niveau de la dernière ligne

 

Pièces jointes

  • DEVIS Liste 27 forum.xlsm
    377.4 KB · Affichages: 21

RaVenSs

XLDnaute Nouveau
j'ai indiqué les commentaires afin de me souvenir pour une prochaine listview

Dans l'exemple, la ligne se met en rouge si le montant est supérieur à 1000 euros. Moi j'aimerai que la ligne se mette en rouge si le statut du devis est "à facturer", je ne sais pas si j'ai bien mis le critère.
 

vgendron

XLDnaute Barbatruc
en retour ton fichier corrigé

1) ListeDesDevis n'était pas déclaré==> j'ai ajouté une variable publique qui est définie (Set ...) dans l'initialize
2) tu as déclaré 6 entetes==>6 colonnes mais tu essaies d'en remplir 7..
3) pour voir quelque chose dans la listview, il faut au moins avoir quelques datas dans la feuille
 

Pièces jointes

  • DEVIS Liste 27 forum.xlsm
    376.8 KB · Affichages: 61

Discussions similaires

Réponses
3
Affichages
736
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…