XL 2016 incrementation chiffre pour renvoyer lettre

djiska

XLDnaute Junior
Bonjour

j'ai ecris un code qui entre une valeur 0 à 15 qui la retourne lorsqu'elle correspond à cette interval de 0 à 9
mais qui qui dois retourne A quand la valeur entrée est 10
B quand la valeur entrée est 11
C quand la valeur entrée est 12
ainsi de suite..

Je me suis servi de Chr mais cela ne me retourne que A.
pouvez vous m'aider !!




If nb >= 0 And nb <= 9 Then
valeurHexa = nb + i

ElseIf nb > 9 And nb <= 15 Then

valeurHexa = Chr(65 + i)
i = i + 1
end if

Call MsgBox(valeurHexa)

End Sub
 
Solution
Djiska,
Ma fonction n'est autre que la votre remaniée.
Vous n'appelez qu'une InputBox. donc dans la fonction,il n'y en a qu'une.
Testez avec l'appel de fonction ci dessous :
VB:
Sub Test()
    HexaOuPas = ValideNombreHexa(0)
End Sub
Public Function ValideNombreHexa(ByVal chaine As String) As Boolean
Dim validite As Boolean
Dim Valeur As String
Dim i As Integer
chaine = InputBox("entrer une valeur hexadecimal")
validite = False
For i = 1 To Len(chaine)
    Valeur = Val(Asc(UCase(Mid(chaine, i, 1))))
    If (Valeur >= 48 And Valeur <= 57) Or _
       (Valeur >= 65 And Valeur <= 70) Then
            validite = True
    Else
            validite = False
    End If
Next i
ValideNombreHexa = validite
End Function
Par contre si vous...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Djiska, Bonsoir MaPomme,
Si c'est pour faire de l'hexa de 0 à F alors il est plus simple d'utiliser =DECHEX(N) et sans VBA.
Ce qui fait pour 0..9 0..9 et de 10 à 15 ABCDEF.
Ou en VBA si vous y tenez :
VB:
Application.WorksheetFunction.DecHex(NombreDecimal)
 
Dernière édition:

djiska

XLDnaute Junior
Bonsoir,
Bien sur mais c'est quand même d'un autre age;
Par ex la plus classique:
https://www.commentcamarche.net/forum/affich-1038328-conversion-decimale-en-hexadecimale


aha ha je voulais s avec Vba

je essayé mais pas facile à executer sans Hex

Public Function convertirHEX (ByVal entier As Double) As String
je veux convertir un decimal en Hexadecimal

Dim exp As Double : le plus grand exposant de 16
Dim i As Integer : mon compteur
Dim chiffre As Integer


exp = Int(log16(entier))


For i = exp To 0

chiffre = Int(entier) / (16 ^ i)
convertirHEX= ChiffreHexadecimal(chiffre)
entier = entier Mod 16 ^ i

Next i

NombreDecimalAHexadecimal = Chr(65 + entier -10)
End Function

mais ca ne renvoie pas le resultat escompté
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
Ca faisait longtemps que je n'ai pas joué à ça.
Un code conversion Dec Hex 32 bits, donc résultat sur 8 caractères.
Code:
Sub TestVal()   ' Convertisseur Dec Hex 32 bits ( de 0 à 2^32-1), retour sur 8 caractères.
    ValDecimal = 65535              ' Valeur à convertir
    Hexa = DecHexa(ValDecimal)      ' Chaine résultat
End Sub

Function DecHexa(N)
H = "0123456789ABCDEF"
ChaineHexa = ""
For i = 7 To 0 Step -1
    P = 16 ^ i
    L = Int(N / P)
    N = N - L * P
    ChaineHexa = ChaineHexa & Mid(H, 1 + L, 1)
Next i
DecHexa = ChaineHexa
End Function
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @djiska :), à tous ;),

Une fonction plus générale utilisable en VBA dans une macro ou bien directement sur la feuille de calcul.

Cette fonction convertit un entier X en un nombre en base "base".

Le code dans Module1:
Code:
Function DecToBase(x As Long, base As Long)
Dim r As Long, s As String
   If base <= 1 Or base > 36 Or x < 0 Then DecToBase = CVErr(xlErrNA): Exit Function
   Do
      r = x Mod base
      s = IIf(r <= 9, r, Chr(65 + r - 10)) & s
      x = x \ base
   Loop Until x = 0
   DecToBase = s
End Function

  • Formules sur la feuille de calcul dans les colonnes D, G, J, M, P et S.
  • Utilisation en VBA, voir le code du bouton.

nota: la base doit être comprise entre 2 et 36.
 

Pièces jointes

  • djiska- conversion Dec en Base- v1.xlsm
    40.9 KB · Affichages: 13

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

La fonction réciproque de la précédente.
Elle convertit un nombre 'X' écrit en base 'base' vers un entier en base 10.

VB:
Function BaseToDec(ByVal x As String, ByVal base As Long)
Dim s As String, dec As Long, puiss&, i&
On Error GoTo Err001
   x = Trim(x): puiss = 1
   For i = Len(x) To 1 Step -1
      s = UCase(Mid(x, i, 1))
      Select Case s
         Case "0" To "9": dec = dec + puiss * Val(s)
         Case "A" To "Z": dec = dec + puiss * (Asc(s) - Asc("A") + 10)
         Case Else: BaseToDec = CVErr(xlErrNA): Exit Function
      End Select
      puiss = puiss * base
   Next i
   BaseToDec = dec
   Exit Function
Err001:
   BaseToDec = CVErr(xlErrNA)
End Function
 
Dernière édition:

Discussions similaires