Faire la somme d'une listbox.

cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013 - 8 mars 2008 à 16:11
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013 - 9 mars 2008 à 15:26
Bonjour à toutes et tous,

je vous expose mon souci:

j'ai un tableau excel de trois colonnes (catégorie, article et prix)

sur un userform, j'ai trois optionbutton (correspondant aux trois catégories possibles), deux listbox deux commandbutton et un label.

Gràce à votre aide, j'ai un code qui permet à l'utilisateur de sélectionner une catégorie d'article(via les optionbuttons) et les articles et le prix correspondant à celle ci s'affichent dans la première listbox (une seule colonne). partant de là, l'utilisateur sélectionne l'article et clique sur le premier bouton pour l'afficher dans la seconde listbox (il peut ainsi cliquer autant de fois qu'il a d'article à sortir). l'autre bouton sert à annuler un article qu'on aurait ajouté en trop

j'espère avoir été relativement clair! j'en arrive à ma question:

je souhaiterais dans mon label, afficher le total des prix des articles sorti par l'utilisateur (donc du listbox2).

je pense que pour ce faire il serait peut être plus simple de diviser le listbox en deux colonnes (une pour le prix et l'autre l'article?) J'ai essayé avec columcount, mais ça marche pas, il continue à tout afficher dans la première colonne.. Quand à l'addition des prix dans le label je sèche aussi...

Merci d'avance pour votre aide.

ps: voici le code

Option Explicit

Private Function GetListCategories() As String()
    Dim ltStr() As String
    ReDim ltStr(-1 To -1)
   
    Dim i As Long
    Dim j As Long
    Dim lOK As Boolean
    Dim lStr As String
   
    i = 0
    Do While Feuil2.Range("B2").Offset(i, 0).Value <> ""
        lOK = True
        lStr = Feuil2.Range("B2").Offset(i, 0).Value
        'Recherche si la catégorie est connue
        For j = 0 To UBound(ltStr)
            If lStr = ltStr(j) Then
                lOK = False
                Exit For
            End If
        Next j
       
        'Si inconnue, on l'ajoute
        If lOK Then
            If UBound(ltStr) >= 0 Then
                ReDim Preserve ltStr(0 To UBound(ltStr) + 1)
            Else
                ReDim ltStr(0 To 0)
            End If
           
            ltStr(UBound(ltStr)) = lStr
        End If
       i = i + 1
    Loop
   
    GetListCategories = ltStr
End Function



'Ensuite pour remplir ta listbox :
Private Sub RemplLstBx(ByVal pCategorie As String)
    Dim i As Long
  
   ListBox1.Clear
  
    i = 0
    Do While Feuil2.Range("B2").Offset(i, 0).Value <> ""
        If Feuil2.Range("B2").Offset(i, 0).Value = pCategorie Then
            ListBox1.AddItem Feuil2.Range("C2").Offset(i, 0).Value & CStr(Feuil2.Range("D2").Offset(i, 0).Value) & " " & "?"
        End If
        i = i + 1
    Loop
End Sub



Private Sub CommandButton_Ajouter_Click()
    Dim ligne As Variant
    Dim i As Integer



        i = ListBox1.ListIndex
    ListBox2.AddItem ListBox1.List(i, 0)
   
    ListBox2.List(ListBox2.ListCount - 1) = ListBox1.List(i, 0)
 
End Sub




 



Private Sub CommandButton_Retirer_Click()
 's'assure que la listbox contient des articles
    If ListBox2.ListCount >= 1 Then
        'Si pas supprime le dernier de la liste
        If ListBox2.ListIndex = -1 Then
            ListBox2.ListIndex = _
                    ListBox2.ListCount - 1
        End If
        ListBox2.RemoveItem (ListBox2.ListIndex)
    End If



End Sub



Private Sub OptionButton_Alimentaire_Click()
Call RemplLstBx(OptionButton_Alimentaire.Caption)
End Sub



Private Sub OptionButton_Livres_Click()
Call RemplLstBx(OptionButton_Livres.Caption)
End Sub



Private Sub OptionButton_NonAlimentaire_Click()
Call RemplLstBx(OptionButton_NonAlimentaire.Caption)
End Sub

2 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
8 mars 2008 à 21:43
Pour remplir ta listbox avec 2 colonnes, il faut commencer par mettre 2 dans la propriété ColumnCount. Puis pour remplir, il suffit de faire un premier AddItem sans paramètre, puis 2 AddItem avec les coordonnées de colonnes

    Do While Feuil2.Range("B2").Offset(i, 0).Value <> ""
        If Feuil2.Range("B2").Offset(i, 0).Value = pCategorie Then
           
ListBox1.AddItem
            ListBox1.List(J, 0) = Feuil2.Range("C2").Offset(i, 0).Value
            ListBox1.List(J, 1) = CStr(Feuil2.Range("D2").Offset(i, 0).Value)
            J = J + 1
        End If
        i = i + 1
    Loop

Ça devrait être plus simple à calculer par la suite.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
9 mars 2008 à 15:26
Merci ça marche nickel pour la première listbox, mais je n'arrive pas à le faire pour la seconde... j'ai essayé d'appliquer ton code, mais au mieux j'affiche l'article et le prix à la ligne, dans la même colonne...

tu peux m'aider?
Rejoignez-nous