Chiffrer un nombre en lettres selon une combinaison

Puma63

XLDnaute Nouveau
Bonjour,
Je cherche à chiffrer des chiffres en lettres et à faire l’inverse, déchiffrer des lettres en chiffres.
D’apparence, cela paraît plutôt simple, mais je n’y arrive pas.

Je m’explique

Je choisis la combinaison suivante
0123456789
ABCDEFGHIJ

Où 0 se transforme en A, 1 en B, 2 en C et ainsi de suite...

J’aimerai pouvoir taper dans une seule cellule plusieurs chiffres à la suite et qu’ils apparaissent dans une autre cellule en lettre selon la combinaison adoptée, et pouvoir également faire l’inverse (dans une autre cellule s’il le faut)

On doit pouvoir changer la combinaison facilement.
Par exemple :

0123456789
BRESILJAUN

Si je veux écrire 57789, le résultat doit donner LAAUN.

Il n’y aura bien évidemment jamais la même lettre 2 fois dans la combinaison choisie au départ.

J’ai essayé =REMPLACER, =SUBSTITUTE
mais je bloque, je n’arrive pas à quelque chose de concluant.

A votre bon cœur!
 

job75

XLDnaute Barbatruc
Bonjour Puma63, vgendron,

Un exemple par formules dans le fichier joint.

Les tirages aléatoires en B2 et C2 sont là pour éviter de se fatiguer avec des entrées manuelles.

A+
 

Pièces jointes

  • Codage(1).xlsx
    14.6 KB · Affichages: 28

Puma63

XLDnaute Nouveau
Merci @vgendron et @job75 ,
Décidément, ce forum m'étonnera toujours...enfin surtout les membres!

Alors pour le fichier de vgendron, le top serait de pouvoir également faire l'inverse, transformer les lettres en chiffres.
Le fichier de job75 est top aussi, mais malheureusement les combinaisons sont imposées.
 

job75

XLDnaute Barbatruc
Re,

Maintenant si l'on veut pouvoir entrer ce que l'on veut en A2 A3 B2 C2 il faut forcément du VBA :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chiffre$, lettre$, d As Object, i%, x$, a$, b$, L%
chiffre = [A2].Text
lettre = [A3].Text
Set d = CreateObject("Scripting.Dictionary")
Application.EnableEvents = False 'désactive les évènements
'---traitement de A2 et A3---
For i = 1 To Len(chiffre)
    x = Mid(chiffre, i, 1)
    If IsNumeric(x) And Not d.exists(x) Then d(x) = "": a = a & x
Next
For i = 1 To Len(lettre)
    x = Mid(lettre, i, 1)
    If Not IsNumeric(x) And Not d.exists(x) Then d(x) = "": b = b & x
Next
chiffre = a: lettre = b
[A2] = chiffre: [A3] = lettre
L = IIf(Len(a) < Len(b), Len(a), Len(b)) 'plus petite longueur des 2 textes
'---traitement de B2 et B3---
d.RemoveAll
For i = 1 To L
    d(Mid(chiffre, i, 1)) = Mid(lettre, i, 1)
Next
a = [B2].Text: b = ""
For i = Len(a) To 1 Step -1
    x = Mid(a, i, 1)
    If d.exists(x) Then
        b = d(x) & b
    Else
        a = Left(a, i - 1) & Mid(a, i + 1)
    End If
Next
[B2] = a: [B3] = b
'---traitement de C2 et C3---
d.RemoveAll
For i = 1 To L
    d(Mid(lettre, i, 1)) = Mid(chiffre, i, 1)
Next
a = [C2].Text: b = ""
For i = Len(a) To 1 Step -1
    x = Mid(a, i, 1)
    If d.exists(x) Then
        b = d(x) & b
    Else
        a = Left(a, i - 1) & Mid(a, i + 1)
    End If
Next
[C2] = a: [C3] = b
Application.EnableEvents = True
Columns("A:C").AutoFit 'ajustement largeur
End Sub
Le Dictionary est utilisé 3 fois.

Fichier joint.

Bonne nuit.
 

Pièces jointes

  • Codage VBA(1).xlsm
    24.4 KB · Affichages: 27

Discussions similaires

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 821
dernier inscrit
hybroxis