1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| Option Explicit
Public Const F_DM = "Table_Echange"
Public Const F_UINT = "Export_UINT"
Public Const F_UINTBCD = "Export_UINT_BCD"
Public Const F_REAL = "Export_REAL"
Public Const F_MAJ = "SUIVI_MODIF"
Public Const F_LEG = "LEGENDE"
Public Const Ndepart = 2
Public Const Categorie1 = "Télé-Réglage"
Public Const T_UINT = "UINT"
Public Const T_UINT_BCD = "UINT_BCD"
Public Const T_REAL = "REAL"
Public Const ColDM = "G"
Public Const ColReg = "P"
'==== Conversion decimal en binaire
Function DECBIN(Val As Variant) '
Dim Bin As String
Dim A As String
Do Until Int(Val) = 0
If Val Mod 2 = 0 Then ' est pair
A = 0
Bin = A & Bin
Val = Val / 2
Else ' est impair
A = 1
Bin = A & Bin
Val = (Val - 1) / 2
End If
Loop
DECBIN = Bin
End Function
'==== Conversion binaire en decimal
Function BINDEC(ValBin As String)
Dim n, i, p As Integer
Dim Dec, A As Variant
n = Len(ValBin)
For i = 1 To n
p = i - 1 ' p sert d'exposant et de décalage , la position des caractères va de 1 à n alors l'exposant va de 0 à n-1
A = Mid(ValBin, n - p, 1)
If A = 0 Then ' on fait rien
Else
Dec = Dec + (2 ^ p)
End If
Next i
BINDEC = Dec
End Function
'======== conversion reel en binaire
Function REEL(Valeur As Variant) '
Dim c, m, E As Double
Dim cpt As Integer
Dim BinM, BinE As String
Dim A, Signe As String
'==test du signe
If Valeur < 0 Then
Signe = 1
Else
Signe = 0
End If
Valeur = Abs(Valeur)
Do Until Int(Valeur) = 1 Or c = 23
Valeur = Valeur / 2
c = c + 1 ' compteur pour le petit e
If Int(Valeur) = 1 Then
m = Valeur - 1 ' récupération de la mantisse
ElseIf c = 23 Then
m = Valeur - Int(Valeur)
Else
End If
Loop
E = c + 127
'MsgBox "Exposant = " & E & " / Mantice = " & m
' ==conversion de la mantisse en binaire
Do Until cpt = 23
m = m * 2
If Int(m) = 1 Then
BinM = BinM & Int(m)
m = m - Int(m)
Else
BinM = BinM & Int(m)
End If
cpt = cpt + 1
Loop
REEL = Signe & DECBIN(E) & BinM
MsgBox REEL
'Reel = CStr(Reel)
Range("A1").Value = REEL
End Function
Sub test3()
Dim WsDM As Worksheet
Dim WsUnit As Worksheet
Dim WsUBCD As Worksheet
Dim WsREAL As Worksheet
Dim ValConv As Double
Dim Bin32 As String
Dim A As Double
Set WsREAL = ThisWorkbook.Worksheets(F_REAL)
Set WsUnit = ThisWorkbook.Worksheets(F_UINT)
A = WsREAL.Range("B3").Value
'MsgBox a
REEL (-97883571)
End Sub |
Partager