Boite de dialogue conversion Hexa en décimal

Mdelacre Messages postés 2 Statut Membre -  
Mdelacre Messages postés 2 Statut Membre -
Bonsoir,
je suis novice dans les macro, je cherche à faire une boite de dialogue qui s'afficherait à l'ouverture du fichier permettant la conversion d'un nombre en HEXA (de 8 caractères) en un nombre en décimal (seulement l'affichage des 8 derniers caractères)
Exemple: Nombre en HEXA: 78C4D1A8 / Nombre en décimal: 26164648
Voila les fonctions basiques d'excel que j'utilise: =HEXDEC(STXT(A1;3;8))
mais là je le voudrais avec une macro et une interface type:
2 champs texte et un bouton permettant la conversion; je voudrais en plus que le chiffre convertit en décimal soit enregistré (Ctrl+C) pour permettre une recopie dans un autre document...
Merci bcp à ceux qui pourront m'aider.... je continue à chercher de mon côté (pour le moment, je n'ai sû faire que l'interface, soit pas grand chose!!!)

3 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    je t'ai fait les 2 conversions: decimal-> hexa et hexa-> decimal

    Mettre 2 boutons et 2 textBox, c'est dans le textBox1 que tu mettras les données.
    Voici le code:

    Option Explicit
    Private Sub UserForm_Initialize()
    CommandButton1.Caption = "decimal-->hexa"
    CommandButton2.Caption = "hexa-->decimal"
    End Sub
    'decimal-->hexa
    Private Sub CommandButton1_Click()
    If TextBox1.Text = "" Then Exit Sub
    TextBox2.Text = convert_decimal_hexadecimal(TextBox1.Text)
    End Sub
    'hexa-->decimal
    Private Sub CommandButton2_Click()
    TextBox2.Text = Hex2Dec(TextBox1.Text)
    TextBox2.Text = Right(TextBox2.Text, 8) '8 derniers caracteres
    End Sub
    'decimal-->hexa
    Function convert_decimal_hexadecimal(mon_nombre_decimal)
     Dim Hexa, temp
     Hexa = ""
     Do While mon_nombre_decimal > 0
     temp = Int(mon_nombre_decimal / 16)
     If mon_nombre_decimal - (temp * 16) = 10 Then
     Hexa = "A"
     ElseIf mon_nombre_decimal - (temp * 16) = 11 Then
     Hexa = "B"
     ElseIf mon_nombre_decimal - (temp * 16) = 12 Then
     Hexa = "C"
     ElseIf mon_nombre_decimal - (temp * 16) = 13 Then
     Hexa = "D"
     ElseIf mon_nombre_decimal - (temp * 16) = 14 Then
     Hexa = "E"
     ElseIf mon_nombre_decimal - (temp * 16) = 15 Then
     Hexa = "F"
     Else
     Hexa = mon_nombre_decimal - (temp * 16)
     End If
     convert_decimal_hexadecimal = Hexa & convert_decimal_hexadecimal
     mon_nombre_decimal = temp
     Hexa = ""
     Loop
    End Function
    'hexa-->decimal
    Function Hex2Dec(Hexa As String) As Double
     Dim i As Integer, Multi As Integer
     Hex2Dec = 0
     Hexa = UCase(Trim(Hexa))
     If Not Hexa Like "*[G-Z]*" Then
     For i = 1 To Len(Hexa)
     Multi = CInt("&H" & (Mid(Hexa, Len(Hexa) - i + 1, 1)))
     Hex2Dec = Hex2Dec + (Multi * 16 ^ (i - 1))
     Next i
     End If
    End Function
    

    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      J'ai oublié cela dans le bouton 2:


      If TextBox1.Text = "" Then Exit Sub
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    J'ai oublié la recopie du résultat dans une cellule:

    'hexa-->decimal
    Private Sub CommandButton2_Click()
    If TextBox1.Text = "" Then Exit Sub
    TextBox2.Text = Hex2Dec(TextBox1.Text)
    TextBox2.Text = Right(TextBox2.Text, 8) '8 derniers caracteres
    Range("A1").Value = TextBox2.Text
    End Sub

    0
  3. Mdelacre Messages postés 2 Statut Membre
     
    Bonsoir

    merci beaucoup pour ton aide!

    je n'ai pas encore fait les tests avec ce que tu m'as communiqué, je n'ai pas été très dispo; je vais faire mes essais début janvier.
    dans tous les cas, je te tiens au courant...

    Encore merci
    0