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()
 

Fichiers joints

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?
 

sousou

XLDnaute Barbatruc
Mon code fonctionne dans mon fichier?
il ne fonctionne pas dans le tien?
Sans le fichier!
 
Dernière édition:

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
 

Bebere

XLDnaute Barbatruc
bonjour
compare le code de bebere (est ok içi) et celui de sousou
listbox.listcount=5 index listbox de 0 à 4
 

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 " ?
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas