cs_Fabian123
Messages postés180Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention22 novembre 2013
-
13 févr. 2008 à 10:59
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024
-
13 févr. 2008 à 14:01
Bonjour,
me revoici avec un nouveau probleme sur vba excel...!
Je vais essayer d'expliquer mon probleme clairement (pas facile!).
J'ai introduit dans une feuille excel un tableau de deux colonnes, une avec les intitulés d'articles, l'autre avec leurs pris unitaires.
Dans une autre feuille du classeur, j'ai créé des commandbutton (un par article) et un commandbutton pour annuler, une ListBox et une TextBox.
Lorsque je clique sur l'article, il m'affiche l'intitulé et le prix unitaire dans la ListBox et il affiche le prix dans la TextBox. Si je reclique dessus, il m'affiche une seconde ligne dans la ListBox et il additionne le prix dans la TextBox.
Lorsque je sélectionne une ligne dans la ListBox et que je clique sur le bouton "annuler" il supprime cette ligne.
J'en arrive à ma question, est-il possible, en plus de supprimer cette ligne, que lorsque je clique sur ce bouton, qu'il déduise le montant de l'article de la TextBox?
Je vous laisse ci dessous les codes que j'ai utilisés...
End Sub
Private Sub CommandButton5_Click()
'Ensure ListBox contains list items
If ListBox1.ListCount >= 1 Then
'If no selection, choose last list item.
If ListBox1.ListIndex = -1 Then
ListBox1.ListIndex = _
ListBox1.ListCount - 1
End If
ListBox1.RemoveItem (ListBox1.ListIndex)
End If
End Sub
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 13 févr. 2008 à 11:31
Bonjour
- Evite les noms par défaut (CommandButton4 est moins explicite que CmdAddElement)
- Aucun commentaire, à quoi servent chaque gestionnaire d'évenement, on n'est pas devin ?
Ensuite on verra ce que l'on peux faire.
nb : penses à coloriser ton code, colorisation dispo à ce lien, il sera plus lisible.
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 13 févr. 2008 à 11:34
Si j'étais toi, je repenserais tout le principe...
Ça ne sert à rien de surcharger une feuille de boutons et autres contrôles. De plus ça risque de ralentir le programme passablement. Les contrôles graphiques sont gourmands sous Excel. Et comme il n'y a pas de groupes de contrôles sous Excel (avec Index), tu devras ajouter de nouveaux boutons et créer une nouvelle procédure pour chacun d'eux...
Si tu tiens à mettre les contrôles sur la feuille plutôt que d'utiliser un UserForm, c'est ton choix. Mais tu pourrais n'avoir qu'un seul bouton pour ajouter des articles et te servir de la ligne courante (cellule sélectionnée) avec ActiveCell.Row
Ça t'éviterait d'utiliser des adresses fixes comme A2, A3,...
Finalement, donne des noms plus représentatifs à tes contrôles. Pour moi qui lit ton code, CommandButton1 ne me dit rien; je dois lire le code pour savoir où j'en suis...
MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
cs_Fabian123
Messages postés180Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention22 novembre 2013 13 févr. 2008 à 12:06
Excusez moi de ne pas être très clair... je suis débutant, et je trouve mes codes sur base de l'aide Visual Basic dans microsoft...
Je pars généralement sur des copié/collé de leurs exemples et j'essaye de les adapter à mes problèmes!
Concernant la surcharge de bouton, je souhaitais que chaque article corresponde à un bouton sur lequel était affiché l'image de l'article (plus simple à trouver lors de l'encodage...) un peu comme une caisse enregistreuse (est-ce que tu penses qu'il y aurait une méthode plus simple? Encore une fois je suis débutant et je ne comprend pas toujours toutes les possibilités offerte!)
Concernant le nom des Bouttons (excusez moi encore de ne pas être plus clair!) les CommandButtons 1 à 4 correspondent à des articles (article 1 à 4!), ces articles se trouvant dans la colonnes A et en regard de ces articles, dans la colonne B, on trouve leurs prix (respectivement 1, 2, 3 et 4 ?)
J'esperes avoir été plus clair et encore merci de m'aider.
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 13 févr. 2008 à 12:18
Bonjour
De base, je dirais que ce code :
TextBox1.Value = TextBox1.Value + WorkSheets(4).Range("B5") & "?"
est un peu risqué, le mieux est de transtyper avant d'utiliser la valeur :
TextBox1.Value = cstr(csng(left$(TextBox1.Value,len(TextBox1.Value)-1) + csng(WorkSheets(4).Range("B5"))) & "?"
En utilisant l'evenement Change de la WorkSheet, tu peux par exemple déterminer si la personne à décider d'ajouter un article (en repérant par exemple un "X" mis dans la troisième colonne), et pour l'image, je pense qu'Excel estdans la capacité de s'en occupé.
Sinon, regarde pour utiliser une Combobox liée à une PictureBox pour afficher l'image dans une UserForm.
MPI -> Je pense que le code est déjà dans une UserForm, car tous les gestionnaire d'event sont en Private.
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
cs_Fabian123
Messages postés180Date d'inscriptionvendredi 18 janvier 2008StatutMembreDernière intervention22 novembre 2013 13 févr. 2008 à 13:08
Merci NHenry pour ton aide; Est-ce que tu peux me dire pourquoi le code
TextBox1.Value = TextBox1.Value + WorkSheets(4).Range("B5") & "?"
est risqué?
Une question : ça veut dire quoi : "transtyper avant d'utiliser la valeur"?! (je suis désolé, mais ce sont des termes qui me... dépassent!)
Merci pour ton nouveau code! (je n'aurais jamais trouvé ça seul...)
Concernant mes boutons, ils sont bien dans une feuille excel... Je ne peux pas les laisser en Private? (je suis désolé de poser des questions idiotes, mais quelle est la différence entre Private et Public? )
NHenry
Messages postés15102Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention27 mars 2024159 13 févr. 2008 à 14:01
Bonjour
Le + avec le .Value, risque (dans certains cas) de concaténer des String et non d'additionnner dee nombres.
Transtyper, changer de type : String -> Long per exemple
Private permet de ne pas permettre d'utiliser la procédure/fonction/variable d'un module/form/classe à partir d'un autre module/form/classe.
Public lui parcontre permet d'utiliser cet élément de code dans tout le projet.
(Un petit tour par l'aide est possible).
Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site