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 Sub

Merci Theze pour avoir répondu à ma question , mais malheureusement avec ton code il me fait la même chose qu'avec le mien.

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 Sub

Ci-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 Sub

et 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 Sub

il 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 Sub

comme 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.

Re,

voici le fichier :

Merci ^pour ton aide , c'est super.

bonjour

gestion de la base avec une Listview

fonctionne sur tous les excel 32bits

A+

Maurice

Rechercher des sujets similaires à "supprimer ligne precise"