Résolu XL 2016 incrementation chiffre pour renvoyer lettre

djiska

XLDnaute Nouveau
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
 
Ce fil a été résolu! Aller à la solution…

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 Nouveau
Bonjour SYlvanu, Dranreb et Mapomme.
Désolé mon copié collé n'a pas marché , voila pourquoi ce n'était pas complet.
Effectivement , j'ai essayé valeurHexa = Chr(65 + nb-10) et ca marche .

Merci
 

djiska

XLDnaute Nouveau
Bonjour,
Ou plus simplement :
VB:
Sub essai()
    a = 123456789
    ValeurHexa = Hex(a)
End Sub
La réponse est "75BCD15"
Bonjour SYlvanu

Puisque que tu en parles , est-ce possible de convertir a en Hexa sans utiliser la fonction HEX ??
Je vais dire un algorithme par exemple.
 

djiska

XLDnaute Nouveau
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.
 
Ce message a été identifié comme étant une solution!

Fichiers joints

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
 
Ce message a été identifié comme étant une solution!
Dernière édition:

djiska

XLDnaute Nouveau
Merci beaucoup à vous Sylvanu et Mapomme,

Est ce qu'on peut appliquer le meme raisonnement ,pour convertir un nombre Hexa en nombre entier ??
En remplacant la base 10 dix par base 16?



merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tout le monde,
Votre question laisse perplexe !
Un nombre Hexa n'a pas de notion intrinsèque de décimal. C'est un nombre entier.
Si la question est de trouver un nombre décimal à partir d'un nombre Hexa, alors la macro de Mapomme est faite pour cela.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @djiska ,

Est ce qu'on peut appliquer le meme raisonnement ,pour convertir un nombre Hexa en nombre entier ??
En remplacant la base 10 dix par base 16?
Vous avez tous les outils pour convertir un nombre x depuis la base 10 vers une autre base (base doit être comprise entre 2 et 36). C'est la fonction DecToBase(x As Long, base As Long).
  • si Base vaut 2, vous convertissez en binaire
  • si Base vaut 8, vous convertissez en octal
  • si Base vaut 16, vous convertissez en Hexadécimal. Exemple: Pour convertir en base 16 le nombre décimal 1345 : =DecToBase(1345,16) en VBA et =DecToBase(1345;16) sur une feuille de calcul
  • si Base vaut 17, vous convertissez en base 17 :p

Pour l'opération réciproque, utilisez la fonction BaseToDec(ByVal x As String, ByVal base As Long). Cette fonction convertit un nombre x écrit en base "base" vers la base 10.
  • si base vaut 2, cette fonction convertit x (binaire) depuis la base 2 vers la base 10
  • si base vaut 8, cette fonction convertit x (octal) depuis la base 8 vers la base 10
  • si base vaut 16, cette fonction convertit x (hexadécimal) depuis la base 16 vers la base 10 Exemple: Pour convertir en base 10 le nombre hexadécimal D38C : =BaseToDec("D38C",16) en VBA et =BaseToDec("D38C";16) sur une feuille de calcul
  • si base vaut 17, cette fonction convertit x (en base 17) depuis la base 17 vers la base 10

Vous pouvez donc convertir depuis n'importe quelle base vers une autre base quelconque. Il suffit de repasser par la valeur en base 10 (décimale) intermédiaire. Exemple Passer "D38C" de la base Hexadécimale vers la base 2: =DecToBase(BaseToDec("D38C",16) ,2) (en VBA)
(remplacer les virgules par des points-virgules sur une feuille de calcul)
 
Ce message a été identifié comme étant une solution!
Dernière édition:

djiska

XLDnaute Nouveau
permettez moi de revenir sur le sujet .
Là j'essaie de valider avec une Boolean ,si le nombre est un Hexadecimal ou pas mais je me heurte à une boucle infinie...



voici le code :

Public Function valideHexa(ByVal chaine As String) As Boolean

Dim validite As Boolean
Dim valeur As String
Dim i As Integer

chaine = Val(InputBox("entrer une valeur hexadecimal"))

validite = True

i = 1
valeur = Mid(chaine, i, 1)

JE VERIFIE SI LA VALEUR SE TROUVE DANS LES BORNES(0-9)(A-F)

While UCase(valeur) > 9 Or UCase(valeur) < 0 Or UCase(valeur) < Chr(65) Or UCase(valeur) > Chr(70)

validite = False

Wend

i = i + 1


SaisirNombreHexadecimal = validite


End Function
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Djiska,

VB:
chaine = Val(InputBox("entrer une valeur hexadecimal"))
Val renvoie un nombre. Comme le retour est une chaine Hexa, elle comporte surement des lettres. Donc ça ne peut pas marcher.

Code:
While UCase(valeur) > 9 ....
Ucase renvoie des majuscules donc des lettres, donc impossible que Ucase(x)>9
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas