VBA - Suppression ligne dans Table Excel
Bonjour à tous,
Avec l'aide de certains membres du Forum j'ai réussi à créer un bouton afin d'ajouter une ligne au même endroit, et en gardant les formules associées, dans 2 tableaux situaient chacun dans une feuille différente (cf. exemple en PJ) et uniquement lorsque la cellule sélectionnée est située dans le tableau de la feuille 1.
Je souhaite maintenant faire de même mais pas ajouter une ligne mais la supprimer (dans les deux tableaux). Comme pour l'insertion je veux que lorsque je suis en dehors du tableau, on ne puisse pas supprimer la ligne. J'ai fait un petit bout de code qui fonctionne pour supprimer les deux lignes mais qui ne bloque pas le fait qu'on puisse supprimer en dehors des tableaux prédéfinis.
Sub Bouton2_Clic()
Cells(ActiveCell.Row, ActiveCell.Column).EntireRow.Delete
Sheets(2).Cells(ActiveCell.Row, ActiveCell.Column).EntireRow.Delete
End Sub
Je ne suis pas contre un petit coup de main
Merci d'avance.
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonjour,
Une autre proposition avec la modification du code initial.
Mais il faudra nous expliquer les relations entre les 2 tableaux.
Cdlt.
Option Explicit
Dim lo As ListObject
Dim ACell As Range
Dim lRow As Long
Public Sub Bouton1_Clic()
Set ACell = ActiveCell
Set lo = Me.ListObjects(1)
If ACell.ListObject Is Nothing Then
MsgBox "Veuillez sélectionner une cellule du tableau.", vbInformation
GoTo exit_Handler
End If
With lo
lRow = ACell.Row - .HeaderRowRange.Row + 1
.ListRows.Add Position:=lRow
End With
With Worksheets(2)
.ListObjects(1).ListRows.Add Position:=lRow
End With
exit_Handler:
Set lo = Nothing: Set ACell = Nothing
End Sub
Public Sub Bouton2_Clic()
Dim Message As String, Title As String
Dim Default As VbMsgBoxStyle
Dim Response As VbMsgBoxResult
Set ACell = ActiveCell
Set lo = Me.ListObjects(1)
If ACell.ListObject Is Nothing Then
MsgBox "Veuillez sélectionner une cellule du tableau.", vbInformation
GoTo exit_Handler
End If
lRow = ACell.Row - lo.HeaderRowRange.Row
Message = "Veuillez confirmer la suppression de la ligne " & lRow & " du tableau."
Title = "Suppression ligne"
Default = vbOKCancel + vbQuestion
Response = MsgBox(Message, Default, Title)
If Response = vbCancel Then GoTo exit_Handler
With lo
.ListRows(lRow).Range.Delete
End With
With Worksheets(2)
.ListObjects(1).ListRows(lRow).Range.Delete
End With
exit_Handler:
Set lo = Nothing: Set ACell = Nothing
End Sub
Merci à vous deux pour vos réponses. A priori je vais utiliser la fonction de Jean-Eric mais je dois encore faire des tests pour vérifier que tout fonctionne.
Pour te répondre Jean-Eric sur le lien entre les deux tableaux c'est que le 1er tableau est utilisé pour rentrer les paramètres (le nom de l'activité, le nombre d'heures par activité, le nbre d'activité pour chaque année etc.) et le 2nde tableau contient des formules qui utilisent les données d'entrées du 1er tableau et qui me donne les résultats pour chaque activité. Du coup lorsque j'ajoute une activité dans le 1er tableau je veux également avoir une ligne qui se créée au même endroit dans le tableau 2.
Je vais faire mes tests et je reviens si j'ai un souci mais encore merci pour votre aide.