Pb : dép de capacité

Signaler
Messages postés
3
Date d'inscription
vendredi 6 novembre 2009
Statut
Membre
Dernière intervention
6 novembre 2009
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
A l'appel de la fonction

=ChgBase(1000000000000000)

j'ai un pb de dépassement de capacité alors que j'utilise des types de données de plus 2 octets.
Y a t'il une sol ?

Public Function ChgBase(n As String, b As Long) As Long
Dim i, j, r, nb, nbchiffres As Long
i = Len(n)
nbchiffres = i
j = 0
nb = 0
r = 0
While (j <> nbchiffres)
r = Mid(n, i, 1)
nb = nb + (r * (b ^ j))
i = i - 1
j = j + 1
Wend
ChgBase = nb
End Function

4 réponses

Messages postés
3
Date d'inscription
vendredi 6 novembre 2009
Statut
Membre
Dernière intervention
6 novembre 2009

désolé l'appel de la fonction est :
=ChgBase(1000000000000000;2)
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
Dim i, j, r, nb, nbchiffres As Long

Félicitations, tu as déclaré un Long et 4 Variant...


tu pourrais faire :

Private Sub Form_Load()
    Debug.Print ChgBase("1000000000000000")
End Sub

Public Function ChgBase(n As String) As Long
Dim r As Long
Dim j As Long
    r = 1
    For j = Len(n) To 1 Step -1
        If Mid$(n, j, 1) = "1" Then
            ChgBase = ChgBase + r
        End If
        r = r * 2
    Next
End Function




Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
3
Date d'inscription
vendredi 6 novembre 2009
Statut
Membre
Dernière intervention
6 novembre 2009

Ok, je suis d'accord c'est plus court et ça utilise moins de mémoire mais j'ai toujours le même pb. Je m'explique
Dans une cellule d'Excel (B2) je mets le nombre 1000000000000000 et puis dans une autre cellule du tableur je mets =ChgBase(B2)
le paramètre d'appel étant une référence à une cellule, j'obtiens 18 car l'ordi va convertir le nombre en 1E+15 lors de l'appel de la fonction. Je précise tout de même que j'ai bien mis le format de cellule de B2 en nombre (avec 0 décimale) et j'ai bien sous Excel en B2 la valeur 1000000000000000.
Lorsque je débug avec un point d'arrêt à l'appel de la fonction il me converti tout ça en 1E+15 (vérif effectuée avec un point d'arrêt). Aurais-tu une solution ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Ah tiens, ce n'est pas du .Net ?
Catégorie modifiée

Comme te l'a suggéré RenField, intéresse-toi aux types des variables (on n'a pas à être pressé en programmation, il faut être précis).
Pour accueillir un chiffre entier aussi gros que 1.000.000.000.000.000, il faut un Large_Integer, variable qui n'existe pas en natif sous VBA.
Alors tu pourrais te rabattre sur les Single qui savent stocker de gros chiffres, mais tu perdrais de la précision (arrondis après la Xième décimale de 10)

Comment convertis-tu ce gros chiffre ne ... 18 : j'ai pas bien compris.

Ta fonction ChgBase est définie pour accepter une Chaine en premier paramètre, pas un chiffre.
Normal donc que VB tente de le convertir.
=ChgBase("
1000000000000000"
;2)
en supposant que le résultat tienne dans un Long ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)