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