Calculs mathématiques depuis Userform

hypo78

XLDnaute Impliqué
Bonjour à tous,

je débute un nouveau projet sur la base de calcul autour de la radioactivité.
Dans l'exemple ci-joint, vous trouverez un userform dans lequel on doit saisir des données (3 ou 4).
En fonction de l'utilisation, nous n'aurons pas toujours les mêmes données.
D'où ma question : comment obtenir un résultat de calcul dès que l'on a assez de données?

Je sais que ce n'est pas clair, mais c'est pas facile à expliquer, l'exemple sera beaucoup plus parlant.

Merci d'avance.

Viendra après le temps des conversions......
 

Pièces jointes

  • Rad.xlsm
    16.2 KB · Affichages: 146
  • Rad.xlsm
    16.2 KB · Affichages: 148
  • Rad.xlsm
    16.2 KB · Affichages: 147

pierrejean

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Re

J'ai revu ton code pour avoir les années mois .... en secondes qui n'affichait qu'a partir d'1 année
Pour la seconde question je verrai cet a-m
 

Pièces jointes

  • rad3.xls
    335 KB · Affichages: 104
  • rad3.xls
    335 KB · Affichages: 109
  • rad3.xls
    335 KB · Affichages: 114

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Bonjour PierreJean,

merci pour cette modif et l'astuce du module2 pour le numberformat.

Je vais essayer d'épurer la partie de mon code avec les formules pour les Textbox de 1 à 8, pour voir où çà coince.

Cordialement.
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Re,

exemple concret :
je saisis :
A0 =500
A1 = 125
-> n se calcule
je continue ma saisie :
T = 60
Lambda se calcule

Dans ce cas t devrait se calculer, mais pour que ce soit le cas il faut resaisir une des données.

Peut être une solution avec une boucle?

En pièce jointe seulement la partie qui concerne la question.
 

Pièces jointes

  • userform1.xls
    258.5 KB · Affichages: 106
  • userform1.xls
    258.5 KB · Affichages: 98
  • userform1.xls
    258.5 KB · Affichages: 102

Gruick

XLDnaute Accro
Re : Calculs mathématiques depuis Userform

Bonjour,

le t qui est rétif, c'est parce que une fois qu'un "case" est repéré, et calculé, VBA va à EndSelect. Il faut donc redonner une autre valeur à p après ton calcul du lambda, (j'ai pris 19, ça marche) et lui faire refaire le calcul en retournant sur SelectCase p grâce à un GoTo suivi d'une étiquette préalablement définie.

Gruick
Code:
P:    Select Case P
    'calcul de n
    Case 12, 31: Me.TextBox6.Value = Format(CDbl(Me.TextBox4.Value) / CDbl(Me.TextBox3.Value), "0.00")
    Case 3: Me.TextBox6.Value = Format(Log(CDbl(Me.TextBox1.Value) / CDbl(Me.TextBox2.Value)) / Log(2), "0.00")
    'calcul de lambda
    Case 4, 5, 7, 39: Me.TextBox5.Value = Format(Log(2) / CDbl(Me.TextBox3.Value), "0.00E+00")
    P = 19: GoTo P
    'calcul de A1
    Case 33: Me.TextBox2.Value = Format(CDbl(Me.TextBox1.Value) / (2) ^ CDbl(Me.TextBox6.Value), "0.00E+00")
    Case 25, 61: Me.TextBox2.Value = Format(CDbl(Me.TextBox1.Value) * Exp(-(CDbl(Me.TextBox5.Value) * CDbl(Me.TextBox4.Value))), "0.00E+00")
    'calcul de t
    Case 19, 23, 55: Me.TextBox4.Value = Format(Log(CDbl(Me.TextBox1.Value) / CDbl(Me.TextBox2.Value)) / CDbl(Me.TextBox5.Value), "0.00E+00")
    'calcul de A0
    Case 26, 30: Me.TextBox1.Value = CDbl(Me.TextBox2.Value) / Exp(-(CDbl(Me.TextBox5.Value) * CDbl(Me.TextBox4.Value)))
    Case 14, 46, 62, 34: Me.TextBox1.Value = CDbl(Me.TextBox2.Value) * (2) ^ (Me.TextBox6.Value)
    'calcul de A depuis la masse
    Case 212: Me.TextBox1.Value = CDbl(Me.TextBox5.Value) * (6.023 * 10 ^ 23) * (CDbl(Me.TextBox7.Value) / CDbl(Me.TextBox8.Value))
    
    Case Else: For i = 1 To 8: Me.Controls("TextBox" & (i)).ForeColor = 255: Next
    End Select
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Re


Pour ma part , je vois les choses plus simplement :
le case supporte bien 2 (ou plus) calculs successifs
Si le resultat du 1er calcul en permet un autre , ce dernier peut etre mis dans le même case
Voir ton exemple : A0 puis A1 puis T dans le fichier joint
 

Pièces jointes

  • userform1.xls
    260.5 KB · Affichages: 112
  • userform1.xls
    260.5 KB · Affichages: 113
  • userform1.xls
    260.5 KB · Affichages: 110
Dernière édition:

Gruick

XLDnaute Accro
Re : Calculs mathématiques depuis Userform

re,

Goret, c'est gentil, j'ai la couenne un peu dure maintenant...
Alors, j'avais essayé ta solution en premier qui paraissait évidente, et ça ne marchait pas. J'ai du oublier un truc.
Je suis rassuré.

A plus

Gruick
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Bsr,

merci une fois de plus pour votre contribution. Il me semblait aussi avoir essayé cette solution sans succés, pas un pro des codes... mais bon j'avance, j'arrive à avoir l'idée mais encore un peu de mal à traduire.
je vais présenter l'outil à mes collègues spécialistes la semaine prochaine (sans manquer de faire référence à votre aide et votre savoir), et il y a donc de grandes chances que je revienne vers vous en fonction de leurs remarques et suggestions.

je vous souhaite à tous un bon WE, et vous remercie encore une fois pour votre disponibilité et vos compétences.

Cordialement
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Bonjour,

je reviens plus tot que prévu :eek:
le case supporte bien 2 (ou plus) calculs successifs
Si le resultat du 1er calcul en permet un autre , ce dernier peut etre mis dans le même case

Mais si le 2ème calcul n'est pas possible par manque de donnée, on se retrouve avec le message d'erreur.

Je pensais donc mettre entre les 2 lignes de calcul :
If textbox1 <>"" then le 2ème calcul
Else ???

Else quoi?

Merci
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Pour revenir sur le pb du post #78 et suivant,

je pense vraiment qu'il faudrait faire une boucle après chaque Case effectuant un calcul, car après essai, la situation se présente assez souvent, ce qui m'obligerait à mettre 4 ou 5 calculs par Case et donc avoir un message à acquitter régulièrement quand les calculs suivants ne sont pas possibles....

En me relisant, je ne sais pas si je suis très clair...;)

Edit pour rependre l'idee de Gruick, si à la fin de chaque on met

p<> 1: Goto P çà peut marcher?
 
Dernière édition:

Gruick

XLDnaute Accro
Re : Calculs mathématiques depuis Userform

Bon dimanche,

On revient à l'origine du post, finalement. Il faut 3 données pour en calculer une quatrième. A0, A1 et lambda pour trouver t, ou A0, t et lambda pour calculer A1... comme je disais, le serpent qui se mord la queue.
Pierre a raison, et il faudrait examiner tous les cas, pour simplifier le programme. Je n'étais pas un fan des "case" et leur appel "binaire", bien que je trouve ça extraordinaire, mais pointu, mais intéressant. A suivre

Gruick
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Re,

je crois que la solution la plus simple et d'ajouter un bouton "relancer le calcul", qui lance la macro calc.
J'ai fait un essai rapido, çà à l'air de fonctionner. Je teste en long en large et en travers demain et je reviens.

Bonne fin de WE
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Bjr,

donc j'ai testé sur plusieurs exercices, en saisissant les données dans différents ordres, et avec ce bouton "relancer le calcul", je n'ai rencontré aucun problème. On s'écarte un tout petit peu du souhait de départ, mais je pense qu'on se simplifie la "vie".

petite question, lors de la saisie dans la textbox3, pour une écriture et une lecture plus aisée, nous avons adopté le format "#.##0".

J'ai voulu en faire de même dans les textbox 1,2 et 4 mais çà ne fonctionne pas. Pourquoi?

Code:
Private Sub TextBox1Change()
TextBox1 = Format(TextBox1, "#,##0")
End Sub
Private Sub TextBox2Change()
TextBox2 = Format(TextBox2, "#,##0")
End Sub
Private Sub TextBox3_Change()
TextBox3 = Format(TextBox3, "#,##0")
End Sub
Private Sub TextBox4Change()
TextBox4 = Format(TextBox4, "#,##0")
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof