IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Convertisseur Decimal base 'n' probleme de mise en exposant


Sujet :

VBA

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Convertisseur Decimal base 'n' probleme de mise en exposant
    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.

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

    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

  2. #2
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonjour à tous
    Bonjour Thorliaf3

    As tu résolu ton problème ?
    Je te propose le code suivant que j'avais fait pour un forumeur (ailleurs !) qui n'a pas répondu si cela lui allait ou non, donc je ne sais pas si cela fonctionne dans tous les cas.
    Une condition : il faut "EasyPHP".
    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
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
    Sub createfilephp_bon()  
    ' creation du fichier PHP
     
    Dim fic As Integer
    Dim resultat As String
    Dim test_multiplicande As Currency
    Dim test_multiplicateur As Currency
    Dim stAppName As String
    Dim strLigne As String
     
    test_multiplicande = 111111111111147#        ' attention au max
    test_multiplicateur = 111111111111142#       ' attention au max
     
    fic = FreeFile
     
    'Chemin 
         'ChDir ThisWorkbook.Path
     
    Open "./index.php" For Output As #fic
        Print #fic, "<?php"
        Print #fic, "$monfichier = fopen('ficheX.txt', 'w+');"
        Print #fic, "$b = '" & test_multiplicande & "';"
        Print #fic, "$c = '" & test_multiplicateur & "';"
        Print #fic, "$resultat=bcmul($b,$c);"
        Print #fic, "fseek($monfichier, 0);"
        Print #fic, "fputs($monfichier, $resultat);"
        Print #fic, "fclose($monfichier);"
        Print #fic, "?>"
    Close #fic
     
    'Exécution de l'application PHP
        stAppName = """C:\Program Files\EasyPHP-5.3.8.0\php\php.exe""" & " -c " & """C:\Program Files\EasyPHP-5.3.8.0\apache\php.ini""" & " index.php"
        Call Shell(stAppName, VbAppWinStyle.vbHide)
     
    Sleep 100
     
    Open ThisWorkbook.Path & "\ficheX.txt" For Input As #fic
    Line Input #fic, strLigne
    MsgBox strLigne
     
    Range("A8").NumberFormat = "@"
    Range("A8") = strLigne
    Close #fic
    Kill "ficheX.txt"
    Kill "index.php"
     
    End Sub
    cela peut être une piste.
    On peut peut-être le faire en Javascript, mais mes connaissances ont une limite rapidement atteinte.
    A te lire
    Eric

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Bonjour Edelweisseric,

    Non, je n'ai toujours pas resolu mon probleme (par manque de temps, j'avoue ...), bien que j'avais une petite idée qui ressemble assez à la tienne (mais sans EasyPHP).
    Le but etait de créer une variable string et de la "decouper" en bloc de 10 ou 12 chiffres pour faire le calcul. (A mon avis, il n'y a que moi qui ai compris ce que je viens d'ecrire )
    Je ne pense pas m'y remettre avant le debut d'année, mais je te tiendrais au courant.

    En attendant, passes de bonne fete de fin d'année et merci pour ta piste ...

    Et bonne fete à toute la communautée

Discussions similaires

  1. [MySQL] probleme de mise a jour de la base de donnée
    Par Palsajicoco dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/06/2009, 18h49
  2. Probleme de mise a jour de base à partir d'un DGV
    Par skunkies dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/05/2009, 21h07
  3. Réponses: 3
    Dernier message: 27/01/2009, 20h56
  4. probleme de mise à jour dans la base donnée
    Par youba11 dans le forum VB.NET
    Réponses: 2
    Dernier message: 23/05/2008, 13h13
  5. Probleme de mise à jour et de modification d'une base
    Par flambo88 dans le forum Requêtes
    Réponses: 17
    Dernier message: 07/12/2005, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo