Calculs mathématiques depuis Userform

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Bjr Gruick,

sur mon alerte par mail, j'ai le contenu de ton message ;)

Pour ce qui est des points et des virgules, dans l'immédiat je ne pense pas utiliser directement la valeur calculée.
Je cherche actuellement comment construire un convertisseur pour la saisie des valeurs qui sont souvent exprimée en T (terra) G (giga).....
Peut être la fonction convert.....


En tout cas mon projet a l'air d'intéresser du monde et çà c'est plutôt cool car en principe la radioactivité çà fait fuir.
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Re,

j'ai fait qques essais.

Si je saisi une valeur sous la forme 2E-18 ou 15.5E12 c'est ok, çà fonctionne.

Dans l'aide excel, à la rubrique convert, çà parle d'abréviation des préfixes comme "E" pour exa.....

Je vais donc essayer en passant par un p'tit Userform que l'utilisateur sélectionne son préfixe et çà lui donne sa valeur exprimée sous la forme de puissance.


à suivre.
 

Gruick

XLDnaute Accro
Re : Calculs mathématiques depuis Userform

Ouh la la !

Exa, c'est 10 puissance 18, après il y a zetta (10 puissance 21), yotta (10 puissance 24), tu nous emmènes aux confins de l'univers ?
C'est vrai que ton sujet est intéressant, tant du point de vue scientifique qu'informatique. Continues à nous passionner !

Gruick
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

re,

trop rapide pour moi.... merci encore.
je vais abuser, mais parfois on va rencontrer des choses de ce genre 7,4.10-2 Tbq, soit 0.074 Terra Becquerel, donc si on pouvez ajouter une petite cellule avec T (terra), G (giga)...... n (nano), p (pico), là çà serait le top avec un résultat sous la forme 7,4E10 que l'on peut saisir sans problème dans l'userform.

merci d'avance
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Re pierrejean,

pour l'esthétique pour l'instant je ne m'y affaire pas, je regarde tout ce qu'il est possible de faire avec vos conseils et après je penserai la mise en forme.

Il y a une petite erreur dans le calcul. En effet si la textbox2 n'est pas remplie

Code:
 If TextBox2 = "" Then
  val_puiss = 1

mais 10 à la puissance1 * 10 à la puissance 12 = 10 à la puissance 13

Le pb est le même si la combobox n'est pas remplie.

Peut être qu'il faudrait additionner le résultat de la list et de la combo puis lui soustraire 1 ....

Je vais faire à manger pour les enfants et je reviens.

En tout cas merci.
 

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

re,

comme çà c'est ok

Code:
 lavaleur = CDbl(TextBox1) * (10 ^ (val_puiss + pref - 1))
à suivre....

c'est ok si la list ou la combo = "" mais si les 2 sont remplies avec des valeurs différentes de 1 il ne faut pas soustraire 1.. je cherche

comme çà alors :
Code:
 If TextBox2 = "" Or ComboBox1 = "" Then
lavaleur = CDbl(TextBox1) * (10 ^ (val_puiss + pref - 1))
Else: lavaleur = CDbl(TextBox1) * (10 ^ (val_puiss + pref))
End If
 
Dernière édition:

hypo78

XLDnaute Impliqué
Re : Calculs mathématiques depuis Userform

Bonjour tototiti2008,

en principe puissance de zéro = erreur donc je n'ai pas essayé, mais la solution dans mon édit ci dessus fonctionne.

Merci
 

tototiti2008

XLDnaute Barbatruc
Re : Calculs mathématiques depuis Userform

Re,

La seule valeur portée à la puissance zéro qui retourne une erreur c'est... zéro
or ici c'est 10 qu'on porte à la puissance 0, et 10^0=5^0=5000^0=1
 

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 !!!
 

Fichiers joints

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 ;):Voir 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.
 

Discussions similaires


Haut Bas