Somme

impredaj Messages postés 12 Date d'inscription dimanche 26 mars 2006 Statut Membre Dernière intervention 28 avril 2006 - 25 avril 2006 à 23:18
impredaj Messages postés 12 Date d'inscription dimanche 26 mars 2006 Statut Membre Dernière intervention 28 avril 2006 - 27 avril 2006 à 22:34
Bonjour,

Sur un Formulaire je veux avoir la somme des contrôles x1, x2, x3 et x4 dans un 4ème contrôle (S).
quand les quatres contrôles (x1, ...., x4) contiennent tous des valeurs, j'obtient le résultat dans (S).
Mais lorsque l'un d'entre eux est vide, je ne peux pas avoir la somme des trois autres contrôles.
j'ai essayé la valeur par defaut = 0 mais ça marche pas pour les contrôles qui contiennent une source controle ou un code Vb

MERCI

12 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
25 avril 2006 à 23:55
Salut,

si tes contrôles ne contiennent pas des nombres avec virgule tu peux utiliser Val()



S = Val(X1) + Val(X2) + ...


Daniel
0
impredaj Messages postés 12 Date d'inscription dimanche 26 mars 2006 Statut Membre Dernière intervention 28 avril 2006
26 avril 2006 à 01:26
salut,

ça n'a pas marché

Private Sub S_GotFocus()If IsNull(X1) True Or IsNull(X2) True Or IsNull(X3) Then
Exit Sub
End If
S = Val(X1) + Val(X2) + Val(X3)
End Sub

toujours le même problème.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 avril 2006 à 08:47
salut,
c'est quoi le problème, le résultat est faux? tu as une erreur? tu fais le calcul dans le mauvais évènement?
0
Schlangan Messages postés 47 Date d'inscription samedi 21 août 2004 Statut Membre Dernière intervention 11 décembre 2007
26 avril 2006 à 11:33
Salut, voici un code qui devrait fonctionner :

S = Cdbl(Val(X1)) + Cdbl(Val(X2)) + Cdbl(Val(X3)) + Cdbl(Val(X4))


Mais au fait, tes contrôles X1 à X4, c'est quoi ? des TextBox ?

Sinon, tu peux interdire le calcul de la somme en faisant comme ça :

S = 0
If Not Trim(Cstr(X1))="" Then S = S + Cdbl(Val(X1))
If Not Trim(Cstr(X2))="" Then S = S + Cdbl(Val(X1))
If Not Trim(Cstr(X3))="" Then S = S + Cdbl(Val(X1))
If Not Trim(Cstr(X4))="" Then S = S + Cdbl(Val(X1))

Soit plus clair dans la description de ton problème.
0

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

Posez votre question
impredaj Messages postés 12 Date d'inscription dimanche 26 mars 2006 Statut Membre Dernière intervention 28 avril 2006
26 avril 2006 à 21:14
bonjour,

effectivement, (x1, x2, x3) sont des zones de texte.
et le problème est que les trois  textbox doivent contenir tous des valeur por q'on puisse avoir la somme dans un autre textbox (S). ce qui n'est pas toujours le cas.

j'ai essayé tous les propositions cités cidessus mais toujour le même problème.

merci pour votre aide
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 avril 2006 à 22:08
salut,
la solution de Daniel est pourtant la bonne. revoie en mode debug ?

exemple fonctionnel en VB6

Option Explicit 
'
'
Private Sub Form_Load() 
    X1.Text = "16" 
    X2.Text = "21" 
    X3 = "1" 
    X4 = "4" 
    '
    S.Text = "" 
End Sub 
'
'
Private Sub Command1_Click() 
    Dim Y1&, Y2&, Y3&, Y4& 
    Y1 = Val(X1.Text) 
    Y2 = Val(X2.Text) 
    Y3 = Val(X3.Text) 
    Y4 = Val(X4.Text) 
    '
    S.Text = CStr(Y1 + Y2 + Y3 + Y4) 
End Sub 
 

<small> Coloration
syntaxique automatique [AFCK]</small>
       

PCPT   [AFCK]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
26 avril 2006 à 22:10
s*
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
27 avril 2006 à 15:40
Salut 730785 impredaj, salut à tous,

désolé =401740 PCPT, mais comme il me semble qu'il est sous Access (Formulaire, zone de texte, ...pardon si je me trompe), et que ses contrôles sont liés :

Private Sub
 Form_Load() 
    <strike>X1.Text = "16"</strike> 
    <strike>X2.Text = "21"</strike> 
    <strike>X3 = "1"</strike> 
    <strike>X4 = "4"</strike> 

    '
   S.SetFocus
    S.Text = "" 

End
 Sub 

'
'
Private
 Sub Command1_Click() 
    
Dim Y1&, Y2&, Y3&, Y4& 
   X1.SetFocus
    Y1 = 
Val(X1.Text) 
   X2.SetFocus
    Y2 = 
Val(X2.Text) 
   X3.SetFocus
    Y3 = 
Val(X3.Text) 
   X4.SetFocus
    Y4 = 
Val(X4.Text) 

    '
  
S.SetFocus
    S.Text = CStr(Y1 + Y2 + Y3 + Y4) 

End Sub 

mais tu pourrais aussi faire un contrôle calculé (formule dans la propriété SourceControl).

à+

rvblogn

<sup>
</sup><sup>Je veux ton bien... et je l'aurais... mais jamais avant la page 4
</sup>
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 avril 2006 à 16:47
je ne touche pas à VBA, mais sur le principe j'ai du mal (euphémisme) à voir pourquoi il faudrait donner le focus à la zone txt avant d'en lire le contenu....

ps : je vais croire que tu me traques aujourd'hui...
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
27 avril 2006 à 17:40
je te jure que non, je remonte le courant de la p8 à la p4, et je te vois, ça et là.
pour le focus, euh...
touches pas au VBA d'Access :)
quand un formulaire change de nom, en fonction d'où tu le références, quand tu ne peux même pas appeler la méthode Show d'un formulaire parce qu'il ne l'implémente pas, quand tu ne peux....
touches pas au VBA d'Access :)

rvblogn

<sup>
</sup><sup>Je veux ton bien... et je l'aurais... mais jamais avant la page 4
</sup>
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
27 avril 2006 à 18:04
ok je vois... çà ne m'incite pas, en effet ^^
merci de l'explication succinte ;)
0
impredaj Messages postés 12 Date d'inscription dimanche 26 mars 2006 Statut Membre Dernière intervention 28 avril 2006
27 avril 2006 à 22:34
Bonjour à tous,

merci pour l'aide
oui c'est vrais, je suis sous Acces.
aprés l'utilisation de Nz ( ), ça fonctionne correctement.

et voila un modèle :

Private Sub X1_GotFocus()
X1 = Nz(FNecer * p_u, 0)
End Sub

et merci encor une fois
0
Rejoignez-nous