[Excel 2003] Création d'un fonction sous VBA
Résolu/Fermé
drizzt22
Messages postés
41
Date d'inscription
jeudi 26 juillet 2012
Statut
Membre
Dernière intervention
20 février 2018
-
21 mars 2013 à 11:50
drizzt22 Messages postés 41 Date d'inscription jeudi 26 juillet 2012 Statut Membre Dernière intervention 20 février 2018 - 21 mars 2013 à 15:38
drizzt22 Messages postés 41 Date d'inscription jeudi 26 juillet 2012 Statut Membre Dernière intervention 20 février 2018 - 21 mars 2013 à 15:38
A voir également:
- [Excel 2003] Création d'un fonction sous VBA
- Excel fonction si et - Guide
- Liste déroulante excel - Guide
- Fonction moyenne excel - Guide
- Creation compte gmail - Guide
- Création compte google - Guide
2 réponses
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
21 mars 2013 à 12:23
21 mars 2013 à 12:23
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+
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+
drizzt22
Messages postés
41
Date d'inscription
jeudi 26 juillet 2012
Statut
Membre
Dernière intervention
20 février 2018
1
21 mars 2013 à 14:15
21 mars 2013 à 14:15
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.
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
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
Modifié par pilas31 le 21/03/2013 à 14:36
Modifié par pilas31 le 21/03/2013 à 14:36
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.
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.
drizzt22
Messages postés
41
Date d'inscription
jeudi 26 juillet 2012
Statut
Membre
Dernière intervention
20 février 2018
1
21 mars 2013 à 14:45
21 mars 2013 à 14:45
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
Modifié par pilas31 le 21/03/2013 à 14:58
Modifié par pilas31 le 21/03/2013 à 14:58
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
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 311
Modifié par michel_m le 21/03/2013 à 15:08
Modifié par michel_m le 21/03/2013 à 15:08
Modifs à apporter à tes code
dans l'usf
dans le module standard
dans l'usf
Private 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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 311
Modifié par michel_m le 21/03/2013 à 15:23
Modifié par michel_m le 21/03/2013 à 15:23
Je n'avais pas testé jusqu'au bout
tu passes Td, Tp, Trs en variables publiques
et
dans
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
txt_td.Text = Td
txt_tp.Text = Tp
txt_trs.Text = Trs
End If
tu passes Td, Tp, Trs en variables publiques
et
dans
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
txt_td.Text = Td
txt_tp.Text = Tp
txt_trs.Text = Trs
End If
Modifié par michel_m le 21/03/2013 à 12:44
Un textbox renvoyant du texte comme son nom l'indique...
il faut ecrire
il vaut mieux suivre le conseil de Pilas mais si tu tiens à rester dans un module standard:
Mais il serait peut-^tre prudent de vérifier que la saisie dans le textbox est bien un futur integer
21 mars 2013 à 13:58
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!
Modifié par pilas31 le 21/03/2013 à 14:11
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
21 mars 2013 à 14:10
En fait ce qui est bizarre c'est que le logiciel me dit que la premiere ligne de calcul est une division par zero : Td = (Tpr / Tpt) * 100
Alors que je met bien une valeur dans la txt_tpt et la txt_tpr aussi lors du test.
21 mars 2013 à 14:29
Essayer de remplacer la ligne en erreur par :
Tpt = CInt(txt_tpt.Value)
Au fait Il s'agit bien d'un entier qui est saisi dans txt_tpt ?