Erreur 1004 pour supprimer un ligne
A
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 Subcorrectement 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
A
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 SubCdlt
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 SubA
Bonjour a vous,
le END en fin de programme fonctionne. du coup, merci pour la solution