Calcul dans textbox
Bonjour à tous
Nouveau sur ce forum et en VBA Excel, je suis en train de me lancer dans une aventure qui je ne sais pas qd elle prendra fin, enfin bon.
Pour faire bref, j'utilise excel pour me faire des devis et j'utilise VBA pour me faciliter le travail.
Pour cela, je m'inspire, pour ceux qui connaissent peut-être, de Batigest et de ciel auto-entrepreneur qui est une version allégée de Batigest, malheureusement trop allégée à mon goût. Batigest, quant à lui est une usine à gaz.
Donc voilà, mon problème aujourd'hui est que j'ai créer un userform avec plusieurs textbox et j'aimerai savoir s'il y a possibilité de faire des calculs dans une même textbox , que les résultats s'affichent dans une autre textbox et le total dans une autre, comme dans l'exemple ci-dessous mise à part qu'il n'y aura pas la textbox déduction.
Sachant que dans l'avenir, je voudrai pré-remplir ces textbox avec du texte : par exemple "Surface de mur" qui se remplacera automatiquement par des valeurs que j'aurais inscrites dans un tableau.
Voili, voilou, si quelqu'un pouvait m'apporter la réponse qui me convient, ça serait vraiment formidable car j'ai l'impression que j'en demande bcq à VBA pour un débutant.
Merci d'avance à tous
Manu
Bonsoir,
Si tu veux que l'on puisse clairement répondre à une question, il faut de ton côté l'expliciter un peu plus clairement et l'illustrer avec un classeur qui permettra de voir ce qu'il en est réellement...
Tu dois peut-être déjà comprendre que ton titre est impropre : tout calcul se fait (en restant dans le contexte Excel VBA) à partir des instructions que tu donnes que VBA exécute... et c'est le coprocesseur arithmétique de ta machine qui le fournira. Soit il ne se passe pas dans tel objet ou tel autre. De plus une TextBox ne saurait contenir que du texte, quoi que tu y mettes.
Ceci étant tu peux tout faire avec tout, à condition de donner les instructions adéquates : prendre le contenu d'une TextBox, le convertir en nombre (s'il est convertible), opérer un calcul avec ce nombre, le remettre dans la TextBox, ou dans une autre ou ailleurs, ou le garder dans une variable pour le reprendre plus tard...
Ton dessin, on ne sait même pas quel type d'objet il représente, ni si c'en est un. Fournis un classeur illustrant la problématique que tu veux résoudre avec toutes les explications nécessaires.
Cordialement.
Salut M Ferrand,
Tout d'abord merci pour ta réponse.
Alors je vais essayé de te donner un peu plus de détails même si je t'avoue que je n'ai pas saisi tout ce que tu me dis.
L'userform que j'ai créé fait parti de ma page devis et je souhaite qu'il me serve à calculer des quantités quand il y a beaucoup de choses, plutôt que de sortir la calculatrice en fait et de façon à ce que je puisse également revenir dessus si je veux modifier mes calculs.
En gros, quand je clique sur une cellule d'une certaine colonne (soit la colonne quantité), il m'ouvre cet userform qui ressemble à l'image que j'ai mis. Je voudrai ainsi pouvoir effectuer mes calculs dans la textbox "descriptif " et que ça me calcule les totaux tout seul, toujours comme dans l'image que j'ai mis.
Ensuite, la cellule sélectionnée prendrait la valeur de mon total calculé une fois que j'aurai cliqué sur ok.
Pour le moment, je n'ai créé que l'userform et tapé le "programme" pour qu'il s'ouvre qd je clique sur la cellule :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("F18:F300")) Is Nothing Then
UserForm1.Show
End If
End Sub
Après, si une textbox ne sert qu'à mettre du texte, est ce qu'il n'y a pas de box pour faire des calculs ?
En parcourant un peu sur internet, j'ai vu qu'on pouvait effectuer des calculs entre plusieurs textbox mais rien vu pour faire dans la même textbox.
Voilà en gros, je ne sais pas si j'ai pu t'éclairer sur ce que je veux faire mais si tu peux m'apporter des bouts de réponses déjà, je te serais reconnaissant. Je commence tout juste à me coller à VBA et je trouve ça passionnant, je suis très loin d'être un pro et de tout comprendre encore mais petit à petit, je vais bien finir par y arriver.
Merci à toi en tout cas
L'userform que j'ai créé fait parti de ma page devis
Je crois en effet que l'essentiel t'échappe... Un Userform ne peut pas faire partie de ta feuille Excel. C'est un objet indépendant, application que tu peux utiliser avec VBA (mais d'ailleurs pas directement avec Excel). Si tu mets un contrôle ActiveX sur ta feuille Excel, TextBox par exemple, ce sera un objet OLE incorporé, qui apparaîtra sur la feuille comme toutes formes dessinées... Il y a bien un lien avec la feuille, mais pour t'en servir ou le manipuler, il te faudra utiliser VBA, parce que Excel ne fait que l'accueillir. Le Userform, lui a un lien avec le classeur parce que tu le crées dans le cadre d'un projet VBA lié à un classeur, qui te permet de l'utiliser dans l'application Excel, mais il n'a jamais de lien avec telle ou telle feuille.
De même, dans les TextBox que tu poses sur ta feuille, tu peux saisir ce que tu veux, tous les nombres que tu veux, ça ne fera jamais aucun calcul, ce n'est pas prévu pour ça.
Cela se passe différemment dans les cellules de ta feuille parce que derrière il y a un programme prévu pour interpréter ce que tu tapes, et réaliser les calculs si tu tapes une formule par exemple. Le programme interprète tes directives, fait appel aux ressources de ton ordinateur pour fournir le résultat et te l'affiches dans la cellule.
Rien de tel dans un userform. Il est inerte tant que tu ne le dotes pas d'un programme. Si tu veux qu'il calcule, il faut construire un programme de calcul. Les TextBox n'ont pas d'autres fonctions que d'afficher ce que tu tapes, ou ce que le programme leur dit d'afficher. Ils ne font rien.
Les cellules de la feuille n'en font pas plus d'ailleurs ! Elles affichent, mais le programme Excel est là...
Bref ! Il faut comprendre que tu utilises une interface, pour saisir ou pour afficher. Le calcul qui s'opère éventuellement entre les deux se passe toujours en dehors, ailleurs. Il ne dépend pas des support sur lesquels tu verras le résultat, mais uniquement du programme qui le commande...
Revenons en à ton Userform, il est vide (du moins il ne fera rien), tant que tu n'as pas construit le programme qui opèrera ce que tu attends en utilisant le Userform pour te restituer les résultats après avoir recueilli les demandes que tu auras formulées en utilisant également le Userform pour saisir et commander telle ou telle action.
Tu as peut-être récupéré un module Userform élaboré prévu pour un certain nombre de choses, et tu voudrais que ça réagisse autrement, mais tu n'es pas en mesure d'apporter les modifications nécessaires pour cela. A distance on ne le sera pas non plus. IL faut examiner sa composition et sa programmation pour voir s'il peut répondre à ta demande sans affecter les fonctionnalités pour lesquelles il a été construit.
Cordialement.
Salut MFerrand,
Encore une fois, merci pour le temps que tu m'accordes.
Je pense qu'il est nécessaire que je t'explique où j'en suis au niveau de mon apprentissage de VBA.
J'ai lu un bouquin où il est tout expliqué sur les variables, les conditions, les boucles...et j'ai aussi bien entendu acquis un peu de vocabulaire. Bref, ça ressemble un peu au langage des calculatrices style casio graph35 ou + dans lequel je m'étais bien perfectionné quand j'étais au lycée.
Cependant je galère à écrire le programme alors j'évolue maintenant en essayant de combiner des trucs que je trouve sur internet et les modifie à ma sauce.
En fait, je pêche car je ne sais pas réellement où je dois écrire les différentes choses de mon programme :
- Quand cela concerne la feuille elle même, je vais dans Microsoft Excel Objets/Feuil, je tape mon truc et encore je ne sais pas si tout mon programme doit commencer par sub et finir par EndSub ou si je peux taper plusieurs programmes d'affilé avec plusieurs Sub et End Sub.
- En ce qui concerne les userform, je pense comprendre ce que tu m'as expliqué, en effet il ne fait pas parti de la feuille, je l'appelle via mon programme, mais là encore même problème, où dois-je taper le programme qui dit ce qu'il doit se passer dans les différentes textbox de mon userform ?
En ce qui concerne le calcul, j'ai testé un truc que j'ai trouvé sur internet et ça commence à ressembler à ce que je veux :
Private Sub TextBox1_Change()
Text = Split(TextBox1, "+") 'crée un tableau de caractères rupture par le signe "+"
For a = 0 To UBound(Text)
somme = somme + Val(Text(a))
Next a
TextBox2 = somme
End Sub
J'ai également mis multiline = True dans les propriétés de ma textbox.
Il faudrait encore que j'arrive à y intégrer les soustractions, multiplications et divisions, ce qui n'est pas gagné encore à mon niveau, je te l'accorde.
De plus, je pense qu'il faudrait que je me créé une feuille pour conserver toutes ces données si veux pouvoir les modifier à n'importe quel moment quand je clique sur n'importe quelle cellule qui ouvre mon userform et dont les données peuvent être différentes à chaque fois.
Voili, voilou, ce n'est pas gagné mais je vais y arriver même si je pense que ta patience à des limites et que tu m'auras abandonné avant. J'espère cependant que tu commences à comprendre ce que je veux faire.
Merci encore à toi pour ton aide,
Manu
et encore je ne sais pas si tout mon programme doit commencer par sub et finir par EndSub ou si je peux taper plusieurs programmes d'affilé avec plusieurs Sub et End Sub.
Tout le code exécutable doit être inclus dans les procédures.
On distingue 3 types de procédures : les procédures Sub, les procédures Function, et les procédures Property (qu'on laissera de côté pour l'instant !
Les Sub exécutent des instructions, les Function exécutent également des instructions mais peuvent en outre renvoyer un résultat, ce qui les fait habituellement utiliser à droite d'un signe =.
Hors procédures, il nepeut y avoir de code exécutable, seulement des déclarations : options au niveau module, variables de niveau module, déclarations d'appels de fonctions API...
Se méfier de tout ce que tu peux trouver sur internet, en dehors des cours et tutos des sites spécialisés connus, et ne jamais oublier que la première source de documentation est l'Aide de VBA, toujours disponible à tout moment sous la main... qu'il faut apprendre à utiliser, et plus on de connaissance, plus on s'en servira, efficacement !
Comme je l'ai déjà dit, faire un calcul consiste à bâtir une procédure de calcul ! S'agissant d'un calcul, on a des opérandes en entrée de la procédure, et éventuellement des paramétres indiquant le calcul que l'on veut (là faut savoir ce que l'on veut pour le programmer et que la proc. puisse le faire !) et en sortie on a un résultat de calcul.
La proc. fera toujours le calcul souhaité avec les arguments qu'on lui passe en entrée et on récupèrera le résultat à la sortie. Ce, quel que soit l'emplacement où l'on va prendre les infos à lui transmettre et quel que soit l'emplacement ou ce que l'on va faire du résultat, qui sont des problèmes bien distincts du calcul.
Je pense que tu n'as pas fait une analyse suffisamment structurée de ton projet avant de passer à la phase réalisation. Ce que l'on a omis de penser avant a peu de chances de se retrouver à l'arrivée. On ne peut ensuite que mettre des rustines et le résultat sera d'une qualité douteuse...
Cela ne me gêne pas de fournir des conseils d'ordre général...