Bonjour à tous,
Après de nombreuses années de consultation de ce forum (qui m'a beaucoup beaucoup beaucoup rendu service et de nombreuse fois), c'est à mon tour de vous exposer mon petit soucis.
Dans un but de référencement de pièce, j'ai voulu faire un convertisseur décimal à base 36.
Tout fonctionne à merveille (n'importe quel nombre & n'importe quelle base) jusqu'à ce que 'LcDblInitial' contienne des nombres si grand qu'il sont automatiquement convertis en exposant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Sub ConvertisseurDecBase_n() Dim LcTabI00() As Variant Dim LcStrI00 As String Dim LcVarI00 As Variant, LcVarI02 As Variant, LcVarI03 As Variant, LcVarI04 As Variant Dim LcDblInitial As Double Dim LcVarResultat As Variant Dim LcIntI00 As Integer, LcIntI01 As Integer Dim LcIntCompteur As Integer Dim LcLngI01 As Long 'Nombre décimal LcDblInitial = 1.20020000010003E+19 'Base LcIntI00 = 36 'Caracteres possibles LcStrI00 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 'Dimensionne le tableau de caractere et 'Remplit le tableau avec les caracteres necessaires ReDim LcTabI00(LcIntI00) LcStrI00 = Left(LcStrI00, LcIntI00) LcVarI00 = LcDblInitial For LcIntI01 = 0 To UBound(LcTabI00) LcTabI00(LcIntI01) = Mid(LcStrI00, LcIntI01 + 1, 1) Next LcIntI01 'Calcule le premier chiffre à droite LcVarI02 = Int(LcVarI00 / LcIntI00) LcVarI03 = LcVarI00 - (LcVarI02 * LcIntI00) LcVarI03 = LcTabI00(LcVarI03) LcVarI04 = LcVarI03 & LcVarI04 LcVarI00 = LcVarI02 LcIntCompteur = 1 Debug.Print LcIntCompteur & "er chiffre à droite : " & LcVarI04 'Calcule les 'n' chiffres suivants Do Until LcVarI02 < LcIntI00 LcIntCompteur = LcIntCompteur + 1 LcVarI02 = Int(LcVarI02 / LcIntI00) LcVarI03 = LcVarI00 - (LcVarI02 * LcIntI00) LcVarI03 = LcTabI00(LcVarI03) LcVarI04 = LcVarI03 & LcVarI04 LcVarI00 = LcVarI02 Debug.Print LcIntCompteur & "eme chiffre à droite : " & LcVarI03 Loop 'Calcule le premier chiffre à gauche LcVarI02 = Int(LcVarI02 / LcIntI00) LcVarI03 = LcVarI00 - (LcVarI02 * LcIntI00) LcVarI03 = LcTabI00(LcVarI03) 'Supprime le zéro en premiere position If LcVarI03 <> 0 Then LcVarI04 = LcVarI03 & LcVarI04 End If 'Donne le résultat final LcVarResultat = LcVarI04 LcIntCompteur = LcIntCompteur + 1 Debug.Print LcIntCompteur & "eme chiffre à droite : " & LcVarI03 Debug.Print "Resultat : " & LcVarResultat End Sub
Exemple :
120020000010003030700 devient 1.20020000010003E+20 (par contre pas de soucis avec 1.20020000010003E+18 ... quoique je n'ai pas verifié le resultat !!... )
J'ai une erreur d'execution '9' ; l'indice n'appartient pas à la selection ... ben oui, il cherche la colonne 520 du tableau qui n'en comporte que 36
A mon avis, le probleme vient du coup du manque de précision du nombre par sa mise en exposant
Quelqu'un aurait il une solution pour garder la notation sans exposant (ou tout autre suggestion d'ailleurs ...)
Encore merci et à bientot
Partager