![]() |
|
Forum
|
|
|
#1 (permalink) |
|
Guest
Messages: n/a
|
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 |
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#4 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#5 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#6 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#9 (permalink) |
|
Guest
Messages: n/a
|
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 pour une autre démo "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 |
|
|
#10 (permalink) |
|
Guest
Messages: n/a
|
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...sur cette démo...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 himais 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...;-) PS : Et de deux...loool |
|
|
#13 (permalink) |
|
Guest
Messages: n/a
|
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 |
|
|
#14 (permalink) |
|
Guest
Messages: n/a
|
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... ...looolEt 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 ...![]() |
|
|
#15 (permalink) |
|
Guest
Messages: n/a
|
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 |
| ANNONCES | |
| Liens sociaux |
| Outils de la discussion | |
|
|