Dans un ListBox, ne garder que les lignes sélectionnées Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
n
nemo1664
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 24 avril 2017
Version d'Excel : 2016 FR

Message par nemo1664 » 19 février 2018, 10:57

Bonjour à toutes et à tous,

J'ai un ListBox alimenté par plusieurs feuilles (je ne peux pas utiliser AddItem), j'utilise donc
ListBox1.RowSource = "Feuil1!A1:D1000"
ou ListBox1.List = Range("A1:D1000").Value
Dans ce ListBox, je veux procéder à des sélections en cascade afin de ne conserver et pouvoir étudier que les lignes restantes (les colonnes sont triées par ailleurs pour regrouper les valeurs identiques).
Il s'agit donc de faire des suppressions multiples et progressives des lignes non sélectionnées. Je sais faire ligne à ligne par différentes méthodes, mais c'est bien bien trop long. Depuis 15 jours, recherches infructueuses sur Internet.
Dans l'exemple joint, j'utilise un code de MFerrand (merci à lui) qui me permet de supprimer ligne à ligne.

Merci d'avance à celle ou celui qui voudra bien se pencher sur le problème.

Cordialement
Classeur1.xlsm
(26.39 Kio) Téléchargé 21 fois
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'952
Appréciations reçues : 81
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2011

Message par Dan » 19 février 2018, 13:45

Bonjour

Votre fichier en retour.

J'ai désactivé la ligne Unload USF pour que vous voyez le résultat. Si vous la laissez, vous pouvez enlever ces trois lignes à la fin du code
With Feuil1
    dlg = .Range("A" & .Rows.Count).End(xlUp).Row
    ListBox1.List = .Range("A1:E" & dlg).Value
End With
Et la déclaration de variable, dim dlg as integer au début du code.

Si ok, et terminé, merci de cloturer le fil lors de votre réponse en cliquant sur le petit v en haut à droite

Cordialement
Classeur1.xlsm
(25.07 Kio) Téléchargé 31 fois
@+ Dan ;)
n
nemo1664
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 24 avril 2017
Version d'Excel : 2016 FR

Message par nemo1664 » 19 février 2018, 14:01

Bonjour et merci pour cette réponse rapide,

je crains de ne pas avoir été très clair dans ma demande.

Dans le fichier joint, le but serait de sélectionner par exemple toutes les personnes correspondant au caractère 4 de la deuxième colonne et ne garder que celles-là ; puis parmi les restantes de sélectionner toutes celles qui correspondent au suivi 3 de la 4ème colonne et ne garder que celles-là, puis toutes celles qui correspondent au lundi de la troisième colonne, etc...
Par ailleurs, le bouton supprimer devrait plutôt s'appeler sélectionner, puisqu'il ne faut garder que les lignes sélectionnées.

Vous avez bien compris le problème :
Dans le classeur que vous m'avez retourné, la sélection ne garde bien que le même nombre de lignes que celles sélectionnées, mais malheureusement, chez-moi, elles ne correspondent pas aux lignes sélectionnées.
n
nemo1664
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 24 avril 2017
Version d'Excel : 2016 FR

Message par nemo1664 » 19 février 2018, 16:54

Encore merci Dan,

Quand je veux appliquer le code proposé à mon projet, il se produit l'erreur "L'indice n'appartient pas à la sélection", sans indiquer un mot précis (le nom de la feuille est bien précisé avant).

Dans le projet, la Feuil1 récolte les données appelées par des ComboBox à partir de plusieurs autres feuilles.

Dans la pratique, le meilleur affichage dans le ListBox se fait en utilisant ListBox1.RowSource = "Feuil1!A1:E1000" et je sais que ça peut poser problème.
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'952
Appréciations reçues : 81
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2011

Message par Dan » 19 février 2018, 18:09

RE
Quand je veux appliquer le code proposé à mon projet, il se produit l'erreur "L'indice n'appartient pas à la sélection", sans indiquer un mot précis (le nom de la feuille est bien précisé avant).
Ce serait mieux de voir le vrai fichier...

Le message apparait à l'ouverture du fichier ?

Quel est le nom exact de la feuille où les données doivent être supprimées ?

Oubliez les Row.source, c'est mieux.
@+ Dan ;)
n
nemo1664
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 24 avril 2017
Version d'Excel : 2016 FR

Message par nemo1664 » 19 février 2018, 20:04

Le fichier original contient des données d'identité...

Je vais essayer de supprimer tout ce qui n'est pas indispensable et je l'envoie.

merci encore
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'952
Appréciations reçues : 81
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2011

Message par Dan » 19 février 2018, 21:42

Re

Pouvez-vous tester en remplaçant le code CommandButton1_Click dans l'USF par celui ci-dessous
Private Sub CommandButton1_Click()
Dim i As Integer, dlg As Integer
Application.ScreenUpdating = False
If ListBox1.ListIndex = -1 Then Exit Sub
For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
   If ListBox1.Selected(i - 1) = False Then Rows(i).Delete
Next i
With Feuil1
    dlg = .Range("A" & .Rows.Count).End(xlUp).Row
    ListBox1.List = .Range("A1:E" & dlg).Value
End With
Application.ScreenUpdating = True
'Unload UserForm1
End Sub
Cordialement
@+ Dan ;)
n
nemo1664
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 24 avril 2017
Version d'Excel : 2016 FR

Message par nemo1664 » 19 février 2018, 23:40

Bonsoir Dan

Ca marche parfaitement dans le fichier test !!! :) :) :)

Je vais essayer demain de le transposer dans mon projet.

Je vous tiendrai au courant

Merci encore

Bien cordialement
n
nemo1664
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 24 avril 2017
Version d'Excel : 2016 FR

Message par nemo1664 » 21 février 2018, 17:03

Bonjour Dan,

Ci-joint le UserForm concerné par mon projet et malheureusement l'affichage dans le ListBox ne se fait que si son on l'alimente avec ListBox1.RowSource et c'est bien dommage parce que si l'on sélectionne et supprime des lignes (vides dans le ListBox) on voit bien qu'elles disparaissent dans la feuille RAPPORTS.

Comment faire ?

Bien cordialement
Projet -Tri.xlsm
(113.99 Kio) Téléchargé 29 fois
n
nemo1664
Jeune membre
Jeune membre
Messages : 45
Inscrit le : 24 avril 2017
Version d'Excel : 2016 FR

Message par nemo1664 » 21 février 2018, 17:07

...Suite, je me suis rendu compte avec le fichier test qu'il était plus logique de supprimer ce qui est sélectionné et non pas l'inverse, surtout si la sélection dépasse les limites visibles du listbox.

Donc, s'il est possible de faire en sorte...
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message