Impossible de lire la propriété

Bonjour tout le monde !

J’ai un problème avec ma fonction Int2PCode, ma fonction de base qui est celle-ci :

Public Function Int2PCode(dtc As String) As String

Dim HexaCode, Hexa1, Char1 As String

HexaCode = WorksheetFunction.Dec2Hex(dtc):

Hexa1 = Format(WorksheetFunction.Hex2Bin(Left(HexaCode, 1)), "0000")
Select Case Left(Hexa1, 2)
    Case Is = "00"
        Char1 = "P"
    Case Is = "01"
        Char1 = "C"
    Case Is = "10"
        Char1 = "B"
    Case Is = "11"
        Char1 = "U"
End Select

Int2PCode = Char1 & WorksheetFunction.Bin2Dec(Right(Hexa1, 2)) & Mid(HexaCode, 2, 3) & "-" & Right(HexaCode, 2)

End Function

Permet de convertir le code DTC d’une valeur numérique en code P, la fonction ci-dessus fonctionne très bien mais le souci c’est que le DTC doit être codé sur 3 octets (24 bits). C’est à dire que lorsque la valeur décimale d’un DTC est inférieure ou égale à 1 048 575 (1111 1111 1111 1111 1111); il faut rajouter 0000 au niveau du bite fort pour avoir 24 bits (0000 1111 1111 1111 1111 1111) avant de faire la conversion en hexa.

J’ai donc modifié ma fonction de base ce qui donne ça :

Public Function Int2PCode(dtc As String) As String

Dim HexaCode, Hexa1, Char1 As String

Dim decimalValue As Long
decimalValue = CLng(dtc)

' Ajouter des zéros au niveau du bit le plus significatif si la valeur décimale est inférieure ou égale à 1 048 575
If decimalValue <= 1048575 Then
    ' Convertir en binaire avec 24 bits
    Hexa1 = Format(WorksheetFunction.Dec2Bin(decimalValue, 24), "000000000000000000000000")
Else
    ' Convertir en binaire avec 20 bits
    Hexa1 = Format(WorksheetFunction.Hex2Bin(Left(WorksheetFunction.Dec2Hex(decimalValue), 1)), "0000")
End If

Select Case Left(Hexa1, 2)
    Case Is = "00"
        Char1 = "P"
    Case Is = "01"
        Char1 = "C"
    Case Is = "10"
        Char1 = "B"
    Case Is = "11"
        Char1 = "U"
End Select

Int2PCode = Char1 & WorksheetFunction.Bin2Dec(Right(Hexa1, 2)) & _
             Mid(Hexa1, 3, 8) & "-" & _
             Mid(Hexa1, 11, 8) & "-" & _
             Right(Hexa1, 8)
End Function

Mais ça me met une erreur de ce type :
image

Je n’arrive pas à voir pourquoi, je vous laisse le dossier avec les fichiers pour tester si vous le souhaitez et pour regarder le code, le run prend du temps lorsqu’on lance la macro car il y’a beaucoup de donné dans le fichier XML. Au lancement de la macro le 1er fichier à ouvrir est : Matrix.xlsm ensuite le 2ème à ouvrir est FichierXML.xml
DiffClasseur_Test.xlsm (59,0 Ko)
Matrix.xlsm (504,2 Ko)

Merci par avance !

Re,
Après m’être renseigné Dec2Bin est autorisé uniquement pour les valeurs comprises entre -512 et 511.
J’ai cherché un peu et je suis tombé sur ça :

=DEC2BIN(MOD(QUOTIENT($A$1,256^3),256),8)&DEC2BIN(MOD(QUOTIENT($A$1,256^2),256),8)&DEC2BIN(MOD(QUOTIENT($A$1,256^1),256),8)&DEC2BIN(MOD(QUOTIENT($A$1,256^0),256),8)

Qui est le code permettant de résoudre mon problème si on parle d’un nombre positif entre 0 et 2^32-1.
Après avoir fait les modifs dans ma fonction :

Public Function Int2PCode(dtc As String) As String

Dim HexaCode, Hexa1, Char1 As String

Dim decimalValue As Long
decimalValue = CLng(dtc)

' Convertir en binaire avec 32 bits à l'aide de la formule Excel fournie
Hexa1 = WorksheetFunction.Dec2Bin(WorksheetFunction.Mod(WorksheetFunction.Quotient(decimalValue, 256 ^ 3), 256), 8) & _
WorksheetFunction.Dec2Bin(WorksheetFunction.Mod(WorksheetFunction.Quotient(decimalValue, 256 ^ 2), 256), 8) & _
WorksheetFunction.Dec2Bin(WorksheetFunction.Mod(WorksheetFunction.Quotient(decimalValue, 256 ^ 1), 256), 8) & _
WorksheetFunction.Dec2Bin(WorksheetFunction.Mod(WorksheetFunction.Quotient(decimalValue, 256 ^ 0), 256), 8)

Select Case Left(Hexa1, 2)
    Case Is = "00"
        Char1 = "P"
    Case Is = "01"
        Char1 = "C"
    Case Is = "10"
        Char1 = "B"
    Case Is = "11"
        Char1 = "U"
End Select

Int2PCode = Char1 & WorksheetFunction.Bin2Dec(Right(Hexa1, 2)) & _
            Mid(Hexa1, 3, 8) & "-" & _
            Mid(Hexa1, 11, 8) & "-" & _
            Right(Hexa1, 8)
End Function

J’ai toujours une erreur…

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.