IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

conversion : hexa en caractères [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Par défaut conversion : hexa en caractères
    Bonjour à tous,

    J'ai une petite question^^. Est-il possible de convertir de l'héxadécimal en lettre ?

    Merci d'avance

  2. #2
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    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

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Par défaut
    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 ?^^

  4. #4
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    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

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    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

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Par défaut
    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

  7. #7
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    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

  8. #8
    Membre Expert
    Femme Profil pro
    Data engineer
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Data engineer
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Re-bonjour,
    Voici les étapes du traitement :
    1. 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().
    2. 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".
    3. La chaîne de caractères "&h6F" peut ensuite être convertie en nombre par CInt. Par exemple, CInt("&h6F")= 111.
    4. 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 ?

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Par défaut
    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.

  10. #10
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    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

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Par défaut
    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.

  12. #12
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    ç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

  13. #13
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 8
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion d'un caractère en minuscule!!
    Par feanor77 dans le forum C
    Réponses: 19
    Dernier message: 11/12/2005, 14h33
  2. Conversion Hexa --> Decimal
    Par lory_van_eyck dans le forum Général Python
    Réponses: 2
    Dernier message: 28/09/2005, 07h29
  3. conversion hexa-binaire
    Par jack69 dans le forum C
    Réponses: 8
    Dernier message: 04/04/2005, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo