ListBox - numérotation de ligne

Bonjour à tous,

J'insère des produits dans une listbox. Chaque ligne de ma Listbox représente un produit.

J'aimerai dans la première colonne de la ListBox, un numéro de ligne (appelé "Item" dans l'entête de ma Listbox)

Une numérotation commençant par 1 allant jusqu'a la dernière ligne inséré dans la ListBox. La première ligne de la ListBox = 1, la seconde = 2 ainsi de suite...

Ci-dessous le code qui me permet d'alimenter ma Listbox :

Private Sub Btn_ajouter_produit_Click()

'Contrôles de saisie
If Len(Me.TBox_ref_com) = 0 Then
    Lbl_message = "Remplir une référence de commande"
    Me.TBox_ref_com.SetFocus
ElseIf TBox_date_com.Value <> Format(TBox_date_com.Value, "dd/mm/yyyy") Then
    Lbl_message = "Remplir une date au format jj/mm/aaaa"
    Me.TBox_date_com.SetFocus
ElseIf IsNumeric(Me.TBox_qte.Value) = False Then
    Lbl_message = "Remplir une valeur numérique pour la quantité"
    Me.TBox_qte.SetFocus
Else
    Lbl_message = ""

    'Insertion produit dans la LstBox
    With Me.LstBox_commande
        .AddItem

        '.List(LstBox_commande.ListCount - 1, 0) première colonne - numérotation de la ligne

        .List(LstBox_commande.ListCount - 1, 1) = Me.TBox_produit_reference 'Référence produits
        .List(LstBox_commande.ListCount - 1, 2) = Me.CbBox_produit.Value 'Produits
        .List(LstBox_commande.ListCount - 1, 3) = Me.TBox_qte 'Quantité
        .List(LstBox_commande.ListCount - 1, 4) = Me.TBox_pu & " €" 'PU
        .List(LstBox_commande.ListCount - 1, 5) = Me.TBox_qte * Me.TBox_pu & " €" 'Montant'
    End With
End If

Call calcul_LstBox_somme

End Sub

Petite subtilité, j'ai un bouton qui permet de supprimer la ligne de la Listbox sélectionné.

Il faudrait conserver la numérotation commençant de 1 à un certains de nombre ligne malgré la suppression d'une ligne.

Je joins également un fichier test

44test-5-2.xlsm (174.62 Ko)

Merci par avance pour votre aide.

Bonsoir,

je vous joint un fichier que j'avais créer pour une recherche personnelle :

L'idée est là, je vous laisse le soin de l'adapter à votre fichier

Fonctionnement : un clic fenêtre de gauche, ajout de l'intitulé à droite.

un clic fenêtre de gauche, ajout à droite : si le même on comptabilise, si c'est un nouveau on ajoute, l'ajout se fait "par le haut" du coup on renumérote les lignes.

Si double clic fenêtre de droite alors suppression : si supérieur à 1 quantité, on fait moins 1 si égale à 1 alors on efface la ligne, du coup on renumérote les lignes.

Il y a un test de "répétition" qui n'existe pas dans votre USF, du coup vous pouvez ajouter plusieurs fois la même référence...

@ bientôt

LouReeD

Bonjour,

à tester,

.List(LstBox_commande.ListCount - 1, 0) = LstBox_commande.ListCount

Bonsoir sabV

Comme il le dit lui même:

Petite subtilité, j'ai un bouton qui permet de supprimer la ligne de la Listbox sélectionné.

Il faudrait conserver la numérotation commençant de 1 à un certains de nombre ligne malgré la suppression d'une ligne.

Et la solution de numéroté lors de la création ne fait pas changer les valeurs en cas de suppression de ligne, du coup on crée des trous dans la suite numérique, non ?

@ bientôt

LouReeD

Bonjour à tous,

@LouReeD

oui, mais je ne l'avais pas compris de cette façon,

mais si c'est le cas il faudrait ajouter le code suivant au bte poubelle

For j = 0 To Me.LstBox_commande.ListCount - 1
  Me.LstBox_commande.List(j, 0) = j + 1
Next

Merci à vous deux pour vos réponses.

J'ai testé ta solution @sabV, ça donne le code ci-dessous et c'est opérationnel :

-Pour alimenter la Listbox

Private Sub Btn_ajouter_produit_Click()
        With Me.LstBox_commande
            .AddItem
            .List(LstBox_commande.ListCount - 1, 0) = LstBox_commande.ListCount 'Numérotation lignes listbox
            .List(LstBox_commande.ListCount - 1, 1) = Me.TBox_produit_reference 'Référence produits
            .List(LstBox_commande.ListCount - 1, 2) = Me.CbBox_produit.Value 'Produits
            .List(LstBox_commande.ListCount - 1, 3) = Me.TBox_qte 'Quantité
            .List(LstBox_commande.ListCount - 1, 4) = Me.TBox_pu & " €" 'PU
            .List(LstBox_commande.ListCount - 1, 5) = Me.TBox_qte * Me.TBox_pu & " €" 'Montant'
        End With

Call Calcul_TBoxSomme

End Sub

Pour supprimer une ligne dans la Listbox

Private Sub Btn_sLigne_Click()

If Me.LstBox_commande.ListIndex = -1 Then
    msg = MsgBox("Vous devez sélectionner une ligne", vbCritical, "Erreur")
    Exit Sub
End If

If Me.LstBox_commande.ListCount > 0 Then
    msg = MsgBox("Supprimer cette ligne ?", vbQuestion + vbYesNo, "Suppression")
    If msg = 6 Then
        For j = Me.LstBox_commande.ListCount - 1 To 0 Step -1
            If Me.LstBox_commande.Selected(j) = True Then
                'on Supprime l'élément selectionné dans la ListBox.
                Me.LstBox_commande.RemoveItem (j)
                    'Numérotation des lignes de la listbox
                    For k = 0 To Me.LstBox_commande.ListCount - 1
                        Me.LstBox_commande.List(k, 0) = k + 1
                    Next k
                Exit For
            End If
        Next j
    End If
Else
    msg = MsgBox("Il n'y a aucune ligne à supprimer", vbCritical, "Erreur")
End If

Call Calcul_TBoxSomme

End Sub

Oui Lou Reed il n'y a pas de test sur la répétition des insertions dans la Listbox.

D'abord merci de partager ton fichier.

C'était ma tâche suivante. Comme tu mets les pieds dans le plats, autant y aller à pieds joints..

Tu utilise un booléen pour vérifier si l'item à ajouter existe déjà.

For Bcl = 0 To ListBox2.ListCount - 1
        If ListBox2.List(Bcl, 1) = La_commande Then
            ListBox2.List(Bcl, 3) = ListBox2.List(Bcl, 3) + 1
            Trouver = True
            Exit For

J'ai testé, pas assez de temps pour correctement essayer, mais je me suis confronté à un problème de valeur.

Au lieu d'ajouter, par exemple les quantités, il a concaténé les valeurs. au lieu de faire 10+10 = 20, j'ai obtenu 1010 dans la Listbox.

Pour contourner le problème je pensais plutôt interdire l'insertion de produit si le produit avait déjà été ajouté.

et utiliser un label pour dire l'erreur.

Merci encore pour vos réponses.

Bonjour,

Voici une solution que j'ai trouvé pour éviter d'ajouter deux fois le même item dans une Listbox.

C'est une boucle For comme dans le fichier de LouReeD mais sans booléen (trop complexe pour moi..)

Ce code est opérationnel de mon côté !!

For i = 0 To Me.LstBox_commande.ListCount - 1
' .column(n°col, n°ligne)
    If Me.LstBox_commande.Column(1, i) = TBox_produit_reference Then
        Lbl_message = "Produit déjà présent dans le bon de commande": Exit Sub
        End If
Next i

Merci encore à vous deux pour votre aide et de m'avoir mis sur la piste !

Bonjour,

merci @ vous pour vos différents retour !

Merci également de vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "listbox numerotation ligne"