XL 2013 Lignes de résultats surnuméraires dans 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 !

kiko_23

XLDnaute Junior
Bonjour à tous,

Ayant été promptement aidé et éduqué hier sur un problème de tri, je me résous à vous soumettre un autre petit soucis qui m'ennuie depuis un moment, quelque chose me dit que pour les membres du forum cela devrait être une évidence :

Dans le fichier joint, un formulaire contenant une ComboBox permettant de chercher les occurrences d'un terme dans la feuille "table" et de les afficher dans une ListBox.
Mon problème : la ListBox affiche sous les résultats un nombre de lignes vides et sélectionnables dont je n'arrive pas à déterminer l'origine.

Merci d'avance pour votre aide et votre sagacité !
 

Pièces jointes

Bonsoir Sylvanu, merci pour ta contribution ! Je m'aperçois que j'aurais du être plus clair sur la finalité et la raison pour laquelle je ne passe pas par AddItem. En fait in fine cette listBox affichera les résultats combinés, le terme est peut-être impropre, de plusieurs sélections par ComboBox, 6 ou 7, et je ne sais pas comment le faire autrement qu'avec un tableau d'une façon qui semble "élégante" (sans ajouter 2 lignes de code pour chaque item).

Je joins mon fichier amendé dans ce sens, ce sera sûrement plus parlant. Désolé, j'aurais du présenter l'ensemble du fonctionnement souhaité dès le départ mais comme je n'avais pas percuté d'où venait le problème...
 

Pièces jointes

Dernière édition:
Re,

Si j'ai bien compris, il faut supprimer la définition de V en global et utiliser ceci
VB:
Sub filtre()
  Dim V() As String
  lastRow = F.Range("A" & F.Rows.Count).End(xlUp).Row
  r = 0
  For line = 1 To lastRow
    If (Range("A" & line) = ComboBox_type Or ComboBox_type = "") _
      And (Range("B" & line) = ComboBox_theme Or ComboBox_theme = "") Then
      For k = 0 To 1
        ReDim Preserve V(1, r)
        V(k, r) = Cells(line, k + 1).Value
      Next k
      r = r + 1
    End If
  Next line
    
  ListBox1.Clear
  ListBox1.List = Application.Transpose(V)
End Sub

A+
 
Re,

Si j'ai bien compris, il faut supprimer la définition de V en global et utiliser ceci
VB:
Sub filtre()
  Dim V() As String
  lastRow = F.Range("A" & F.Rows.Count).End(xlUp).Row
  r = 0
  For line = 1 To lastRow
    If (Range("A" & line) = ComboBox_type Or ComboBox_type = "") _
      And (Range("B" & line) = ComboBox_theme Or ComboBox_theme = "") Then
      For k = 0 To 1
        ReDim Preserve V(1, r)
        V(k, r) = Cells(line, k + 1).Value
      Next k
      r = r + 1
    End If
  Next line
   
  ListBox1.Clear
  ListBox1.List = Application.Transpose(V)
End Sub

A+
Je regarde ça tout de suite 🙏
 
Le 1er Combobox et le second doivent être traités indépendamment
Je n'ai rien compris à ce que vous voulez faire exactement 🤪 🙄
Ah ça je me doutais bien que je n'avais peut-être pas été d'une clarté cristalline, je m'en excuse platement, et je vais retenter une explication : je souhaiterais que lorsque l'on choisi un item dans une seconde ComboBox, la ListBox se rafraichisse avec uniquement les résultats qui correspondent aux deux items choisis.
 
Bonsoir.
Un objet ComboBoxLiées résout ça facilement.
Bonjour et merci Dranreb ! Seulement voilà, avec cette option, le second ComboBox utilisé n'affiche plus que les items communs, or ce que je souhaite c'est que tous les items restent présents dans les ComboBox et que seule la ListBox soit rafraichie avec les résultats (s'il y en a) présentant les 2 critères choisis.

La version initiale fait exactement ça, mon problème se situe exclusivement sur la présence de lignes vides et donc, pour ce que j'en comprends grace aux précédentes interventions, du redimensionnment du tableau "V".
 
S'il n'est pourtant pas utile de proposer une combinaison qui n'existe pas. Mais on peut taper du neuf en vue de l'ajouter.
Une exécution de la méthode CLs.Nettoyer permet d'effacer les ComboBox.
Il y a aussi une méthode Stopper qui garnit toutes les listes de tout ce qu'elles ont. Mais il faut ensuite exécuter Réactiver pour que la recherche opère à nouveau.
 
Dernière édition:
S'il n'est pourtant pas utile de proposer une combinaison qui n'existe pas. Mais on peut taper du neuf en vue de l'ajouter.
Une exécution de la méthode CLs.Nettoyer permet d'effacer les ComboBox.
Alors, jusqu'ici je trouvais que mon moteur de recherche multicritères était assez intuitif et efficace de cette façon mais je vais de fait à nouveau réfléchir à l'utilité de proposer "une combinaison qui n'existe pas". Ceci étant pour l'instant j'aurais vraiment aimé pouvoir "juste" me débarrasser de ces lignes vides en conservant le système actuel.

Concernant la suite de ton message, je dois reconnaitre que je ne vois pas ce que tu veux dire par "taper du neuf en vue de l'ajouter" ?
 
L'objet ComboBoxLiées peut apporter une aide précieuse pour ma mise à jour d'un tableau, avec Ajout, Modification. Suppression. Dans ce cas les ComboBox servent autant de champs de saisie d'éléments nouveaux que d'outil pour retrouver de l'existant.
 
- 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

Retour