Somme automatique

Résolu
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013
-
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013
-
Bonjour, j'ai une listbox de deux colonnes, une avec des articles et l'autre avec leur prix (ils sont chargés à partir de deux colonnes d'une feuille excel)

je souhaiterais afficher dans un label la somme de la colonne de prix de la listbox sans devoir passer par un bouton à cliquer (je pourrais le faire en calculant directement de la feuille excel, mais la listbox n'affiche pas nécessairement l'entièreté de mon tableau excel.)

Merci pour votre aide!

12 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Su le séparateur est un point : utilisation de Val  (à voir dans ton aide en ligne)

J'espère maintenant pour toi que dans ta lisox, tu n'utilises pas ici le point et là la vrigule !!!
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013

Re bonjour,

j'ai trouvé ceci comme code, mais, je ne sais pourquoi il me laisse toujours le label à "0", il ne fait pas de total... quelqu'un sait ou j'ai pu faire une erreur?


je rapelle, le listbox est dans un user form et le label aussi. le listbox à deux colonne la deuxième correspondant à des prix, je souhaiterais que le total de ces prix s'affiche dans le label...


voici mon code:



Private Sub UserForm_initialize()



    Dim Val_Somme As Double
    Dim L As Integer
    With ListBox1
        For L = 0 To .ListCount - 1 'ListCount nombre des lignes moins 1 _
                                car la premiere ligne est la ligne 0
        Val_Somme = Val_Somme + CDbl(.List(L))
        Next
    End With
    Label7.Caption = Val_Somme
End Sub


merci d'avance!
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013

je viens aussi d'essayer en changeant la ligne:
Val_Somme = Val_Somme + CDbl(.List(L))
par : Val_Somme = Val_Somme + CDbl(.List(L, 1))

mais ça va pas non plus...snif!
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour,

Il n'y a aucune raison pour laquelle ton premier code ne marcherait pas...

Pour autant toutefois que ta listbox soit remplie et qu'elle le soit avec des nombres valides et utilisant la virgule comme séparateur décimal...
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Je viens d'ailleurs (pour en avoir le coeur net) de simuler ainsi :

Private Sub CommandButton3_Click()
 'pour remplir pour essai
  listbox1.AddItem "a"
  listbox1.List(0, 1) = "1,9"
  listbox1.AddItem "b"
  listbox1.List(1, 1) = "2,3"
  ' pour calculer le total de la 2ème colonne
  Dim L As Integer, tot As Double
  For L = 0 To listbox1.ListCount - 1
    tot = tot + CDbl(listbox1.List(L, 1))
  Next
  MsgBox tot
End Sub

Aucun problème
Es-tu certain d'avoir bien utilisé une listbox à 2 colonnes (propriété ColumnCount à 2) ?
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013

Ma listBox est bien remplie et j'ai bien mis '2' dans les propriétés columcount, par contre je ne suis pas certain qu'il s'agisse de nombres valides avec une virgule comme séparateur décimal... (mais à vérifier, je suis au bureau, il va falloir attendre ce soir pour être certain!)

Mais si c'est le cas, comment puis-je faire pour que ces valeurs deviennent des nombres valides?

Merci pour ton aide.
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013

Ma listBox est bien remplie et j'ai bien mis '2' dans les propriétés columcount, par contre je ne suis pas certain qu'il s'agisse de nombres valides avec une virgule comme séparateur décimal... (mais à vérifier, je suis au bureau, il va falloir attendre ce soir pour être certain!)

Mais si c'est le cas, comment puis-je faire pour que ces valeurs deviennent des nombres valides?

Merci pour ton aide.
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013

Merci pour l'info!

je vérifie ce soir et je dis quoi!

encore merci!
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Si je me fie à l'autre message que tu as mis, tu inscrivais le signe de l'Euro dans ta 2e colonne. Si tu regardes le bout de code que je t'ai mis, ce signe n'y était pas.

Assure-toi donc de ne pas mettre ce signe. Sinon tes valeurs seront considérées comme du texte et ne pourront pas s'additionner. Si tu veux absolument y mettre le signe, utilise une 3e colonne ou enlève ce signe lorsque tu fais tes additions.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013

Salut MPi,


je m'étais dit que ça devait provenir du symbole euro, alors je l'avais enlevé... mais ça ne change rien, il ne me fait pas la somme, il reste toujours sur zéro...


j'arrive pas à voir d'ou vient l'erreur...


je laisse le code au cas ou quelqu'un verrait d'ou ça vient



'permet de faire le total des sommes dans le label7



Private Sub UserForm_initialize()



    Dim Val_Somme As Double
    Dim L As Integer
    With ListBox1
        For L = 0 To ListBox1.ListCount - 1 'ListCount nombre des lignes moins 1 _
                                car la premiere ligne est la ligne 0
        Val_Somme = Val_Somme + CDbl(.List(L, 1))
        Next
    End With
    Label7.Caption = Val_Somme
End Sub



'permet de scinder les catégories d'articles



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



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



'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
            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
   
   
End Sub


 
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Tu fais ta somme dans Userform_Initialize ...
Si je ne me trompe pas, tes listes ne sont pas encore remplies tant que tu n'as pas sélectionné un OptionButton. C'est donc normal que la somme soit égale à 0.

Je te suggère de créer une Sub CalculSomme, disons, dans laquelle tu mets le code du Userform_Initialize, puis tu l'appelles après avoir rempli la ListBox

ex:
Private Sub OptionButton_Alimentaire_Click()
    Call RemplLstBx(OptionButton_Alimentaire.Caption)
    Call CalculSomme
End Sub

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
180
Date d'inscription
vendredi 18 janvier 2008
Statut
Membre
Dernière intervention
22 novembre 2013

Merci!

c'est vrai que quand je lis ta réponse, c'est logique!!! peut pas y avoir de total si y a rien à calculer!!

Encore merci! J'essaye ce soir et je vous tiens informé!