Chiffrer un nombre en lettres selon une combinaison

  • Initiateur de la discussion Initiateur de la discussion Puma63
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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!
 
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.
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

S
Réponses
2
Affichages
1 K
J
Retour