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

Merci Tototiti de t'interesser au problème :)

Je crois qu'il y avait une erreur dans le valpref= ARRAY
Voir si cela va mieux comme ceci
La puissance et moi ça fait au moins 2 !!!
 

Pièces jointes

  • puiss10.xls
    39 KB · Affichages: 55
  • puiss10.xls
    39 KB · Affichages: 58
  • puiss10.xls
    39 KB · Affichages: 62

ROGER2327

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Bonsoir à tous


(...)
En attendant ,je planche sur: If .Text <> "" Then p = p + 2 ^ (i - 1)
(...)

Cher pierrejean, ne vous cassez pas trop la tête. La boucle
Code:
Dim p As Byte, i As Byte
For i = 1 To 5
    If Me.Controls("TextBox" & (i)).Text <> "" Then p = p + 2 ^ (i - 1)
Next
qu'on peut aussi écrire
Code:
Dim p As Byte, i As Byte
For i = 1 To 5
    p = p - (Me.Controls("TextBox" & (i)).Text <> "") * 2 ^ (i - 1)
Next
renvoie p avec une valeur entière comprise entre 0 et 31 inclus décrivant l'état de chargement des boîtes de texte TextBox1 à TextBox5.
p = 0 : toutes les boîtes sont vides ;
p = 1 : la boîte 1 n'est pas vide, toutes les autres boîtes sont vides ;
p = 2 : la boîte 2 n'est pas vide, toutes les autres boîtes sont vides ;
p = 3 : les boîtes 1 et 2 ne sont pas vides, toutes les autres boîtes sont vides ;
p = 4 : la boîte 3 n'est pas vide, toutes les autres boîtes sont vides ;
p = 5 : les boîtes 1 et 3 ne sont pas vides, toutes les autres boîtes sont vides ;
p = 6 : les boîtes 2 et 3 ne sont pas vides, toutes les autres boîtes sont vides ;
p = 7 : les boîtes 1, 2 et 3 ne sont pas vides, les boîtes 4 et 5 sont vides.
...
p = 31 : aucune boîte n'est vide.

Le résultat est plus clair si on exprime p en base 2 sur cinq chiffres.
Par exemple :
p = 25 base 10 : 11001 base 2 signifie que les boîtes 5, 4 et 1 ne sont pas vides et 3, 2 sont vides.


Cela permet d'appliquer un traitement approprié à chaque situation dans une structure
Code:
Select Case p
End Select
au lieu d'écrire une ribambelle de "Si boîte1 est vide et si boîte 2 et vide etc., etc... alors..." propre à rendre le code illisible.​


Bonne journée,

ROGER2327
#5378


Mardi 17 Décervelage 139 (Saint Mandrin, poète et philosophe - fête Suprême Quarte)
24 Nivôse An CCXX, 0,4473h - cuivre
2012-W02-6T01:04:25Z
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Bonsoir à tous , le fil, le forum


Je me joins à la fête ;):Regarde la pièce jointe PJ4XLD14112.zip[COM]Content de voir tout ce "beau linge dans ce fil[/COM]



NB
: Juste importer l'userform dans VBE pour voir et tester le code.
PS: Je suis parti de la PJ de tototiti2008


VB:
Const pfs As String = " /Tera/Giga/Mega/Nano/pico"
Const vpf As String = "0 12 9 6 -9 -12"
Public prefixes
VB:
Private Sub CommandButton3_Click()
Unload UserForm1
End Sub
VB:
Private Sub UserForm_Initialize()
Dim tbx1 As Byte, tbx2 As Byte: Randomize 1412012
tbx1 = Int((Rnd * 9) + 1): tbx2 = Int((Rnd * 10) + 1)
TextBox1 = tbx1: TextBox2 = tbx2
Me.ComboBox1.List = Application.Transpose(Split(pfs, "/"))
End Sub
VB:
Private Sub CommandButton1_Click()
Dim p As Byte, i As Byte
prefixes = Split(pfs, "/"): valpref = Split(vpf)
pref = valpref(Application.Match(ComboBox1, prefixes, 0) - 1)
On Error Resume Next
val_puis = IIf(IsEmpty(TextBox2), 0, CDbl(TextBox2))
lavaleur = IIf(IsEmpty(TextBox1), 1, CDbl(TextBox1) * (10 ^ val_puiss) * 10 ^ pref)
Label4.Caption = (IIf(lavaleur < 1, lavaleur, Format(lavaleur, "#,##0")))
End Sub
VB:
Private Sub CommandButton2_Click()
gDatas
End Sub
VB:
Sub gDatas()
Randomize 1412012
TextBox1 = Int((Rnd * 9) + 1)
TextBox1 = Int((Rnd * 10) + 1)
End Sub
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Re

Un tout grand Merci à ROBERT pour son explication lumineuse : je retiens la methode visant a repertorier un nbre important de cas differents
Je salue par ailleurs l'autre noctambule (dit aussi l'Agrafe :) :) ) qui nous gratifie de codes aussi elegants qu'efficaces

Edit: Euh !!! je reviens un peu sur l'efficacité des codes "Agrafés" mais je n'ai malheureusement pas le temps d'aller plus loin
 
Dernière édition:

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Bsr ou Bonjour à tous ( à cette heure là je ne sais plus trop....)

il va me falloir quelque temps pour décortiquer toutes vos réponses, comme j'ai la nuit devant moi (si pas trop d'activité opérationnelle) çà tombe bien...

Je reviens vers vous après.

En tout cas, une fois de plus merci à tous pour votre investissement.
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Re,

je reviens déjà après avoir testé vos différentes solutions :

- @ tototiti2008 : #33, la mise en forme du résultat sous cette forme rend la lecture vraiment plus aisée
- @ roger : # 34, çà a l'air d'être une super solution, mais je suis encore très loin de bien comprendre et d'adapter ce genre de code
- @ staple1600 : #35, première chose, je viens d'apprendre que l'on pouvait importer un Userform....:eek:, pour autant les résultats n'ont pas l'air d'être cohérent, je vais "retester" après ce post
-@ pierrejean : # 36, l' Userform revu et corrigé fonctionne bien. Lorsque l'on saisi des chiffres avec des virgules, on est tenté par le point du pavé numérique et du coup : Débogage...:mad:Faut que je retourne au début du post voir comment on peut contourner çà
-@fo_rum : #37, le résultat proposé sous 2 formes est une très bonne idée, je prends.

Je vais me pencher sur le nombre d'Userform dont j'ai besoin (nombre de formules que l'on peut d'utiliser), avant d'attaquer le fichier définitif pour que çà ne ressemble pas trop à un gros "Patchwork"...:p

Merci à tous, bon WE.
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Re,
je vous joins une petite pièce jointe (rien à voir avec le projet définitif), pour vous poser encore quelques questions.

la valeur t s'exprime en secondes. Sur la feuille1 de mon classeur, j'arrive à calculer la différence entre 2 dates et à la convertir en secondes mais en VBA pour l'intégrer à l'userform1??

sur la même feuille j'ai fait un petit tableau pour les conversions de Curie en Becquerel ou l'inverse, De Gray en Rad... mais de là à le mettre en VBA et l'intéger à un Userform??

dernière chose (pour le moment), pour revenir à l'userform qui concerne les puissances de 10 et préfixe, Fo_rum propose un résultat sous 2 formes, je verrai bien une troisieme, exemple 12 000 000 000 ou 12Tera ou 12E+12 (comme sait nous l'annoncer EXCEL dans une cellule de tableur)

Ah j'oubliais : rien d'urgent, profitez de votre dimanche ;)
 

Pièces jointes

  • Rad2.xlsm
    157.7 KB · Affichages: 111
  • Rad2.xlsm
    157.7 KB · Affichages: 114
  • Rad2.xlsm
    157.7 KB · Affichages: 113

ROGER2327

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Re...


Re,

je reviens déjà après avoir testé vos différentes solutions :

(...)
- @ roger : # 34, çà a l'air d'être une super solution, mais je suis encore très loin de bien comprendre et d'adapter ce genre de code
(...)


Le code de #34 est mis en œuvre dans le fichier joint à #16...​


Bonne nuit !


ROGER2327
#5382


Mercredi 18 Décervelage 139 (Saints Pirates et Flibustiers, thaumathurges - fête Suprême Quarte)
25 Nivôse An CCXX, 1,4965h - chat
2012-W02-7T03:35:30Z
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Bjr Roger,

oui j'étais en train de bosser dessus c'est ce que je viens de voir, j'ai même compris l'explication.

j'ai avancé sur l'userform3 pour la présentation du résultat sous les 2 formes, reste à trouver la 3ème, mais mon code n'est pas des plus beau, pour reprendre une expression, c'est plus un Patchwork.... qu'un code construit...

Bonne nuit.
 

Pièces jointes

  • Rad2.xlsm
    155 KB · Affichages: 100
  • Rad2.xlsm
    155 KB · Affichages: 106
  • Rad2.xlsm
    155 KB · Affichages: 108
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Bonjour le fil, bon dimanche à tous

Pierrejean
Re ... Edit: Euh !!! je reviens un peu sur l'efficacité des codes "Agrafés" mais je n'ai malheureusement pas le temps d'aller plus loin
Je me doutais bien que mon code est aussi efficace que je suis doué pour faire des galettes au sarrasin
(pourtant j'en ai tâté du billig ;) )

J'ai déjà évoqué dans plusieurs fils que les maths et moi cela fait quatre ( à mon regret )
Tu peux stp, préciser où sont les grumeaux dans ma pâte VBA soumise plus bas dans le fil ?
 

pierrejean

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Re

@ l'ami Staple
les grumaux n'etaient pas si nombreux:
Il manquait le 1er / dans Const pfs As String = "/Tera/Giga/Mega/Nano/pico" ne serait-ce que pour avoir le même nbre d'items
Ensuite, dans IIf(IsEmpty(TextBox2), 0, CDbl(TextBox2)) , même si TextBox2 est vide Cdbl(TextBox2) est evalué et envoie en Debug
Pour ma part , je n'utilise jamais IIf et meme rarement If .... Then....
je prefere
If
else
end if
Cela allonge certes les macros , mais l'efficacité est rarement liée à la concision (la comprehension non plus)
Par contre il y a bien eu apport (la preuve en est que hypo retient notre version laquelle a demandé un petit ajustement supplementaire voir derniere version)
 

Pièces jointes

  • PJXL.zip
    2 KB · Affichages: 87
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 794
Membres
101 817
dernier inscrit
carvajal