Modifier/Supprimer un enregistrement dans un tableau(ListObject)

Bonsoir à tous,

Pour mon fichier de gestion de stock, j'utilise un tableau (ListObject) dans l'onglet STOCK.

Pour rentrer un produit dans le UserForm, pas de soucis, cela alimente le tableau. Mais je ne trouve pas comment faire pour modifier ou supprimer un produit (toujours par le UserForm).

Je sollicite votre aide et vos conseils pour progresser sur ce problème.

Avec mes remerciements,

Bonne soirée à tous.

107rs-stocks-03.xlsm (191.79 Ko)

Bonjour,

Je ne peux pas t'apporter vraiment une solution car ma version 64 bits ne gère pas le contrôle "ListView". Pour une meilleure portabilité, il vaut mieux d'ailleurs utiliser un contrôle "ListBox".

Mais je peux te donner ci-dessous à titre d'exemple l'utilisation du code avec l'objet "ListObject"

Private Sub CommandButton3_Click()               ' Actions produitent après un clic sur le bouton "Ajouter/modifier"
    Dim tb_contacts As Object
    Dim Cel As Range, c, firstaddress
    Dim ligne As Long

    If Me.ComboBox1.ListIndex = -1 Then
       MsgBox "Vous devez choisir un fournisseur d'abord"
    ElseIf Trim(Me.TextBox6) = "" Then
       MsgBox "Veuillez choisir un contact"     ' Message d'erreur fournisseur absent
       Exit Sub
    End If

    Set tb_contacts = Sheets("Contacts").ListObjects(1)
    With tb_contacts
        Set Cel = .ListColumns("Fournisseur").Range.Find(what:=Me.ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
        If Not Cel Is Nothing Then
            firstaddress = Cel.Address
            Do
                If Cel.Offset(0, 1) = Me.TextBox6 Then
                'modification avec bon fournisseur et bon nom du contact
                    If MsgBox("Voulez-vous modifier cet enregistrement ?", vbQuestion + vbYesNo + vbDefaultButton2, "Modification") <> vbYes Then Exit Sub

                    ligne = Cel.Row - .HeaderRowRange.Row
                    .ListColumns("Prénom").DataBodyRange.Rows(ligne) = TextBox7         ' Prénom
                    .ListColumns("Fonction").DataBodyRange.Rows(ligne) = TextBox8       ' Fonction
                    .ListColumns("Téléphone").DataBodyRange.Rows(ligne) = TextBox9      ' Téléphone
                    .ListColumns("Portable").DataBodyRange.Rows(ligne) = TextBox10      ' Téléphone portable
                    .ListColumns("Mail").DataBodyRange.Rows(ligne) = TextBox11          ' Mail

                    Alimente_ListView2
                    Me.ListView2.SetFocus
                    Exit Sub
                End If
            Set Cel = .ListColumns("Fournisseur").Range.FindNext(Cel)  ' continue la recherche si le nom <> textbox6
            Loop While Not Cel Is Nothing And Cel.Address <> firstaddress
        End If

         'modification avec bon fournisseur et nouveau nom du contact
            'si derniére ligne non vide, ajout d'une ligne
            If .ListColumns("Fournisseur").DataBodyRange.Rows(.ListRows.Count) <> Empty Then .ListRows.Add
            ligne = .ListRows.Count

            .ListColumns("Fournisseur").DataBodyRange.Rows(ligne) = ComboBox1   ' Fournisseur
            .ListColumns("Nom").DataBodyRange.Rows(ligne) = TextBox6            ' Nom
            .ListColumns("Prénom").DataBodyRange.Rows(ligne) = TextBox7         ' Prénom
            .ListColumns("Fonction").DataBodyRange.Rows(ligne) = TextBox8       ' Fonction
            .ListColumns("Téléphone").DataBodyRange.Rows(ligne) = TextBox9      ' Téléphone
            .ListColumns("Portable").DataBodyRange.Rows(ligne) = TextBox10      ' Téléphone portable
            .ListColumns("Mail").DataBodyRange.Rows(ligne) = TextBox11          ' Mail
      End With

Bonjour Steelson, bonjour thev,

Merci à tous les 2 pour vos réponses.

@Steelson,

J'ai déjà parcouru ce sujet, je continue mes recherches et l'étude des tableaux VBA (ListObjects). C'est assez difficile à aborder mais je trouve que ces tableaux offrent plus de possibilités.

Merci.

@thev,

Merci pour ton exemple de code, je vais essayer de le comprendre et de l'adapter pour mon fichier.

Je sais que les ListBox sont plus faciles à manipuler, mais je trouve la ListView plus lisible (lignes du tableau) et les entêtes de colonnes plus faciles à mettre en place et à paramétrer.

Encore merci à vous 2 pour vos conseils.

Je reviens vers le forum dès que j'aurais avancé et/ou trouver la solution.

Bonne journée

Je sais que les ListBox sont plus faciles à manipuler, mais je trouve la ListView plus lisible (lignes du tableau) et les entêtes de colonnes plus faciles à mettre en place et à paramétrer.

Certes, mais Microsoft ne nous donne pas toujours un vrai choix en ne permettant pas à ce contrôle de fonctionner en 64 bits.

Le problème est donc lié à la portabilité car la version 64 bits d'Excel peut être imposée par l'entreprise, l'administration ou l'association où doit fonctionner l'application. J'ai assisté une personne sur le Forum qui a été contrainte de migrer sa ListViev en ListBox du fait du changement de la version Excel de son entreprise.

Bonsoir thev,

Il est vrai que les choix de Microsoft sont parfois étranges comme par exemple que l'on ne puisse plus depuis Excel 2013 intégrer un calendrier dans les fichiers...et il y a de nombreux non sens comme ça.

J'utilise aussi Libre Office et hormis une interface d'un autre âge, il y a pleins de petits trucs que ne fait pas ou plus Office.

Néanmoins, je pense avoir réussi grâce à ton code ce que je voulais, à savoir, ajouter et modifier un produit.

Je te remercie pour ton aide.

Bonne soirée

126rs-stocks-05.xlsm (204.63 Ko)

Bonsoir,

Microsoft ne s'intéresse plus aux particuliers : Ils préfèrent vendre du Cloud et des abonnements via 365 et de la hot-line aux entreprises...

D'ailleurs s'intéressent t-ils encore à VBA...

A+

Rechercher des sujets similaires à "modifier supprimer enregistrement tableau listobject"