Dépassement de capacité

Bonjour à tous, j'ai ce code qui appelle une fonction

Function hex_string_to_uint(data_in) As Long
    hex_string_to_uint = 0
    temp_str = "" & LCase(data_in)
    nb_char = Len(temp_str)
    i = 1
    While i <= nb_char
        hex_string_to_uint = hex_string_to_uint * 16
        Select Case Mid(temp_str, i, 1)
            Case "0"
                hex_string_to_uint = hex_string_to_uint
            Case "1"
                hex_string_to_uint = hex_string_to_uint + 1
            Case "2"
                hex_string_to_uint = hex_string_to_uint + 2
            Case "3"
                hex_string_to_uint = hex_string_to_uint + 3
            Case "4"
                hex_string_to_uint = hex_string_to_uint + 4
            Case "5"
                hex_string_to_uint = hex_string_to_uint + 5
            Case "6"
                hex_string_to_uint = hex_string_to_uint + 6
            Case "7"
                hex_string_to_uint = hex_string_to_uint + 7
            Case "8"
                hex_string_to_uint = hex_string_to_uint + 8
            Case "9"
                hex_string_to_uint = hex_string_to_uint + 9
            Case "a"
                hex_string_to_uint = hex_string_to_uint + 10
            Case "b"
                hex_string_to_uint = hex_string_to_uint + 11
            Case "c"
                hex_string_to_uint = hex_string_to_uint + 12
            Case "d"
                hex_string_to_uint = hex_string_to_uint + 13
            Case "e"
                hex_string_to_uint = hex_string_to_uint + 14
            Case "f"
                hex_string_to_uint = hex_string_to_uint + 15
            Case Else
                hex_string_to_uint = hex_string_to_uint
        End Select
        i = i + 1
    Wend
End Function

Sub macro()

data_in = "ffffffff"

result = hex_string_to_uint(data_in)

Debug.Print "Valeur de la ligne : " & result

End Sub

Je comprends pas pq quand j'éxecute on me renvoie un dépassement de capacité. La valeur attendue est de 4 294 967 295 (conversion de ffff_ffff en décimal) ce qui est largement compris dans un Long non ?

Merci d'avance

Bonjour Superneiluj

Le message est clair pourtant, dire que vous avez tout ce qu'il faut ici https://www.excel-pratique.com/fr/vba/variables

Supprimez le type de votre fonction

Function hex_string_to_uint(data_in)

@+

Merci de ta réponse,

Mais pourquoi ça ne fonctionne pas ? j'ai essayé de le déclarer en double ça fonctionne et même sans déclaration ça fonctionne aussi.

Mais ma question c'est pq ? :)

Re,

Etes-vous allez voir ce qu'accepte une variable de type Long

La réponse est dans votre question initiale

"Contient des entiers 64 bits (8 octets) signés dont la valeur est comprise entre-9223372036854775808 et 9 223 372 036 854 775 807 (9.2... E + 18)"

Que j'ai trouvé sur le site officiel de microsoft d'où mon incompréhension

Re,

Vous confondez VBA (Visual Basic for Apllication) développement pour Office
et VB (Visual Basic) développement pour du .NET

Donc effectivement je comprends mieux

Ah oui effectivement. Merci :)

Du coup je n'ai pas de solutions pour mon problème ? Il n'existe pas de LongLong sur vba ? le double est exclu pour ce que je veux en faire

Re,

Je vous ai donné la solution au post https://forum.excel-pratique.com/s/goto/1013058
il faut enlever "As Long" à la fonction

Que voulez-vous d'autre, je ne comprends pas

@+

Rechercher des sujets similaires à "depassement capacite"