Somme de 2 Textbox

Bonjour le Forum , je reviens à nouveau avec mon fichier récemment modifié grâce au Forum . J'ai dans le même principe que ma dernière participation besoin d'une aide sur du vba .Dans l'Usf calcul ,je souhaite qu'après avoir renseigné des valeurs dans TbxCa , Tbx21 , TbxC1 , TbxC2 et Tbx23 sans obligatoirement choisir une date avec CmbAnnée , lance l'addition de Tbx21+Tbx23 et inscrive la somme dans TbxSomme . Merci de votre aide

Bonjour,

Est cela que tu voulais

Bonjour,

Comme souvent écrit, évitez l'utilisation de RowsSource dans vos codes USF. Cette instruction peut parfois provoquer des soucis. Utilisez toujours LIST ou ADDITEM
Donc dans votre code Initialize, remplacez la ligne CmbAnnee.RowSource = "B16:B49" par ceci

CmbAnnee.List = Range("B16:B49").Value

Pour votre demande vous pouvez tester ceci :

Private Sub Tbx21_Change()
If Tbx21 = vbNullString Then
    Tbx23 = vbNullString
    TbxSomme = vbNullString
End If
End Sub

Private Sub Tbx23_Change()
If Tbx21 = vbNullString Or Tbx23 = vbNullString Then TbxSomme = vbNullString: Exit Sub
TbxSomme = CInt(Tbx21.Value) + CInt(Tbx23.Value)
End Sub

La textbox tbxsomme sera complétée dès que vous remplirez la tbx23 et ce, pour autant que vous avez d'abord complété la tbx21

Cordialement


Edit : Oups Jacky... désolé je n'avais pas vu que vous aviez posté....

Bonjour Dan,

Pas de problème
Je vois que tu utilises la fonction CInt alors que moi j'ai utilisé Val pour convertir les données Tbx21 et Tbx23 en valeur numérique
Qu'est ce qui est préférable ?

Cordialement

Bonjour Jacky et Dan ,merci pour votre retour c'était presque bon mais j'ai rajouté ceci

Private Sub Tbx23_Change()
    If Tbx21 = vbNullString Or Tbx23 = vbNullString Then TbxSomme = vbNullString: Exit Sub
    TbxSomme = CInt(Tbx21.Value) + CInt(Tbx23.Value)
    Me.CmdbPourcentage.Visible = True
    Me.TbxRésultats.Visible = True
    Me.TbxCoefficient.Visible = True
End Sub

Et maintenant c'est parfait . Merci a vous et surtout merci au forum

Bonsoir à tous,

Salut @Jacky, je te laisse lancer le petit Sub ci-dessous pour voir par toi-même.

' via https://www.vbforums.com/showthread.php?650449-RESOLVED-Val()-vs-CInt()-or-CLng()
Sub Test()
    Debug.Print Val("abc12345")  ' = 0
    Debug.Print Val("123abc45")  ' = 123
    Debug.Print Val("123.45abc") ' = 123 ou 123.45 - depend des parametres regionaux (separateur de decimale = . ou ,)
    Debug.Print Val("123,45abc") ' = idem
    Debug.Print CInt(123.45)     ' = 123
    Debug.Print CLng(123.45)     ' = 123
End Sub

La doc précise bien que Val() a pas mal de limitations pour les conversions à partir de texte. Grosso-modo, la fonction CInt() (ou CLng pour les grands nombres) renvoie des résultats plus "naturels" par rapport à ce qu'on attend. En plus elle lève une erreur sur du texte, là où Val() renvoie juste 0. Ça permet donc de "bien voir" si la String est acceptable ou non.

Personnellement, je te conseillerai de toujours te tourner vers les fonctions Cxxx pour les conversions de types. C'est celles qui sont aussi recommandées sur la page d'info VBA.

Re ,je reviens vers vous car j'ai constaté que l'addition des 2 textbox me génère un nombre arrondi alors que j'ai besoin du nombre exact a deux décimales

re

Remplacez les Cint par CDBL

Crdlt

Essaies en remplaçant :

TbxSomme = CInt(Tbx21.Value) + CInt(Tbx23.Value)

par

TbxSomme = CDec(Tbx21.Value) + CDec(Tbx23.Value)

j'espère que ça répondra à tes besoins

@Dan, Oups également, mais une fois de plus on ne donne pas la même fonction, je n'ai pas essayé donc j'aii peut être tort

Bonsoir Dan et Jacky et merci j'ai testé les deux méthodes fonctionnent .Merci encore bonne soirée et merci le forum

Rechercher des sujets similaires à "somme textbox"