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+
 

Fichiers joints

job75

XLDnaute Barbatruc
Re,

J'ai mis la police Courier New - police à chasse fixe - sur la plage A2:C3, on voit mieux la correspondance.

A+
 

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.
 

Fichiers joints

Puma63

XLDnaute Nouveau
Quand je parlais des combinaisons imposées, je ne parlais pas des vôtres mais bien des miennes !!
Votre dernier fichier est juste parfait. C'est exactement de qu'il me fallait.
Merci pour tout.
 

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