Somme automatique

Résolu
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:25
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013 - 11 mars 2008 à 08:44
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

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 mars 2008 à 09:31
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 !!!
3
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
9 mars 2008 à 16:41
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!
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
9 mars 2008 à 16:47
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!
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 mars 2008 à 17:39
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
9 mars 2008 à 18:15
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) ?
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
10 mars 2008 à 08:18
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.
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
10 mars 2008 à 08:18
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.
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
10 mars 2008 à 10:01
Merci pour l'info!

je vérifie ce soir et je dis quoi!

encore merci!
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
10 mars 2008 à 10:07
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
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
10 mars 2008 à 18:46
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


 
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
10 mars 2008 à 21:50
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
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
11 mars 2008 à 08:44
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é!
0
Rejoignez-nous