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

XL 2016 listbox supression multi-ligne

sengahon

XLDnaute Nouveau
Bonjour à tous,

je viens vers vous car je ne trouve pas la solution à mon problème.
J’essaie de mettre en place une suppression multi-ligne mais en-vain.

Voici mon code :

Dim I As Integer
With ListBox1
If .ListIndex = -1 Then Exit Sub
For I = .ListCount - 1 To 0 Step -1
If .Selected(I) = True Then
Sheets("Input").ListObjects(1).ListRows(ListBox1.List(I, 0)).Delete
.Selected(I) = False
End If
Next I
End With

Le problème est que la boucle se termine une fois qu'il supprime la 1ére ligne (du bas ).
J'ai donc essayé de vérifier ma boucle en remplaçant ma ligne de suppression par un msgbox qui m'indique à chaque fois la ligne sélectionnée.
Et là tout fonctionne correctement.

Je vous remercie d'avance.
 

Bebere

XLDnaute Barbatruc
bonjour à tous
bienvenue
Qu'y a t'il dans la listbox une valeur de cellule ou un index de ligne
si c'est une valeur il faut faire une comparaison.peut il y avoir le mêmes valeurs dans les cellules
 

sousou

XLDnaute Barbatruc
bonjour
lorsque tu supprime une ligne ton tableau change!
Pour t'aider, voici un petit module qui te montre une solution en utilisant union de range

macro deb()
 

Pièces jointes

  • test tableau.xlsm
    21.8 KB · Affichages: 13

sengahon

XLDnaute Nouveau
Bonjour et merci de vos réponses.

Bebere,
Ma listbox pointe une copie d’un tableau (avec le philtre avancée) Excel qui contient différentes colonnes. Mais les lignes sont indexée
C'est pour cela que je lui demande de pointer la colonne 0 qui contient un ID unique.

Sousou
Merci pour ton fichier. Ton code fonctionne, mais quand je commence à filtrer ma listbox ça ne fonctionne plus.
aurais tu une idée stp?
 

Bebere

XLDnaute Barbatruc
bonsoir
comme suit le code fonctionne
VB:
Sub sup()

    With Sheets(1).ListObjects("tableau1")
        For n = UserForm1.ListBox1.ListCount - 1 To 0 Step -1
            If UserForm1.ListBox1.Selected(n) = True Then

                If IsEmpty(Z) = True Then
                    Set Z = .ListRows(n + 1).Range
                Else
                    Set Z = Union(Z, .ListRows(n + 1).Range)
                End If
                UserForm1.ListBox1.RemoveItem n
            End If
        Next
    End With
    Z.Delete

End Sub
listbox.listcount=5 index listbox de 0 à 4
 

sengahon

XLDnaute Nouveau
bonjour,

Sousou, ton code fonctionne dans mon dossier également. Mais quand je commence à filtrer ma listbox puis à sélectionnés les lignes que je veux supprimer, il me supprime les mauvaise lignes.

Bebeber,

J'ai essayer la version de ton code mais il ne fonctionne pas. j'ai une erreur non répertorier sur la ligne suivante.
UserForm1.ListBox1.RemoveItem n

Ps : Bien-sur j'ai adapter le nom UserForm1 au mien
 

sengahon

XLDnaute Nouveau
Je l'ai déjà fait et c'est quasiment la même chose. Mais dans celui de souosu il n'y a pas la ligne "UserForm1.ListBox1.RemoveItem n"

Pourquoi marque tu ceci "listbox.listcount=5 index listbox de 0 à 4 " ?
 

Discussions similaires

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