Bonjour à tous,
J'ai une petite question^^. Est-il possible de convertir de l'héxadécimal en lettre ?
Merci d'avance
Bonjour à tous,
J'ai une petite question^^. Est-il possible de convertir de l'héxadécimal en lettre ?
Merci d'avance
Bonjour,
Peux-tu être plus précis ? L'hexadécimal est-il dans une variable du code, une cellule...? Qu'entends-tu par convertir "en lettre" ?
Avec un ou 2 exemples, ce serait plus clair![]()
En fait, j'ai une série de donnée codé de cette manière :
04 00 00 00 74 6F 74 6F 00 00 00 00 00 00 00 00
sachant que 74="t" et 6F=o
et je veux que extraire chaque caractères pour les mettres dans une cellule.
esct ce que c'est clair ?^^
Bonjour,
Pour séparer la chaîne de caractères, la fonction Split() fait très bien l'affaire.
Ensuite, pour récupérer le caractère qui correspond au code, il faut combiner la fonction Chr() qui convertit un code en caractère, et la fonction CInt() qui transforme l'hexa en décimal.
Voici un bout de code à adapter selon les besoins, en partant du principe que la valeur est en A1 et qu'on met les caractères dans les cellules de la ligne (B1, C1, ....) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim tabChar() As String Dim i As Integer tabChar = Split(Range("A1")) For i = 0 To UBound(tabChar) Range("A1").Offset(0, i + 1) = Chr(CInt("&h" & tabChar(i))) Next i
Bonjour,
j'ai fais ce petit code qui correpond peut etre à ta demande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Sub test() Dim chaine As String, extract_caract As String Dim long_chaine As Long, j As Long, i As Long, pos As Long 'Format de cellule en texte Sheets("Feuil1").Range("A3:A34").Select Selection.NumberFormat = "@" 'Copie le contenu de la cellule A1 dans une variable chaine = Sheets("Feuil1").Cells(1, 1) 'Longueur de la chaîne de caractères long_chaine = Len(chaine) j = 3 'Init pour déterminer le numéro de la premiere lignr de copie For i = 1 To long_chaine 'Boucle For pour balayer tous les caractères pos = InStr(i, chaine, " ") 'Cherche le caractère espace If pos > 0 Then 'test si un espace est trouvé If pos > 3 Then 'Test la position du caractère extract_caract = Mid(chaine, pos - 2, 2) 'extraction des paires de caractères Else extract_caract = Mid(chaine, 1, 2) 'extraction de la paire de départ End If Sheets("Feuil1").Cells(j, 1) = extract_caract 'Copie la paire dans la feuille If extract_caract = "74" Then Sheets("Feuil1").Cells(j, 2) = "t" ElseIf extract_caract = "6F" Then Sheets("Feuil1").Cells(j, 2) = "o" End If j = j + 1 End If If pos > i Then i = pos End If Next End Sub
Merci à vous deux pour vos réponses.
Tedo01 : je n'arrive pas à voir ce que réalise ta fonction. Certes, elle lit la trame, mais je n'arrive pas à comprendre comment ton décodage fonctionne.
Boudoula : Ton petit programme fonctionne très bien. Mais le truc c'est que dans mon exemple, j'ai mis "toto", mais on peut mettre tout et n'importe quoi, des majuscules avec des minuscules, des caractères spéciaux, etc...
Avanc ta méthode, il faudrais que j'écrive toutes les solutions possibles, sa prendrais trop de temps non ?
encore merci
Bonjour,
il va falloir identifier à un moment donné les correspondances, à moins d'avoir une liste et la stocker dans une table puis faire une recherche dans cette table à chaque fois qu'une paire est trouvée. La méthode split de ted est bien vue je n'y pensais plus
Re-bonjour,
Voici les étapes du traitement :
- La fonction Split() permet de séparer les blocs de 2 caractères de la chaîne. Le résultat se retrouve dans le tableau tabChar().
- Ensuite, si par exemple on a "6F", la manière de dire à VBA qu'il s'agit d'un code hexa est de le préfixer par "&h".
- La chaîne de caractères "&h6F" peut ensuite être convertie en nombre par CInt. Par exemple, CInt("&h6F")= 111.
- La dernière étape consiste à convertir ce code 111 en caractère correspondant. C'est la fonction Chr() qui s'en charge. Par exemple, Chr(111) = "o"
Est-ce que mon bout de code devient un peu plus clair ?
![]()
Boudoula : D'accord, mais il n'y aurais pas moyen de faire directectement avec la fonction "String" ?
Tedo01 : oui c'est plus clair, donc ton programme fonctionne même si l'on change les lettres. c'est ce que je recherche^^. mais elle est plus complexe à mettre en place, sa ne marche pas quand je l'exécute.
Je n'avais pas tout compris en effet si le caractere correspond à une conversion de la paire en hexa Ted à fournit une tres bonne solution, il faut que tu inclus son code dans une sub toto() ---- end sud
c'est bon la fonction de Tedo01 fonctionne.
Par contre, j'ai un petit problème, arrivé au 74 (et même sur les autres caractères), il ne me prend que le premier chiffre.
ça veut dire quoi "il me prend le premier chiffre" ? SI tu parles de la valeur du i c'est normal c'est un increment pour lire les valeurs de la table tabchar une a une
désolé, c'est moi qui me suis planté^^.
le code de Tedo01, je l'ai implanté dans mon programme et il y avait un problème dût à de^s paramètres qui avait le même nom.
Partager