ListBox - numérotation de ligne

Forum pour toutes vos questions à propos d'Excel (avec ou sans macros) ...
axelgrel
Membre habitué
Membre habitué
Messages : 57
Inscrit le : 20 novembre 2016
Version d'Excel : 2016

Message par axelgrel » 14 novembre 2018, 18:17

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 :

Code : Tout sélectionner

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
Test.5.2.xlsm
(174.62 Kio) Téléchargé 11 fois
Merci par avance pour votre aide.
Avatar du membre
LouReeD
Passionné d'Excel
Passionné d'Excel
Messages : 5173
Appréciations reçues : 178
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Téléchargements : Mes applications
Contact :

Message par LouReeD » 14 novembre 2018, 18:59

Bonsoir,

je vous joint un fichier que j'avais créer pour une recherche personnelle :
Transfert List1 vers List2 v2.xlsm
(18.36 Kio) Téléchargé 7 fois
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
Bonnes fêtes de fin d'année @ tous ! :srr:
@ bientôt ;;)
Sinon, quelques règles à lire ICI ;;)
_______________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 3050
Appréciations reçues : 95
Inscrit le : 16 mars 2017
Version d'Excel : 2010 FR

Message par i20100 » 14 novembre 2018, 19:05

Bonjour,

à tester,

Code : Tout sélectionner

.List(LstBox_commande.ListCount - 1, 0) = LstBox_commande.ListCount
S'il vous plaît, pas de messagerie personnelle pour vos questions. La réponse peut servir aux autres membres. Merci!
isabelle
Avatar du membre
LouReeD
Passionné d'Excel
Passionné d'Excel
Messages : 5173
Appréciations reçues : 178
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Téléchargements : Mes applications
Contact :

Message par LouReeD » 14 novembre 2018, 19:08

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
Bonnes fêtes de fin d'année @ tous ! :srr:
@ bientôt ;;)
Sinon, quelques règles à lire ICI ;;)
_______________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 3050
Appréciations reçues : 95
Inscrit le : 16 mars 2017
Version d'Excel : 2010 FR

Message par i20100 » 14 novembre 2018, 19:27

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 :wink:

Code : Tout sélectionner

For j = 0 To Me.LstBox_commande.ListCount - 1
  Me.LstBox_commande.List(j, 0) = j + 1
Next
S'il vous plaît, pas de messagerie personnelle pour vos questions. La réponse peut servir aux autres membres. Merci!
isabelle
axelgrel
Membre habitué
Membre habitué
Messages : 57
Inscrit le : 20 novembre 2016
Version d'Excel : 2016

Message par axelgrel » 15 novembre 2018, 22:27

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

Code : Tout sélectionner

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

Code : Tout sélectionner

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

Code : Tout sélectionner

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.
axelgrel
Membre habitué
Membre habitué
Messages : 57
Inscrit le : 20 novembre 2016
Version d'Excel : 2016

Message par axelgrel » 16 novembre 2018, 13:25

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é !!

Code : Tout sélectionner

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 !
Avatar du membre
LouReeD
Passionné d'Excel
Passionné d'Excel
Messages : 5173
Appréciations reçues : 178
Inscrit le : 14 octobre 2014
Version d'Excel : 2013 FR, 2016 FR
Téléchargements : Mes applications
Contact :

Message par LouReeD » 16 novembre 2018, 16:38

Bonjour,

merci @ vous pour vos différents retour ! :-)
Merci également de vos remerciements ! :-)

@ bientôt

LouReeD
Bonnes fêtes de fin d'année @ tous ! :srr:
@ bientôt ;;)
Sinon, quelques règles à lire ICI ;;)
_______________________________________________Vous pouvez allez faire un tour sur : Index de "Mes applications" ;;)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message