XL 2016 Supprimer une ou plusieurs lignes sélectionnées dans un tableau

badraaliou4

XLDnaute Occasionnel
Bonsoir ici,

Je cherche un code qui me permet de supprimer une ou plusieurs lignes sélectionnées dans un tableau.
le code que j'ai me permet de supprimer uniquement une ligne sélectionnée.
merci pour votre aide..
ci-joint mon ficher.
VB:
Sub SuprimerLigneVente()
If ActiveCell.Row <= 28 Then
    MsgBox "    Impossible de supprimer cette ligne.", , "            SUPPRESSION DE LIGNE"
Else
    If MsgBox("Voulez-vous supprimer la ligne selectionée ?", vbYesNo, "     SUPPRESSION DE LIGNE") = vbYes Then
        Set lot = ActiveCell.ListObject
        If lot Is Nothing Then Exit Sub
        l = ActiveCell.Row - lot.HeaderRowRange.Row
        lot.ListRows(l).delete
    End If
End If
End Sub
 

Pièces jointes

  • Supprimer lignes selectionnées.xlsb
    15.4 KB · Affichages: 28

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une version v3 qui devrait être plus rapide s'il y a un grand nombre de lignes dans le tableau (on évite les "Intersect(...) qui sont chronophages).

EDIT : la première version v3 déposé ici n'était pas la bonne. Je viens de la remplacer par la bonne
 

Pièces jointes

  • badraaliou4- Supprimer lignes selectionnées- v3.xlsm
    23.1 KB · Affichages: 12
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Si je me base sur le message#1
(et en me basant sur le fichier de mapomme - oui je peux l'ouvrir ;))
Et puisque que nous sommes en présence d'un ListObject
VB:
Sub SupprimerLignes()
Dim lObj As ListObject
Set lObj = ActiveSheet.ListObjects("Tableau1")
If Not Intersect(ActiveCell, lObj.DataBodyRange) Is Nothing Then
If Selection.Rows.Count > 1 Then
lObj.DataBodyRange.Delete
Else
lObj.ListRows(Selection.Row - 3).Delete
'adapter le -3 selon la disposition du tableau sur la feuille
End If
End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir mapomme

Comme je l'ai dit, je me suis basé sur le message#1
Je cherche un code qui me permet de supprimer une ou plusieurs lignes sélectionnées dans un tableau.
J'ai testé sur ta PJ (demande à ma poire ;))
Si je sélectionne une cellule sur une seule ligne
(cette ligne est supprimée)
Si je sélectionne plusieurs lignes, c'est le DataBodyRange qui est supprimé.
Si je suis hors du tableau ou sur la ligne d'entête, le code beugue.

NB: En tout cas, tu remarqueras que 2^8 n'est plus qu'un souvenir ;)
 

Staple1600

XLDnaute Barbatruc
Re

Une version moins radicale (et qui masque vilainement l'erreur potentielle)
VB:
Sub EffacerTaBleau_ou_Supprimer_Ligne()
Dim lObj As ListObject
Set lObj = ActiveSheet.ListObjects("Tableau1")
On Error Resume Next
If Not Intersect(ActiveCell, lObj.DataBodyRange) Is Nothing Then
If Selection.Rows.Count > 1 Then
lObj.DataBodyRange.ClearContents
Else
lObj.ListRows(Selection.Row - 3).Delete
'adapter le -3 selon la disposition du tableau sur la feuille
End If
End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Re,

=>mapomme
C'était la bonne, non? ;)
Il y avait juste un petit ' de trop
Range(Cells(t(i), col1), Cells(t(i), col2)).Select '.Delete xlShiftUp
NB: Pourquoi tu n'utilises pas la syntaxe VBA qu'offre le ListObject?
(Ce n'est qu'une question, et non point une critique)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
NB: Pourquoi tu n'utilises pas la syntaxe VBA qu'offre le ListObject?
  • je n'en ai pas besoin
  • ça rajoute du verbiage inutile (selon ma pomme)
  • pour la méthode employée, il faut absolument supprimer les lignes à partir du bas vers le haut, la méthode par numéro de ligne me semble la plus appropriée et surtout la plus simple
  • la méthode sans listobject est aussi adaptée à n'importe quelle plage de cellule même non "structurée" (il doit suffire de nommer cette plage "tableau1")
C'est peut-être rétrograde mais tant pis...

👉 Ça m'intéresserait de savoir comment faire en utilisant les méthodes et propriétés de ListObject.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir mapomme

Virons le verbiage, virons l'inutile
Faisons tabula rasa
On parle ici de lignes sélectionnées, non ?
Alors si elles sont sélectionnées, clic-droit et Supprimer
(Si je sélectionne strictement des cellules du tableau, le menu contextuel offre plus de choix)
Quel est le bénéfice de passer ici par VBA?
On est des bonhommes ou pas ?!?
On supprime les lignes à la main (et sans gants même l'hiver)
 

Discussions similaires