XL 2016 VBA - Trouver une valeur et supprimer sa ligne de tableau

Ricouch

XLDnaute Nouveau
Bonjour la communauté :) je vous souhaite une bonne année pleine de joie et de prospérité.

J'essaie d'avancer sur un Userform, mais avec le peu de connaissance que j'ai, je me retrouve dans des impasses.

Avec mon code ci-dessous j'essaie de trouver une valeur dans mon tableau dynamique (exactement dans la 1ere colonne) , puis supprimer la ligne entière.


VB:
Private Sub CommandButton4_Click()
If Me.Identifiant_Client.Value = "" Then
MsgBox "Sélectionnez les données à supprimer"
Exit Sub
End If
    
    
Dim sh As Worksheet
Dim Table As ListObject
Set sh = ThisWorkbook.Sheets("Biens")
Set Table = sh.ListObjects("Tbl_Biens")
Dim Seleted_row As Long
Seleted_row = Application.listobjectfunction.Match(Me.Identifiant_Client.Value, Table.ListRows(0), 0)
'--------------------------------------
Table.Range("a" & Seleted_row).ListRows.Delete
Call Refresh_data


End Sub

Merci d'avance.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous, bonne année à tous :),

Essayez le code suivant :
VB:
Private Sub CommandButton4_Click()
Dim Table As ListObject, Seleted_row As Long
   If Me.Identifiant_Client.Value = "" Then MsgBox "Sélectionnez les données à supprimer": Exit Sub
   Set Table = ThisWorkbook.Sheets("Biens").ListObjects("Tbl_Biens")
   On Error Resume Next 'continuer l'exécution si Me.Identifiant_Client.Value n'existe pas
   Seleted_row = Application.Match(Me.Identifiant_Client.Value, Table.ListColumns(1).DataBodyRange, 0)
   On Error GoTo 0   'rétablir le traitement d'erreur
   If Seleted_row > 0 Then Table.ListRows(Seleted_row).Delete
   Refresh_data
End Sub

nota : bien souvent les contrôles retournent une valeur de type texte. Si la 1ère colonne de votre tableau structuré contient un autre type de données alors il faudra convertir Me.Identifiant_Client.Value dans le type approprié de donnée pour que Application.Match() fonctionne correctement (j'ai supposé que Identifiant_Client était un contrôle).
 

Ricouch

XLDnaute Nouveau
Bonjour à tous, bonne année à tous :),

Essayez le code suivant :
VB:
Private Sub CommandButton4_Click()
Dim Table As ListObject, Seleted_row As Long
   If Me.Identifiant_Client.Value = "" Then MsgBox "Sélectionnez les données à supprimer": Exit Sub
   Set Table = ThisWorkbook.Sheets("Biens").ListObjects("Tbl_Biens")
   On Error Resume Next 'continuer l'exécution si Me.Identifiant_Client.Value n'existe pas
   Seleted_row = Application.Match(Me.Identifiant_Client.Value, Table.ListColumns(1).DataBodyRange, 0)
   On Error GoTo 0   'rétablir le traitement d'erreur
   If Seleted_row > 0 Then Table.ListRows(Seleted_row).Delete
   Refresh_data
End Sub

nota : bien souvent les contrôles retournent une valeur de type texte. Si la 1ère colonne de votre tableau structuré contient un autre type de données alors il faudra convertir Me.Identifiant_Client.Value dans le type approprié de donnée pour que Application.Match() fonctionne correctement (j'ai supposé que Identifiant_Client était un contrôle).
Bonjour @mapomme, @ChTi160,

Merci pour vos retour, le code que @mapomme m'a partagé fonctionne 100%

Merci beaucoup.

2022 s'annonce bien ^^
 

Discussions similaires