Comment passer du VBA par bouton en fonction (utilisable partout)?
Bonjour à tous,
Merci pour toute l'aide que vous allez m'apporter.
Mon niveau en VBA est malheureusement faible, j'ai une page qui permet de calculer un CRC sur un certain nombre d'octet aléatoire.
Un bouton permet de calculer le CRC et de le réinjecter dans la trame.
Je souhaite développer une fonction qui permettra de l'utiliser ou bon me semble et sur n'importe quel page Excel.
Je n'arrive pas à passer à cette étape malgré mes efforts, même mes points de débug pour afficher certaines valeurs ne marchent pas.
Pour faire simple:
J'ai une trame:
001016cr10500704020102010102
J’enlève le "cr" :
00101610500704020102010102
Je la retourne (module1 => function inverse):
02010102010204075010161000
je calcul le CR que je réinjecte dans la trame de base
0010168010500704020102010102
Malheureusement ma fonction (B21) =CRCMAxim(ElaJon) sur le module 2 ne marche pas je suis en erreur, alors que le bouton lui fonctionne.
Le pompom serait bien sur de pouvoir imbriquer toutes les fonctions afin de partir de la trame de base
Je vous serais reconnaissant de m'aider à me débloquer ....merci beaucoup.
Bonne soirée
Olivier
bonsoir,
une correction de ta fonction, sans modifier ta logique.
Function CRCMAxim(valeur As Variant)
Dim Nombredevaleur, NombredevaluerOctets As Integer
Dim ElaSTR As String
Dim InHex, OutBinStr As String
Dim OutBinArr(1 To 6400) As Integer
Dim OutDec, I, CRC(1 To 800), CRCTemp As Integer
Dim Nbcaract As Double
Nbcaract = Len(valeur)
Nbcaract = Nbcaract / 2
Nombredevaleur = Nbcaract
NombredevaluerOctets = Nombredevaleur * 8
InHex = valeur '<-correction de l'erreur ici ********************************************************
OutBinStr = HexToBin(InHex)
' Convert string to array, LSB = OutBinArr(1)
For I = 1 To NombredevaluerOctets
OutBinArr((NombredevaluerOctets + 1) - I) = Mid$(OutBinStr, I, 1) ' Split(OutBinStr)
Next I
'Initialize CRC
For I = 1 To Nombredevaleur
CRC(I) = 0
Next I
'Calculate CRC
For I = 1 To NombredevaluerOctets
CRCTemp = CRC(1) Xor OutBinArr(I)
CRC(1) = CRC(2)
CRC(2) = CRC(3)
CRC(3) = CRC(4) Xor CRCTemp
CRC(4) = CRC(5) Xor CRCTemp
CRC(5) = CRC(6)
CRC(6) = CRC(7)
CRC(7) = CRC(8)
CRC(8) = CRCTemp
Next I
DecCRC = BinToDec(CRC)
' Range("DecCRCValue").Value = DecCRC
CRCMAxim = DecCRC
End FunctionBonsoir h2so4
Merci beaucoup pour la rapidité de réponse et l'aide.
Comme quoi il en faut peu quelque fois pour qu'un code ne marche pas.
Encore merci pour tout cela fonctionne très bien.
Il reste néanmoins une chose ou je reviendrais par la suite ...celui de pouvoir envoyer le résultat sur un lecteur NFC en VBA ... mais j'ouvrirais un nouveau sujet pour cela
Bonne soirée