Problème d'additionnements de plusieurs texbox

Bonjours

Comme indiquer dans le titre, je cherche comment avoir dans total les chiffres que j'agrémente au fur et à mesure et que je remplie les texboxs.

Ex: texbox1 (8) + Texbox 5 (11) + Texbox 7 (14)

Total (8) Total (19) Total (33)

capture d ecran 2022 10 14 171823
Private Sub Txt_total_change()
    Dim mon_calcul As Integer
    mon_calcul = Txt_1 + Txt_2 + Txt_3 + Txt_4 + Txt_5 + Txt_6 + Txt_7 + Txt_8
    Txt_total = mon_calcul
End Sub

'L'ouverture de l'usurform
Private Sub UserForm_Initialize()
Me.Tb_date.Value = Format(Me.Tb_date.Value, "DD/MM/YYYY")
datejour = Format(Now, "DD/MM/YYYY")
End Sub

'Quitter
Private Sub Bt_quitter_Click()
 Unload Me
End Sub

Merci

Bonsoir,

pour plus de sécurité, il faut travailler avec des chiffres, hors les textbox sont des "alphanumérique, du texte en somme.
Pour faire les calcul il faut signifier à VBA que les données sont à considérés comme des nombre et en fonctions de leur type on utilisera une fonction plutôt qu'une autre : TextBox1 = 10; TextBox2 = 15; Textbox3 = Cdbl(textbox1) + Cdbl(textbox2), ici c'est le format "Double" qui veut dire :
Les variables à double précision à valeur flottante sont stockées en tant que nombres à valeur flottante 64 bits (8 byte) IEEE compris entre :

  • De -1,79769313486231E308 à -4,94065645841247E-324 pour les valeurs négatives
  • De 4,94065645841247E-324 à 1,79769313486232E308 pour les valeurs positives.

Si cela peut vous aider. Sur le site, ici il y a une partie "cours VBA" qui explique ceci.

@ bientôt

LouReeD

Oui merci de ta réponse mais quelle code je dois mettre?

Je dois entrée que des nombres réel.

merci

bonjour

Private Sub Txt_total_change()
    Dim mon_calcul As Integer
    mon_calcul = CInt(Txt_1.Value) + CInt(Txt_2.Value) + CInt(Txt_3.Value) + ....
    Txt_total = mon_calcul
End Sub

BsAlv merci mais cela ne marche pas

je rentre 5 dans la Txt_3 et rien ne se passe dans la Txt_total(il devrais avoir 5) et si je rajoute 8 dans la Txt_9 dans la Txt_total(il devrais avoir 13).

merci

Bonjour,

Le problème est que le "Change" est sur le textBox qui doit recevoir le résultat...
il faut soit avoir un bouton "Addition", soit mettre l'addition sur les événements "Change" des textBox :

Private Sub TextBox1_Change()
    Txt_total = Cdbl(Textbox1.Value) + Cdbl(Textbox2.Value) + Cdbl(Textbox3.Value) + ....
End Sub

Private Sub TextBox2_Change()
    Txt_total = Cdbl(Textbox1.Value) + Cdbl(Textbox2.Value) + Cdbl(Textbox3.Value) + ....
End Sub

'Etc...

@ bientôt

LouReeD

Salut LouReeD

J'ai une erreur 13 Incompatibilité de type (dés que mes un N° ex:3).

j'ai l'erreur.

Private Sub Txt_fuitesup_Change()
Txt_total = mon_calcul = CDbl(Txt_fuitesup.Value) + CDbl(Txt_consosup.Value) + CDbl(Txt_consoinferieur.Value) + CDbl(Txt_cptinaccessible.Value) + CDbl(Txt_cptdifacces.Value) + CDbl(Txt_sansindex.Value) + CDbl(Txt_cptbloque.Value) + CDbl(Txt_fuiteparescpt.Value)
End Sub

Private Sub Txt_consosup_Change()
Txt_total = mon_calcul = CDbl(Txt_fuitesup.Value) + CDbl(Txt_consosup.Value) + CDbl(Txt_consoinferieur.Value) + CDbl(Txt_cptinaccessible.Value) + CDbl(Txt_cptdifacces.Value) + CDbl(Txt_sansindex.Value) + CDbl(Txt_cptbloque.Value) + CDbl(Txt_fuiteparescpt.Value)
End Sub

Private Sub Txt_consoinferieur_Change()
Txt_total = mon_calcul = CDbl(Txt_fuitesup.Value) + CDbl(Txt_consosup.Value) + CDbl(Txt_consoinferieur.Value) + CDbl(Txt_cptinaccessible.Value) + CDbl(Txt_cptdifacces.Value) + CDbl(Txt_sansindex.Value) + CDbl(Txt_cptbloque.Value) + CDbl(Txt_fuiteparescpt.Value)
End Sub

'Ect.............

Une erreur de copier/coller, non ? Il y a "= mon_calcul" en trop... Dans le code que j'ai proposé, je ne passe pas par une variable intermédiaire, la valeur de la textBox total est égale à la somme des autres dès qu'une des valeur est modifiée.

@ bientôt

LouReeD

il faut voir votre userform, les noms sont-ils exact ?

Vous ne savez pas ajouter votre fichier ?

Les 8 textbox ont bien "reçus" leur nom dans la formules, ce qui me chagrine c'est bien le " mon_calcul" en trop, et à force de me poser des questions n'y a t il pas une erreur renvoyé avec Cdbl(TextBox1) si TextBox1 ="" ?
Un peu fainéant pour tester chez moi... et avec ma mémoire c'est le genre de truc dont je ne me souviens pas !

@ bientôt

LouReeD

je n'es même pas le temps d'ajouter que j'ai une erreur dés que je mes un chiffre 1 ou 5 ou 8 dans n'importe quel Txt_Box

Private Sub Txt_fuitesup_Change()
Txt_total = CDbl(Txt_fuitesup.Value) + CDbl(Txt_consosup.Value) + CDbl(Txt_consoinferieur.Value) + CDbl(Txt_cptinaccessible.Value) + CDbl(Txt_cptdifacces.Value) + CDbl(Txt_sansindex.Value) + CDbl(Txt_cptbloque.Value) + CDbl(Txt_fuiteparescpt.Value)
End Sub

Private Sub Txt_consosup_Change()
Txt_total = CDbl(Txt_fuitesup.Value) + CDbl(Txt_consosup.Value) + CDbl(Txt_consoinferieur.Value) + CDbl(Txt_cptinaccessible.Value) + CDbl(Txt_cptdifacces.Value) + CDbl(Txt_sansindex.Value) + CDbl(Txt_cptbloque.Value) + CDbl(Txt_fuiteparescpt.Value)
End Sub

Private Sub Txt_consoinferieur_Change()
Txt_total = CDbl(Txt_fuitesup.Value) + CDbl(Txt_consosup.Value) + CDbl(Txt_consoinferieur.Value) + CDbl(Txt_cptinaccessible.Value) + CDbl(Txt_cptdifacces.Value) + CDbl(Txt_sansindex.Value) + CDbl(Txt_cptbloque.Value) + CDbl(Txt_fuiteparescpt.Value)
End Sub

Alors essayez en mettant les codes dans l'événement : Txt_fuitesup_AfterUpdate() : le code d'addition ne se fera qu'à la sortie du textbox.
Mais je reviens sur l'idée de l'erreur d'un Cdbl(valeur vide).

@ bientôt

LouReeD

C'est bien cela, Cdbl(TexBox1) où TextBox1 = "" (rien) provoque l'erreur.

Si vos TextBox peuvent avoir une série de 1 à 8 vous avez ce code éventuellement :

Private Sub TextBox1_AfterUpdate()
    For i = 1 To 8
        If Controls("Textbox" & i) <> "" Then mon_calcul = mon_calcul + CDbl(Controls("TextBox" & i))
    Next i
    TextBox3.Value = mon_calcul
End Sub

Private Sub TextBox2_AfterUpdate()
    For i = 1 To 8
        If Controls("Textbox" & i) <> "" Then mon_calcul = mon_calcul + CDbl(Controls("TextBox" & i))
    Next i
    TextBox3.Value = mon_calcul
End Sub
' Etc....

Et comme vos textBox n'ont pas de numéro de suivi, chacun à son nom, vous pouvez passer par un tableau qui contient ces noms :
Tab(1) = "Mon_premier"
Tab(2) ="LeSuivant"

et le code devient :

Private Sub TextBox1_AfterUpdate()
    For i = 1 To 8
        If Controls(Tab(i)) <> "" Then mon_calcul = mon_calcul + CDbl(Controls(Tab(i)))
    Next i
    TextBox3.Value = mon_calcul
End Sub

Private Sub TextBox2_AfterUpdate()
    For i = 1 To 8
        If Controls(Tab(i)) <> "" Then mon_calcul = mon_calcul + CDbl(Controls(Tab(i)))
    Next i
    TextBox3.Value = mon_calcul
End Sub
' Etc....

@ bientôt

LouReeD

9classeur1.xlsm (104.53 Ko)

cela marche pas

Voilà votre fichier modifié avec la mise en place du tableau comportant les 8 noms de TextBox qu'il faut additionner. L'événement est l'afterUpdate afin de mettre à jour l'addition dès qu'une des valeurs est modifiée. Lorsque dans un code il y a répétition de ligne de code on peut les mutualiser en créant une SUB à part et dans chaque code AfterUpdate on appelle cette sub, ou bien on passe par un module de classe, mais là c'est une autre histoire !

Le fichier modifié :

8txt-lrd.xlsm (106.23 Ko)

Sinon j'ai fait l'erreur d'appeler le tableau "Tab" qui est un nom réservé car je crois qu'il existe une fonction "Tab" sous VBA, erreur à ne pas faire !

@ bientôt

LouReeD

Super je te remercie

LouReeD

Cela marche nikel.

Bonne continuation @ vous et merci pour les remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "probleme additionnements texbox"