XL 2016 Checksum XOR d'une chaine alphanumérique

decolit

XLDnaute Nouveau
Bonjour à tous,

Je suis nouvel arrivant sur XLD et je n'ai pas trouvé de discussion ayant traité ou traitant du sujet ci-dessus dans le forum. Pardon par avance si ma recherche s'avérait imparfaite, mais je n'ai pas trouvé de réponse pertinente. Je ne sais pas écrire du code VBA mais je peux décrire mon besoin :
- soit une chaine alphanumérique constituée strictement de lettres majuscules et de chiffres de 1 à 9, les lettres "O", "I" et "Q" étant également exclues de l'alphabet autorisé contenant donc 32 caractères,
- soit une longueur de chaine comprise entre 7 et 10 caractères,
1. générer une série de chaines alphanumériques uniques (dédoublonnées, donc) respectant les critères ci-dessus dans une colonne d'une feuille excel, par exemple 100, 500 ou 1000 codes
2. calculer le checksum Xor (bit à bit) de chaque chaine, et convertir le résultat en hexadécimal
3. dans la colonne adjacente à la colonne contenant les chaines, concaténer chaque chaine avec le XOR converti en hexadécimal calculé

je pense être en mesure de bricoler une formule sur excel avec code() pour extraire la valeur ASCII de chaque caractère de la chaine, puis d'utiliser un bitouexclusif() qui remplace l'opérateur XOR qui lui est natif sous VBA que je ne sais pas utiliser. Je suis persuadé qu'il est possible d'automatiser de façon élégante un tel processus sous VBA, mais j'en suis incapable.

Pouvez-vous m'aider ? Et je renouvelle mes excuses si je ne suis pas dans le bon schéma de demande ou de discussion ou si je ne suis pas parvenu à trouver ce que je cherchais dans l'historique.

Meci pour votre retour
 
Solution
Bonjour Sylvanu,
Merci pour votre aide. Je vais essayer de tester Asc pour alléger la présentation (ne pas recourir au valeurs caractère et code Ascii correspondant), et comprendre la structure du code qui est très opaque pour moi, notamment en ce qui concerne les loops et les types de variables. Merci encore.

decolit

XLDnaute Nouveau
Bonjour Sylvanu,

Je vous remercie beaucoup. J'ai remplacé le code et pu vérifier que le processus de converson ascii caractère par caractère est bien opéré, mais rien n'y fait et le checksum Xor n'est ni calculé ni ajouté à la fin de la chaine.
le message d'erreur et débogage pointe sur cette ligne maintenant :
ValAsc = Asc(ValMid)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Oui mais que vaut ValMid à ce moment ?

J'ai fouillé dans le site MS. Ils parlent de système DBCS ou non ! Je ne sai pas ce que ça veut dire.
Vous ne seriez pas sous système Macintosh ?

Essayer pour voir AscB et AscW !!! Voir doc MS ASC, lien ci dessous.

 
Dernière édition:

decolit

XLDnaute Nouveau
Merci Sylvanu,
Non pas mac, je tourne sous Windows.
je viens d'essayer en changeant Asc et AscB en revenant au code sans les Msgbox,
j'ai donc écri :
'Chksum = Chksum Xor AscB(Mid(x, i, 1))
ValMid = Mid(x, i, 1)
ValAsc = AscB(ValMid)
Chksum = Chksum Xor ValAsc
Aucun calcul n'est effectué, aucune chaine n'est générée et j'ai le message d'erreur 13 incompatibilité de type qui pointe sur la ligne :
For i = 3 To tail
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'ai regardé de plus près votre code. Hors problème ASC ça ne peut pas marcher.
VB:
For Each cel In xrg
    Chksum = 0
    For i = 1 To max
        Chksum = Chksum Xor Asc(Mid(x, i, 1))
    Next i
    Chksum = WorksheetFunction.Dec2Hex(Chksum)
    xrg.Cells(i, 1) = xrg & Right("00" & Chksum, 2)   '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Next cel
Arrivé à la ligne repérée, l'indice i ne peut valoir que max, puisqu'on est sorti de la boucle.

Pour essayer de résoudre les deux problème, en PJ un essai.
 

Pièces jointes

  • EssaiAlea(V2).xlsm
    30.2 KB · Affichages: 7

decolit

XLDnaute Nouveau
J'ai essayé de changer les types ValMid en Byte, String, ValAsc en Byte. Je pense que le problème vient peut-être de l'utilisation de la variable x qui ne définit peut-être pas au moment du calcul du checksum la chaine à Xoriser. Mais ça dépasse mes très faibles possibilités.
Merci pour votre aide.
 

decolit

XLDnaute Nouveau
Merci beaucoup. J'ai installé le pack de fonctions complémentaires XLP.xlam. MAintenant, excel me dit Excel ne peut pas ouvrir 2 fichiers portant le même nom. Je renonce car je commence à m'énerver. Je ne comprends pas pourquoi ce qui fonctionne chez les autres plante chez moi. Je ne comprends pas.
Merci pour votre aide, j'arrête.
 

decolit

XLDnaute Nouveau
J'ai du batailler pour créer la liaison demandée par excel vers l'emplacement du fichier xlp.
J'ai rebooté et ça fonctionne, je pense que peux supprimer les champs caractère et Ascii dont je n'ai pas besoin, mais que vous avez mis pour vérifier je présume. Demain peut-être j'essaierai de travailler la mise en forme et de stocker les codes déjà existants dans une feuille archive distincte de la feuille ou les codes nouveaux seront générés, pour garantir la traçabilité.

Merci encore pour votre concours et votre patience, je n'aurais rien fait sans votre aide même si je me suis efforcé de comprendre et d'expliquer le plus clairement possible mon problème. Bravo à vous, et je me permettrai peut être de vous solliciter pour savoir comment affecter la création des nouvelles sur une feuille et les archiver avec les précédentes qui ne peuvent plus être réutilisées dans une autre feuille.
Félicitations
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Les champs caractère et Ascii ont été créés exprès pour contourner le problème de Asc.
Si Asc remarche, pas de soucis, sinon conservez les.
En fait plutôt que faire un Asc en VBA, je colle le caractère dans la feuille XL qui calcule le code et je le récupère.
Il y avait deux problème, le Asc et le Chksum non concaténé.
A vous de faire le ménage suivant vos résultats.
 

decolit

XLDnaute Nouveau
Bonjour Sylvanu,
Merci pour votre aide. Je vais essayer de tester Asc pour alléger la présentation (ne pas recourir au valeurs caractère et code Ascii correspondant), et comprendre la structure du code qui est très opaque pour moi, notamment en ce qui concerne les loops et les types de variables. Merci encore.
 

Discussions similaires

Statistiques des forums

Discussions
312 046
Messages
2 084 844
Membres
102 686
dernier inscrit
Franck6950