Erreur 1004 pour supprimer un ligne

Bonjour a tous,

j'ai crée un tableau avec plusieurs colonnes; La saisie de celui-ci fonctionne

Private Sub Worksheet_SelectionChange(ByVal target As Range)

'**************************
'*Déclaration de variables*
'**************************

    Dim tbl As ListObject 'Déclaration de la variable tbl en object
    Set tbl = Me.ListObjects("Tableau1") 'Affectation de l'object tableau1 à la variable tbl

    Dim ligne As ListRow 'Délaration de la variable ligne en listRow (représente toute les lignes)

    If [Tableau1].Item(1, 1) = "" Then GoTo ErrorHandler
    'On Error GoTo ErrorHandler
        If Not Intersect(target, tbl.DataBodyRange) Is Nothing Then
                For Each ligne In tbl.ListRows 'Pour chaque ligne dans le tableau
                'On Error Resume Next
                    If Not Intersect(target, ligne.Range) Is Nothing Then  'Vérifier si la plage target est dans la ligne
                        With UserForm1 'Remplir le UserForm avec les valeurs de la ligne
                            .Tag = ligne.Index 'Stocker l'index de la ligne dans le Tag
                            .TextBox1.Value = ligne.Range.Cells(1, 1).Value
                            .TextBox2.Value = ligne.Range.Cells(1, 2).Value
                            .TextBox3.Value = ligne.Range.Cells(1, 3).Value
                            .CommandButton1.Enabled = False
                            .CommandButton3.Enabled = True
                            .Show
                        End With

                    End If
                'On Error GoTo 0

                Next ligne

        End If
 Exit Sub
ErrorHandler:

End Sub

correctement mais le problème se complique quand je souhaite supprimer une ligne aléatoirement dans le tableau. L'erreur1004 s'active. Pouvez vous m'explique le problème svp. Merci

Bonjour,

Il faut arrêter la macro dès que la suppression a été faite, ajouter un "END" avant le "End Sub" de cette macro, comme ici:

Private Sub CommandButton2_Click()
    Dim tb As ListObject 'Déclaration de la variable tb en object
    Set tb = ActiveSheet.ListObjects(1) 'Attribution de l'oject 1 (tableau) à la variable tb
    Dim ligne As Integer
    ligne = Me.Tag
    tb.ListRows(ligne).Delete
    Me.Hide
    End
End Sub

Cdlt

bonjour AxAxA, salutArturo83,

sans ce boucle et en évitant les erreurs possibles et en minimalisant les variables à déclarer

Private Sub Worksheet_SelectionChange(ByVal target As Range)
     Dim iSect As Range, cDBR As Range, i

     With Me.ListObjects("Tableau1")         'Affectation de l'object tableau1 à la variable tbl
          If .ListRows.Count > 0 Then 'tableau n'est pas vide
               Set iSect = Intersect(target, .DataBodyRange)
               If Not iSect Is Nothing Then
                    Set cDBR = .DataBodyRange 'le contenu sans les entêtes
                    i = iSect.Row - .Range.Row
                    With UserForm1           'Remplir le UserForm avec les valeurs de la ligne
                         .Tag = i            'Stocker l'index de la ligne dans le Tag
                         .TextBox1.Value = cDBR.Cells(i, 1).Value
                         .TextBox2.Value = cDBR.Cells(i, 2).Value
                         .TextBox3.Value = cDBR.Cells(i, 3).Value
                         .CommandButton1.Enabled = False
                         .CommandButton3.Enabled = True
                         .Show
                    End With
               End If
          End If
     End With
End Sub

Bonjour a vous,

le END en fin de programme fonctionne. du coup, merci pour la solution

Rechercher des sujets similaires à "erreur 1004 supprimer ligne"