Problème avec une Variable

Résolu
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 - 7 déc. 2005 à 02:46
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 - 7 déc. 2005 à 20:47
Salut...

Pour une raison que j'ignore, j'ai une variable (dbConvert as Double) qui m'indique un nombre bisare.

J'ai un textbox qui est inscrit 229,0343 (ce nombre est en Degré Minute Seconde)
et je veux si je clique sur un optbutton (optDecimal1) que mon textbox se change en Degré Décimal.

Je suis capable sans problème (Grâce à Daniel) de faire l'inverse soit de changer un Degré Décimal en Degré Minute Seconde.

Donc le code j'ai cette ligne
dbConvertOpt = txt1Gisement
mon txt1Gisement = 229,0343
Mais ma variable (dbConvertOpt) = 5,7166666666


Voici mon code

Private Sub optDecimal1_Click()
Dim dbConvertOpt As Double
Dim Degre As Integer, Minute As Integer, Seconde As Integer

dbConvertOpt = txt1Gisement
Degres = Int(txt1Gisement) 'le Int arrondie la valeur (enlève les décimaux)
dbConvertOpt = dbConvertOpt - Degres
dbConvertOpt = dbConvertOpt / 60
minutes = Int(dbConvertOpt) 'le Int arrondie la valeur (enlève les décimaux)
dbConvertOpt = dbConvertOpt - minutes
dbConvertOpt = dbConvertOpt / 60
Secondes = Int(dbConvertOpt)

txt1Gisement.Text = Degres & "°" & minutes & "'" & Secondes & "''"
End Sub

Merci d'avance

6 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 déc. 2005 à 03:55
décimal en Degrés, Minutes, Secondes



dbConvertOpt = 229.061944444

Degres =
Int(txt1Gisement)
229
dbConvertOpt
= dbConvertOpt -
Degres
0.06194444

dbConvertOpt = dbConvertOpt *
60
3.716666667

minutes = Int(dbConvertOpt)
3
dbConvertOpt =
dbConvertOpt -
minutes
0.716666667


dbConvertOpt = dbConvertOpt * 60 43


Secondes =
Int(dbConvertOpt)
43





Resultat = 229.0343





Degrés, Minutes, Secondes en décimal



dbConvertOpt = 229.0343


Degres = nt(txt1Gisement) 229

dbConvertOpt = dbConvertOpt - Degres 0.0343


dbConvertOpt = (dbConvertOpt*10000) / 60 5.716666667

minutes = Int(dbConvertOpt) 5
dbConvertOpt = dbConvertOpt - minutes 0.716666667


dbConvertOpt = (dbConvertOpt*100) / 60 1.1944444
Secondes
=
Int(dbConvertOpt)
1.1944444



Resultat = 229.061944444





pour la conversion inverse il vaut mieux la méthode par chaîne

s = "229.0343"

Lg = Len(s)

MsgBox Left$(s, Lg - 5) + Mid$(s, Lg - 3, 2) / 60 + Right$(s, 2) / 3600



Daniel
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 déc. 2005 à 19:37
Le travail par chaîne est plus facile à comprendre



"229.0343"

"03" --> 3 / 60 = 0.05

"43" --> 43 /3600 = 0.011944444

-------------



0.061944444





Le travail en numérique n'est pas si évident parce que 0.0343 n'est pas un décimal



229.0343 = ddd + mm/100 + ss/10000

supression des degrés

0.0343 = mm/100 + ss/10000

multiplication par 100

343 = 100 * mm + ss

division par 60

5.716666667 = 100 * mm /60 + ss / 60

il faut prouver que 5 représente les minutes décimales

le plus petit mm possible (=1) mm*100/60 sera toujours plus grand que 1

le plus grand ss possible (=59) ss/60 sera toujours plus petit que 1

suppression des minutes décimales

0.716666667 = ss / 60

multiplication par 100

71.6666667 = ss*100 / 60

division par 60

1.1944444 = ss*100 /3600

il ne reste donc plus que les secondes décimales



récapitulatif où mm représente 03 et ss = 43

5 = "03" * 100 / 60

1.1944444 = "43" * 100 / 3600



Daniel
3
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
7 déc. 2005 à 18:25
Rebonjour...

Merci pour la réponse....

et je vais tenir compte de te conseil pour passer de degré minute seconde en décimal de le mettre en chaîne. Bien que je ne saisi pas de faire ça pour le moment.

Mais dans mon message je m'interoge sur la valeur de ma variable dbConvertOpt....

Pourquoi ma variable bdConvertOpt = 5,7166666 et non à la valeur de mon textbox soit 229,0343 ?????????

Dans le programme, j'utilise le même code en modifiant le nom de la variable à plusieurs reprise et ca fonctionne

dbConvertOpt = txt1Gisement
mon txt1Gisement = 229,0343
Mais ma variable (dbConvertOpt) = 5,7166666666

J'attends de tes nouvelles...
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 déc. 2005 à 19:06
quoi ?



un TextBox txt1Gisement qui contient 229,0343

une variable dbConvertOpt As Double





dbConvertOpt = CDbl ( txt1Gisement )

MsgBox dbConvertOpt --> 5.7166666666 ????



ben non c'est pas possible

dbConvertOpt doit contenir 229.0343

c'est une simple conversion chaîne en Double



pour ça il faut un traitement quelque part du genre:

(0.0343 * 10000) / 60 = 5.7166666666

et où sont partis les 229 ????



Ps:

Dim Degres As Integer, Minutes As Integer, Secondes As Integer

parce que Minute est un mot réservé.





Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JeffC1977 Messages postés 928 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 23 septembre 2023 4
7 déc. 2005 à 20:24
Et bien ou je sais que c'est bisare mais je vais revérifier mais le code que j'ai mit dans le premier message est intégrale et ma variable n'est pas `gale à mon textbox

enfin je vais revérifier encore et encore pourquoi ce fais ca... merci encore...
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
7 déc. 2005 à 20:47
1) t'es sûr que c'est une TextBox normale ?

s'il y avait un évênement quelconque qui changerait la TextBox, ça se verrait,

elle serait modifiée et forcément dbConvertOpt aussi.

et sur un Double il n'y a pas d'évênement alors ?

t'as bien fait des MsgBox derrière pour les deux TextBox et variable ?

dbConvertOpt = CDbl ( txt1Gisement .Text)



2) dans la Sub optDecimal1 tu met des degrés en sortie

txt1Gisement.Text = Degres & "°" & minutes & "'" & Secondes & "''"

il y a une inversion de fonction !!!

txt1Gisement.Text = Degres + minutes/100 + Secondes/10000

il s'agit bien d'une valeur décimale



3) la fonction Dégrés, Minutes, Secondes en décimale est fausse



0.0443 --> 0° et 4' et 43""

4/60 = 0.066666666

43/3600 = 0.011944444

----------------


0.078611111 là c'est bon



0.0443 --> 443

443/60 --> 7.38333333

je dois extraire 6.6666666 et non pas 7



la suite est fausse:

0.38333333 --> 38.333333

38.333333/ 60 --> 0.638888883

résultat = 0.07638888883 là c'est faux



parce que les minutes décimales c'est pas un nombre entier

7.38333333 - 6.6666666 = 0.716666733

71.6666733/60 = 0.011944445



4) la fonction décimale en Dégrés, Minutes, Secondes en décimale est bonne

0.078611111 * 60 = 4,71666666

0.71666666*60 = 43''

c'est là qu'il faut mettre Degrés, Minutes, Secondes




Daniel
0
Rejoignez-nous