Supprimer une ligne précise
Bonjour à tous,
Je suis débutant en VBA, je suis actuellement stagiaire dans une entreprise et je viens de créer (à la demande du directeur) un fichier Excel qui nous permettra de gérer la gestion des commandes clients. Cependant je viens de rencontrer un petit problème que je n'arrive pas à résoudre.
C'est au niveau de la SUPPRESSION. Supposons que j'ai un client qui a commandé plusieurs pièces et que je veux en SUPPRIMER une, car il est venu la récupérer. La pièce que je veux supprimer est bien afficher dans mon formulaire, mais lorsque je clic sur le bouton "SUPPRIMER", ce n'est pas la pièce affichée dans le formulaire qui est SUPPRIMÉE, mais la première ligne qui correspond au client en question.
Voila le code que j'ai utilisé :
Private Sub CommandButtonSUPPRIMER_Click()
If MsgBox("Confirmez-vous la suppresssion de cette piece pour ce Camion ?", vbYesNo, "Demande confirmation de suppression") = vbYes Then
Rows([TableauSource1].Find(ComboBoxCLIENT.Value).Row).EntireRow.Delete
End If
End Sub
Si quelqu'un peut m'aider je le remercie d'avance
Ihifadhi.
Veuillez trouver ci-joint mon fichier
Bonjour,
Quand tu fais une recherche avec Find() et dans ton cas, c'est à dire supprimer un client bien particulier, la recherche doit être exacte et nom approximative donc, le paramètre "LookAt" doit être préciser avec "xlWhole". Il est aussi préférable de contrôler ce que retourne la méthode Find() avec "Nothing" afin d'éviter le plantage :
Private Sub CommandButtonSUPPRIMER_Click()
Dim Tbl As ListObject
Dim Cel As Range
If MsgBox("Confirmez-vous la suppresssion de cette piece pour ce Camion ?", vbYesNo, "Demande confirmation de suppression") = vbYes Then
Set Tbl = Worksheets("Enregistrements").ListObjects("Tableau1")
Set Cel = Tbl.DataBodyRange.Columns(1).Find(ComboBoxCLIENT.Value, , xlValues, xlWhole)
If Not Cel Is Nothing Then Cel.EntireRow.Delete
End If
End SubMerci Theze pour avoir répondu à ma question
Supposons que j'ai un client "SAMAT" plusieurs fois, lorsque dans mon formulaire jai une ligne affichée et que je clic sur "SUPPRIMER", il me supprime toujours la première ligne correspondant au client "SAMAT" de mon "tableau1", et non celle affichée dans le formulaire.
Re,
Effectivement, je n'ai pas poussé les tests
Donc, il est préférable de procéder autrement. Le ComboBox n'utilise plus sa propriété "RowSource" et il doit être paramétré avec deux colonnes dont la seconde est cachée (valeur 0) et dans cette dernière est stocké le numéro de ligne pour permettre la suppression.
Le code pour remplir la ComboBox sur "Initialize" du formulaire qui appelle la proc "ChargerCombo()" :
Private Sub UserForm_Initialize()
With ComboBoxCLIENT
.RowSource = ""
.ColumnCount = 2
.ColumnWidths = "175;0"
End With
ChargerCombo
End Sub
Sub ChargerCombo()
Dim Tbl As ListObject
Dim Cel As Range
Dim I As Long
Set Tbl = Worksheets("Enregistrements").ListObjects("Tableau1")
With ComboBoxCLIENT
.Clear
For Each Cel In Tbl.DataBodyRange.Columns(1).Cells
.AddItem Cel.Value
.Column(1, I) = Cel.Row
I = I + 1
Next Cel
End With
TextBoxCODECLIENT.Text = ""
TextBoxIMMAT.Text = ""
TextBoxREFPRODUIT.Text = ""
TextBoxDESIGNATION.Text = ""
TextBoxQUANTITE.Text = ""
TextBoxDATELIVRAISON.Text = ""
TextBoxDEBITE.Text = ""
End SubCi-dessous, le code pour la suppression de la ligne choisi (doit remplacer le précédant) :
Private Sub CommandButtonSUPPRIMER_Click()
If MsgBox("Confirmez-vous la suppresssion de cette piece pour ce Camion ?", vbYesNo, "Demande confirmation de suppression") = vbYes Then
With ComboBoxCLIENT: Worksheets("Enregistrements").Rows(.Column(1, .ListIndex)).EntireRow.Delete: End With
ChargerCombo 'recharge la liste pour prendre en compte la suppression
End If
End Subet en dernier, il est préférable d'utiliser l'événement "Click" du ComboBox plutôt que "Change()" :
Private Sub ComboBoxCLIENT_Click()
Worksheets("Enregistrements").Activate
With ComboBoxCLIENT: AfficherInfo .Column(1, .ListIndex): End With
End Subil va te falloir adapter les différentes proc qui appellent la Sub "AfficherInfo ()" qui devient :
Sub AfficherInfo(ByVal kelLigne As Long)
Me.TextBoxCODECLIENT.Text = Cells(kelLigne, Range("B1").Column)
Me.TextBoxIMMAT.Text = Cells(kelLigne, Range("C1").Column)
Me.TextBoxREFPRODUIT.Text = Cells(kelLigne, Range("D1").Column)
Me.TextBoxDESIGNATION.Text = Cells(kelLigne, Range("E1").Column)
Me.TextBoxQUANTITE.Text = Cells(kelLigne, Range("F1").Column)
Me.TextBoxDATELIVRAISON.Text = Cells(kelLigne, Range("G1").Column)
Me.TextBoxDEBITE.Text = Cells(kelLigne, Range("H1").Column)
End Subcomme tu peux le voir, sans la ligne qui concerne la ComboBox !
Merci pour le temps que tu prends pour me répondre, mais là j'avoue que ce que tu m'as envoyé c'est de nouvelles choses pour moi, et je suis un peu embrouillé. C'est possible de m'envoyer le fichier pour que je comprenne mieux ? ce que je ne comprends pas vraiment c'est le "ChargerCombo".
Avec tout ce que tu m'a envoyé, lorsque je met le nom de mon client dans ma combobox, il y a que son nom qui s'affiche et pas les informations qui vont avec.
Merci ^pour ton aide , c'est super.
bonjour
gestion de la base avec une Listview
fonctionne sur tous les excel 32bits
A+
Maurice