XL 2019 Problème de somme en vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Electronull

XLDnaute Junior
Bonjour à tous,

J'ai un petit problème de somme dans une procédure VBA
dans une listbox, j'ajoute des articles, bon de réduction, bon cadeau,...
Dans une textbox, j'affiche le total au fur et à mesure des ajouts.
Tout fonctionne tant que les montants sont positifs
Si j'ai un montant négatif dans le total et que je veux enlever l'article avec un montant négatif, j'ai une erreur 'incompatibilité de type'

Voici la formule que j'utilise
VB:
    Me.Txt_total = CDbl(Me.Txt_total) - (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex)))

Comment feriez-vous vos calculs.

Merci
 
Solution
Voici la procédure
VB:
Private Sub Cmd_Supprimer_Article_Click()
    
    If CDbl(Me.Txt_total) < 0 And (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex))) < 0 Then
        Me.Txt_total = CDbl(Me.Txt_total) - (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex)))
        Debug.Print Me.Txt_total
    Else
        Me.Txt_total = CDbl(Me.Txt_total) - (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex)))
    End If
    
    Me.Txt_total = Format(Me.Txt_total, "0.00 €")
    ListBox_Article_Achete.RemoveItem (ListBox_Article_Achete.ListIndex)
    
    Me.ComboBox_Produit.ListIndex = -1
    Me.TextBox_Qte = "1"
    Me.TextBox_Prix_Unit = ""
    Me.TextBox_Prix_Unit = ""...
Bonjour à tous,

J'ai un petit problème de somme dans une procédure VBA
dans une listbox, j'ajoute des articles, bon de réduction, bon cadeau,...
Dans une textbox, j'affiche le total au fur et à mesure des ajouts.
Tout fonctionne tant que les montants sont positifs
Si j'ai un montant négatif dans le total et que je veux enlever l'article avec un montant négatif, j'ai une erreur 'incompatibilité de type'

Voici la formule que j'utilise
VB:
    Me.Txt_total = CDbl(Me.Txt_total) - (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex)))

Comment feriez-vous vos calculs.

Merci
Bonjour,

Un petit fichier représentatif, Stp.
 
Voici la procédure
VB:
Private Sub Cmd_Supprimer_Article_Click()
    
    If CDbl(Me.Txt_total) < 0 And (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex))) < 0 Then
        Me.Txt_total = CDbl(Me.Txt_total) - (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex)))
        Debug.Print Me.Txt_total
    Else
        Me.Txt_total = CDbl(Me.Txt_total) - (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex)))
    End If
    
    Me.Txt_total = Format(Me.Txt_total, "0.00 €")
    ListBox_Article_Achete.RemoveItem (ListBox_Article_Achete.ListIndex)
    
    Me.ComboBox_Produit.ListIndex = -1
    Me.TextBox_Qte = "1"
    Me.TextBox_Prix_Unit = ""
    Me.TextBox_Prix_Unit = ""
    Me.TextBox_Compteur.Value = Me.TextBox_Compteur.Value - 1

End Sub
 
Voici la procédure
VB:
Private Sub Cmd_Supprimer_Article_Click()
   
    If CDbl(Me.Txt_total) < 0 And (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex))) < 0 Then
        Me.Txt_total = CDbl(Me.Txt_total) - (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex)))
        Debug.Print Me.Txt_total
    Else
        Me.Txt_total = CDbl(Me.Txt_total) - (CDbl(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex)))
    End If
   
    Me.Txt_total = Format(Me.Txt_total, "0.00 €")
    ListBox_Article_Achete.RemoveItem (ListBox_Article_Achete.ListIndex)
   
    Me.ComboBox_Produit.ListIndex = -1
    Me.TextBox_Qte = "1"
    Me.TextBox_Prix_Unit = ""
    Me.TextBox_Prix_Unit = ""
    Me.TextBox_Compteur.Value = Me.TextBox_Compteur.Value - 1

End Sub
Bonsoir,

Merci pour le retour. Mais je t'avoue que je suis un peu perplexe en regardant ton code.
Exécuter la même ligne de code dans les 2 cas (positif et négatif).
Sans fichier, je suis incapable de t'en dire plus.
Mais plus que tu dis que ça fonctionne. Bonne continuité pour la suite de ton projet.
 
Bonjour Electronull, cathodique,

Perso je n'utilise jamais CDbl sur des contrôles car il y a bug si le texte est vide.

J'utilise Val après avoir remplacé la virgule par le point :
VB:
    Txt_total = Val(Replace(Txt_total, ",", ".")) - Val(Replace(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex), ",", "."))
A+
 
Bonjour Electronull, cathodique,

Perso je n'utilise jamais CDbl sur des contrôles car il y a bug si le texte est vide.

J'utilise Val après avoir remplacé la virgule par le point :
VB:
    Txt_total = Val(Replace(Txt_total, ",", ".")) - Val(Replace(ListBox_Article_Achete.Column(5, ListBox_Article_Achete.ListIndex), ",", "."))
A+
Salut,
Merci pour ta réponse, je vais essayer cette formule pour voir ce que cela donne.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
589
Retour