addition de textbox avec conditions

M

marmotte

Guest
bonjour a vous

he oui encore besoin d'aide

je desire faire la fonction suivante

textbox4 = textbox1*textbox2+textbox3 si listebox1 = "achat"
textbox4 = textbox1*textbox2-textbox3 si listebox1 = "vente"

je vous remercie de vous pencher sur mes petis soucis

marmotte
 
M

Moa

Guest
Salut Marmotte !

C'est assez simple :

Il te suffit de lier tes Textbox et listeBox (avec LinkedCell) à des cellules :

Listbox1 lié à B4

Textbox 1 lié à D3, Textbox2 à F3, Textbox3 à H3, Textbox4 à J3.

Puis formule dans J3 : =SI(B5="Achat";(D3*F3)+H3;(D3*F3)-H3)

Tout simplement.

Regarde quand-même le fichier joint.

@ +

Moa
 

Pièces jointes

  • listeBox.zip
    11.2 KB · Affichages: 28
  • listeBox.zip
    11.2 KB · Affichages: 27
  • listeBox.zip
    11.2 KB · Affichages: 28
@

@+Thierry

Guest
Salut Marmotte, Salut Moa, Salut le Forum


Marmotte si tu te souviens de mes explications sur un post où l'on s'est rencontré (si tu es la même Marmotte que je connaisse !! lol), tu as déjà la solution pour vérifier que les TextBox1 TextBox2 TextBox3 contiennent bien du numérique... (Condition sinéquanon)

Ensuite tu peux faire pas loin de ce que tu as écris :
Ici un exemple par UserForm...


Option Explicit

Private Sub UserForm_Initialize()
With ListBox1
.AddItem "Vente"
.AddItem "Achat"
End With
End Sub

Private Sub TextBox1_CHANGE()
If Not IsNumeric(TextBox1) Then
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(TextBox1.Text)
End With
Exit Sub
End If
End Sub

Private Sub TextBox2_CHANGE()
If Not IsNumeric(TextBox1) Then
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(TextBox1.Text)
End With
Exit Sub
End If
End Sub

Private Sub TextBox3_CHANGE()
If Not IsNumeric(TextBox1) Then
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(TextBox1.Text)
End With
Exit Sub
End If
End Sub


Private Sub ListBox1_Click()
If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Then Exit Sub
If ListBox1 = "Achat" Then
TextBox4 = CDbl(TextBox1) * CDbl(TextBox2) - CDbl(TextBox3)
ElseIf ListBox1 = "Vente" Then
TextBox4 = CDbl(TextBox1) * CDbl(TextBox2) + CDbl(TextBox3)
End If
End Sub

Sinon je viens de voir la soluce proposée par Moa, qui me semble très bien bien aussi et probablement plus facile à mettre en oeuvre sur une feuille.

Bon Aprèm
@+Thierry
 
M

marmotte

Guest
salut thierry

j'avais pas oublié tes conseils précédents au niveau du remplissage du numérique ce que je demandais c'est que le calcul se fasse dans un userform d'apres ta reponse je dois y arrivé maintenant
j'essai ca tout de suite

par la meme occsion tu m'as donné une reponse pour faire une boucle de test d'userfom vide ou non

merci beaucoup

marmotte
 
M

marmotte

Guest
ca marche pas je bloque

re le forum

j'ai essayé ce que m'a donné thierry et je bloque car je n'arrive pas a avoir le total sur mon userform ni dans mon tableau
je vous est mis mon code et rigoler pas c'est un gros bordel mais je debute si vous avez des conseils pour l'odre merci d'avance

marmotte
a plus


Option Explicit


Private Sub combocode_change()
Dim code As Integer
If UserForm1.Combocode.ListIndex = -1 Then
Exit Sub
End If

code = UserForm1.Combocode.ListIndex + 1
Textnom = Sheets("mouvement").Range("c" & code).Value
With UserForm1.Combosens
.RowSource = ""
.AddItem "achat"
.AddItem "vente"
End With
End Sub
'ici c'est l'initialisation du UserForm
Private Sub UserForm_Initialize()
Dim i As Integer
Dim liste As String
For i = 1 To Sheets(1).Range("b1").End(xlDown).Row
liste = Sheets(1).Range("b" & i).Value
Combocode.AddItem liste
Next
With CommandButton1
.Caption = "VALIDATION"
.Default = True
End With
CommandButton2.Caption = "EXIT"
End Sub
Private Sub combosens_Click()
If Textquant = "" Or Textcours = "" Or Textfrais = "" Then Exit Sub
If Combosens = "Achat" Then
Texttotal = CDbl(Textquant) * CDbl(Textcours) + CDbl(Textfrais)
ElseIf Combosens = "Vente" Then
Texttotal = CDbl(Textquant) * CDbl(Textcours) + CDbl(Textfrais)
End If
End Sub
'ici c'est ce qui se passe quand on click sur le Bouton "Validation"
Private Sub CommandButton1_Click()
Dim l As Integer 'Déclaration de variable "L" pour connaitre la Ligne Numéro


'ici je repère la dernière ligne vide pour la Collections des données
l = Sheets("mouvement").Range("a65536").End(xlUp).Row + 1

'ici un Test exemple pour la TextBox1, si elle est vide on est viré !!!
If Not IsDate(Textdate) Then
With Textdate
.SetFocus
.SelStart = 0
.SelLength = Len(Textdate.Text)
End With
Exit Sub
End If
If Combocode = "" Then
With Combocode
.SetFocus
.SelStart = 0
.SelLength = Len(Combocode.Text)
End With
Exit Sub
End If
If Textnom = "" Then
With Textnom
.SetFocus
.SelStart = 0
.SelLength = Len(Textnom.Text)
End With
Exit Sub
End If
If Combotype = "" Then

With Combotype
.SetFocus
.SelStart = 0
.SelLength = Len(Combotype.Text)
End With
Exit Sub
End If

If Combosens = "" Then
With Combosens
.SetFocus
.SelStart = 0
.SelLength = Len(Combosens.Text)
End With
Exit Sub
End If

If Not IsNumeric(Textquant) Then
With Textquant
.SetFocus
.SelStart = 0
.SelLength = Len(Textquant.Text)
End With
Exit Sub
End If
If Not IsNumeric(Textcours) Then
With Textcours
.SetFocus
.SelStart = 0
.SelLength = Len(Textcours.Text)
End With
Exit Sub
End If
If Not IsNumeric(Textfrais) Then
With Textfrais
.SetFocus
.SelStart = 0
.SelLength = Len(Textfrais.Text)
End With
Exit Sub
End If


'Pour voir se qui se passe je bascule sur la feuille "mouvement"


'Ici c'est le report de la saisie dans la feuille
With Sheets("mouvement")
.Range("a" & l).Value = Textdate.Value
.Range("b" & l).Value = Combocode.Value
.Range("c" & l).Value = Textnom.Value
.Range("d" & l).Value = Combotype.Value
.Range("e" & l).Value = Combosens.Value
.Range("f" & l).Value = Textquant.Value
.Range("g" & l).Value = Textcours.Value
.Range("h" & l).Value = Textfrais.Value
.Range("h" & l).Value = Texttotal.Value


End With

'Ici je vide les trois TextBox
Textdate.Value = ""
Combocode.Value = ""
Textnom.Value = ""
Combotype.Value = ""
Combosens.Value = ""
Textquant.Value = ""
Textcours.Value = ""
Textfrais.Value = ""
Texttotal.Value = ""

'ici je remets le curseur en textbox1
Textdate.SetFocus
End Sub

'ici c'est le Bouton Exit .........
Private Sub CommandButton2_Click()
Unload UserForm1 'on peut écrire aussi "Unload Me"
End Sub

'Voilà Bye Bye, @+Thierry








Private Sub UserForm_Click()

End Sub
 
V

Vériland

Guest
Re: ca marche pas je bloque

Euh marmotte...pour ce type de post il est préférable de nous joindre un fichier avec la macro...çà nous facilite la tâche et la compréhension...car là on est obligé de tout faire...et...

Zip_XLD.gif
 
M

marmotte

Guest
je joins mon fichier

bonjour ,

je vous joint mon fichier ,j'ai eu un probleme de zip

bon courage avec mon semblant de bordel


marmotte
 

Pièces jointes

  • Classeur1.zip
    18 KB · Affichages: 19
  • Classeur1.zip
    18 KB · Affichages: 24
  • Classeur1.zip
    18 KB · Affichages: 23
@

@+Thierry

Guest
=> DEMO USERFORM Gestion Actions avec calcul et report de données + MAJ Database

Bonjour Marmotte, Moa, Vériland et le Forum !


Euf oui c'est un sacré bazard que tu nous a fait là... En vrac quelques corrections :

CECI :
If Textnom = "" Then
With Textnom
.SetFocus
.SelStart = 0
.SelLength = Len(Textnom.Text)
End With
Exit Sub
End If

=> Non !! en fait si tu dis en VBA "si la textbox est vide, alors tu sélectionnes du premier au dernier caractère en prenant le focus..."si c'est vide comment veux tu sélectionner des caractères !!

Ceci suffit donc :
If Textnom = "" Then
Textnom..SetFocus
Exit Sub
End If


Pour le reste, par exemple TOUS CES :
If Not IsNumeric(Textquant) Then
With Textquant
.SetFocus
.SelStart = 0
.SelLength = Len(Textquant.Text)
End With

=> C'est mieux de les mettre dans l'évènement change de la TextBox, et pas à la fin dans un bouton de validation... Celà permet une inter-activité immédiate entre le user qui tape faux et l'appli.

Il y avait ceci aussi :
If Combosens = "Achat" Then
et ta combobox remplie avec "achat"... qui ne marchait pas...

=> J'ai indiqué en top de module "Option Compare Text" ... Comme çà plus de soucis avec "Achat" ou "aCHAT"...


Pour finir j'ai aussi un conseil d'ordre général, ... Spécial UserForm. Il faut être méthodique et respecter une peu l'ordre Chronologique du déroulement des Opérations... Si on met tout en vrac c'est un bordel ensuite pour s'y retrouver... Tu verras que je respecte toujours une hiérarchie chronologique dans mes modules... Les Codes sont dans l'ordre où les évènements vont se dérouler...

Voilà donc une nouvelle démo, pratiquement complête, avec deux feuilles...
Une feuille "Database" où l'on a les données des actions "Code / Noms / Types"...
Une feuille "Mouvement" où tes données seront reportée à chaque validation.

Les calculs se font en fonction de ce qui a été sélection comme type d'opération "Achat ou Vente"...

J'ai ajouté une checkbox, permettant d'ajouter une nouvelle action dans la database depuis la même saisie... Et comme Vériland me le fesait remarquer hier soir Lien supprimé "je verrais bien le MsgBox du doublon apparaitre avant de confirmer".... c'est ce que je gère donc dans cette nouvelle démo.

Voilà je pense que tu seras satisfait Marmotte !

Bon appétit à tous et toutes !! bonjour au Canada !!
@+Thierry
 

Pièces jointes

  • USF_Gestion-Actions.zip
    24.2 KB · Affichages: 36
V

Vériland

Guest
Bonjour Thierry et le forum...

Tiens vite fait avant la soupe...looool...j'ai regardé ton fichier Thierry et il répond effectivement à la question de la boucle du doublon...Lien supprimé...c'est bon Thanks pour nous...

par contre maintenant dans ce fichier il me semble bien que le format date ne soit pas paramétré d'une manière correcte...je parle de la TextBox "TextDate"...en fait je crois bien qu'tu devrais définir un format date car sur la feuille elle va s'inscrire de cette manière :

07/02/2003 au lieu de 02/07/03...donc c'est le format américain là...le mois avant le jour...hi hi hi

mais bon c'est pour en parler s'agissant d'une démo...c'est davantage pour ne pas perturber Marmotte dans les chiffres...loool

Bon j'file...bon appétit à tous...;-)

A+Veriland.gif


PS : Et de deux...loool
 
@

@+Thierry

Guest
Coucou Vincent, re le fil, le forum


Arf oui merci Vincent, mais il y avait pire que çà !! un énorme bug gros comme une maison...

Le test sur Testbox "Textdate_Change".... rendait toute saisie manuelle de la date impossible... Arf arf, suis passé à coté !! (mais suis pas tout seul !!! lol )

Donc voici la version 1.01 avec correctif, et dans la foulée un format de date bien de chez nous maintenant !!!

Sorry
@+Thierry
 

Pièces jointes

  • USF_Gestion-Actions.V1.01.zip
    24.7 KB · Affichages: 33
V

Vériland

Guest
Arf...ben non t'es pas tout seul...loool...pour la date j'me disais que tu l'avais fait de telle manière pour qu'il n'y ait que la date du jour qui s'inscrive...hi hi hi

Coucou Thierry,

oui c'est bon maintenant...

...mais...y'a encore un mais...loooool

...euh....excuser nous les gars !...mais on teste...hi hi hi

Alors Thierry y'a encore un p'tit détail mais qui je pense peut avoir toute son importance dans ton fichier...il s'agit du test "format numérique"...

je crois bien qu'il serait interressant de faire un test pour voir si les données rentrées dans Quantité/cours/montant des frais etc sont bien numériques...car il ne dit rien si c'est du texte...mais à tous les coups je suis presque sûr que tu travailles en grande partie avec le clavier numérique du clavier (tout comme moi) et j'ai d'ailleurs par ce fait bien noté l'incrémentation des textbox avec la touche <Enter>...bien vu!...lool

Voilà en gros ce qu'il y aurait à dire...si ce n'est...

...!!???!!...

...bon Vériland c'est bon là...on n'a pas besoin de savoir si ta grand-mère fait du vélo !...

...ben non !!!...elle fait de la moto...
smiley_593.gif
...loool

Et pour vraiment parfaire l'ensemble il serait bien d'avoir accès à l'userform uniquement sur la feuille "Mouvement" et non pas sur "Database"...mais bon...c'est un point de vue...lool

Voilà...Ceci dit
smiley_699.gif
...

A+Veriland.gif
 
M

marmotte

Guest
re le forum

j'ai modifier les donnees de combotype car lorsqu'on enregistre une action il n'y avait pas les differents choix que je voulais

pour la date j'avais remarquer mais j'attendais d'etre rendu plus loin pour demander conseil

j'ai un autre souci mais il est peut etre regler je n'est pas encore regarder la version 1.01 .C est a dire que losque je valide avec la touche enter le cuseur ne suit pas l'ordre chronologique de l'userform ,donc y a t'il un moyen pour que le curseur prenne le bon ordre

merci d'avance

un fil bien utile celui la il commencait pas terrible au debut

marmotte
 

Discussions similaires

Statistiques des forums

Discussions
314 017
Messages
2 104 582
Membres
109 082
dernier inscrit
Narlock