[Excel 2003] Création d'un fonction sous VBA
Résolu
drizzt22
Messages postés
44
Statut
Membre
-
drizzt22 Messages postés 44 Statut Membre -
drizzt22 Messages postés 44 Statut Membre -
Bonjour,
Je voudrai créer une fonction sous VBA capable de faire le calcul de trois taux. Pour cela j'ai déclaré des variables, mais lorsque je veux faire coincider les valeurs des variables d'entrées à des valeurs contenues dans des textbox cela plante. Pouvez-vous m'aider à corriger mon code?
Voici le code:
Merci d'avance
Cordialement
Je voudrai créer une fonction sous VBA capable de faire le calcul de trois taux. Pour cela j'ai déclaré des variables, mais lorsque je veux faire coincider les valeurs des variables d'entrées à des valeurs contenues dans des textbox cela plante. Pouvez-vous m'aider à corriger mon code?
Voici le code:
Sub calcultrs()
'Déclaration des variables
Dim Tpt As Integer
Dim Tpr As Integer
Dim Pr As Single
Dim Ct As Single
Dim Td As Single
Dim Tp As Single
Dim Trs As Single
'Valeurs des variables d'entrées
Tpt = txt_tpt.Value
Tpr = txt_tpr.Value
Pr = txt_pr.Value
Ct = txt_ct.Value
'Calculs des trois taux en pourcentage
Td = (Tpr / Tpt) * 100
Tp = (((1 / Ct) * Pr) / Tpr) * 100
Trs = Td * Tp * 100
'Affichage des taux dans les textbox
txt_td.Value = Td
txt_tp.Value = Tp
txt_trs.Value = Trs
End Sub
Merci d'avance
Cordialement
2 réponses
-
bonjour,
Ce sont bien des textbox insérées directement dans une feuille et non pas dans un formulaire.
Dans ce cas il faut que la macro soit dans le code de la feuille et non pas dans un module à part.
A vérifier
A+
-
Bonjour à tous
Un textbox renvoyant du texte comme son nom l'indique...
il faut ecrirexxx=(Textbox1)*1
il vaut mieux suivre le conseil de Pilas mais si tu tiens à rester dans un module standard:
With sheets(1) xxx = (.TextBox1) * 1 yyyy = (.TextBox2) * 1 End With.
Mais il serait peut-^tre prudent de vérifier que la saisie dans le textbox est bien un futur integer -
Ce sont bien des textbox inclus dans un formulaire. En fait sur mon userform je vient renseigner les textbox (txt_tpt, txt_tpr, txt_pr, txt_ct), ensuite j'ai un bouton calcul ou je viens cliquer et qui me lance la fonction "calcultrs" si txt_tpt et txt_tpr sont supérieures à 0. Ensuite je veux que les résultats de mes calculs (td, tp, trs) soient visibles dans d'autre texbox (txt_td, txt_tp, txt_trs). J'espere avoir été clair.
J'ai testé en mettant: (txt_tpt)*1 et la meme chose pour les trois autres mais ca ne fonctionne toujours pas.... J'ai une erreur 6: Depassement de capacité sur la premiere ligne de calcul! -
alors là c'est différent.
C'est juste la déclaration qui n'est pas bonne.
Cela veut dire qu'il faut déclarer les variables As Double et non pas As Single
EDIT Pour Info :
Integer Entier jusqu'a 32 767
Long Entier jusqu'à 2 147 483 647
Single Réél jusqu'à 3,14 10puissance 38
Double Réél jusqu'à 1,8 10puissance 308
A tester -
-
-
-
Merci de l'aide que vous me donnez !!
Mon code est a présent comme ce qui suit:
Avec un probleme de division par zero a la premiere ligne de calcul mise en gras. Lors de mes test je rentre bien des valeur dans les textbox.Sub calcultrs() 'Déclaration des variables Dim Tpt As Double Dim Tpr As Double Dim Pr As Double Dim Ct As Double Dim Td As Double Dim Tp As Double Dim Trs As Double 'Valeurs des variables d'entrées Tpt = (txt_tpt) * 1 Tpr = (txt_tpr) * 1 Pr = (txt_pr) * 1 Ct = (txt_ct) * 1 'Calculs des trois taux en pourcentage Td = (Tpr / Tpt) * 100 Tp = (((1 / Ct) * Pr) / Tpr) * 100 Trs = Td * Tp * 100 'Affichage des taux dans les textbox txt_td.Value = Td txt_tp.Value = Tp txt_trs.Value = Trs End Sub-
Bon, il faut se rendre à l'évidence.
Vu comme ça il n'y a aucune raison qu'il y ait une division par zéro si une valeur est bien saisie. Sauf si les texbox sont mal nommées (il y a inversion de nom entre txt_tp et txt_td par exemple.)
Sinon il faut nous déposer le fichier dans www.cjoint.com (en enlevant les données confidentielles) et en postant un lien pour que nous puissions le télécharger. -
-
Je viens de regarder.
Apparemment on revient a ma première réponse.
En fait la macro est dans un module à part. c'est un problème de portée de variables.
Il faut transporter la macro calcultrs dans le code de l'Userform.
Ou bien préfixer les champs par le nom de l'Userform comme ceci :
Tpt = UserForm1.txt_tpt
Tpr = UserForm1.txt_tpr
Pr = UserForm1.txt_pr
Ct = UserForm1.txt_ct
A tester -
Modifs à apporter à tes code
dans l'usfPrivate Sub calcul_Click() If txt_tpt.Value <= 0 Then MsgBox ("la valeur du temps de production théorique doit être supérieure à 0") If txt_tpr.Value <= 0 Then MsgBox ("la valeur du temps de production réelle doit être supérieure à 0") If txt_tpt.Value > 0 And txt_tpr.Value > 0 Then tpt = (txt_tpt) * 1 Tpr = (txt_tpr) * 1 Pr = (txt_pr) * 1 Ct = (txt_ct) * 1 calcultrs End If
dans le module standard
Public tpt As integer Public Tpr As integer Public Pr As integer Public Ct As integer Sub calcultrs() 'Déclaration des variables Dim Td As Double Dim Tp As Double Dim Trs As Double ....etc -
-