XL 2019 supprimer ligne passant dans tableau

saimone

XLDnaute Nouveau
Bonjour,
A la suite de l'aide de plusieurs membres du forum, j'ai un peu travaillé l'un de mes fichiers.
Cependant, il m'est impossible de supprimer des lignes via une macro, la sélection est impossible.

J'aimerais:
-1 rendre la suppression possible (zone A jaune)
-2 piloter la suppression de ligne avec un bouton (macro module2 fonctionne avec le mot "12345" pour la sélection en dehors du tableau)
Je souhaiterais rendre cette suppression valable pour la sélection dans le tableau, avec le mot "supp" (zone B bleue)
-3 je souhaiterais remplir de couleur uniquement la case comprenant un 1, les 2 autres cellules doivent être blanches. (zone C verte)

Merci pour votre aide
 

Pièces jointes

  • teeesstt.xlsm
    12.3 KB · Affichages: 13
Solution
Salut,
La façon la plus simple c'est d'utiliser un tableau structuré. Ton code en sera plus que lisible.
VB:
Const Tablename = "Tableau1"
Public Sub DelRow()
Dim strTmp As String
    ' // La cellule active fait elle partie du tableau ?
    If Not ActiveCell.ListObject Is Nothing Then
        ' // Pour pouvoir effacer il faut plus d'une ligne
        If Range(Tablename).ListObject.ListRows.Count > 0 Then
            strTmp = Range(Tablename).ListObject.ListColumns("GivenName").DataBodyRange(ActiveCell.Row - 1).Value & _
                   " " & Range(Tablename).ListObject.ListColumns("Surname").DataBodyRange(ActiveCell.Row - 1).Value
            ' // On ne comptabilise pas la ligne d'entête...

Valtrase

XLDnaute Occasionnel
Salut,
La façon la plus simple c'est d'utiliser un tableau structuré. Ton code en sera plus que lisible.
VB:
Const Tablename = "Tableau1"
Public Sub DelRow()
Dim strTmp As String
    ' // La cellule active fait elle partie du tableau ?
    If Not ActiveCell.ListObject Is Nothing Then
        ' // Pour pouvoir effacer il faut plus d'une ligne
        If Range(Tablename).ListObject.ListRows.Count > 0 Then
            strTmp = Range(Tablename).ListObject.ListColumns("GivenName").DataBodyRange(ActiveCell.Row - 1).Value & _
                   " " & Range(Tablename).ListObject.ListColumns("Surname").DataBodyRange(ActiveCell.Row - 1).Value
            ' // On ne comptabilise pas la ligne d'entête
            Range(Tablename).ListObject.ListRows(ActiveCell.Row - 1).Delete
            MsgBox "L'entrée de : " & strTmp & " a bien été effacée"
            
        End If
    End If

End Sub

Sub TableClear()
    If MsgBox("Supprimer le tableau en entier ?") = vbYes Then
        If Not Range(Tablename).ListObject.DataBodyRange Is Nothing Then Range(Tablename).ListObject.DataBodyRange.Delete
    End If
End Sub
Pour que le code soit encore plus lisible on aurait pu utiliser des variables ListObject et ListRows
 

Pièces jointes

  • valtrase - test deleteRow.xlsm
    66.9 KB · Affichages: 8

Discussions similaires