Remplacer plusieurs caractères sur Excel

VbaNoob -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai farfouillé le site ainsi que d'autres mais je ne trouve pas ce que je souhaite, à savoir :
Une macro permettant de changer plusieurs caractères dans un texte sans changer les caractères initiaux par leurs changements.

Pour faire plus clair ( :)) :
"bonjour" -> "lngknea"
b : l
o : n
n : g
j : k
o : n
u : e
r : a
Et non :
"bonjour" -> "lggkgea" : comme le "o" devient "n", la macro change le "n" en "g", donc ça fait "gg" au lieu de "ng".

J'avais pris la macro suivante :

Sub remplacerCaracteres()
Dim Cell As Variant

For Each Cell In Selection
Cell.Value = Replace(Cell.Value, "b", "l")
Next Cell
End Sub

Et j'avais ajouté à la suite les lignes correspondantes à chaque lettre :

Sub remplacerCaracteres()
Dim Cell As Variant

For Each Cell In Selection
Cell.Value = Replace(Cell.Value, "b", "l")
Cell.Value = Replace(Cell.Value, "o", "n")
Cell.Value = Replace(Cell.Value, "n", "g")
Cell.Value = Replace(Cell.Value, "j", "k")
Cell.Value = Replace(Cell.Value, "u", "e")
Cell.Value = Replace(Cell.Value, "r", "a")

Next Cell
End Sub

Et du coup ça me remplaçait tout, y compris les caractères déjà changés.

J'ai essayé de modifier en mettant :
Cell.Value = Replace(Replace(Cell.Value, "b", "l"),"o", "n")
Etc
Mais ça ne fonctionne pas.

Quelqu'un saurait-il m'aider ?

Merci !

4 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Essaie ceci :
    Option Explicit
    
    Dim Lettres(), A_Remplacer_Par()
    
    Sub Main()
    Dim mot As String, mot_crypte As String
       Lettres = Array("b", "o", "n", "j", "u", "r")
       A_Remplacer_Par = Array("l", "n", "g", "k", "e", "a")
       mot = "bonjour"
       mot_crypte = Crypte(mot)
       MsgBox mot_crypte
    End Sub
    
    Function Crypte(mot As String) As String
    Dim i As Integer, temp As String
       temp = ""
       For i = 1 To Len(mot)
          temp = temp & A_Remplacer_Par(Application.Match(Mid(mot, i, 1), Lettres, 0) - 1)
       Next i
       Crypte = temp
    End Function


    Les variables tableaux Lettres et A_Remplacer_Par sont à compléter.

    EDIT :
    En "prime", une fonction pour "décrypter" :

    Function Decrypte(mot As String) As String
    Dim i As Integer, temp As String
       temp = ""
       For i = 1 To Len(mot)
          temp = temp & Lettres(Application.Match(Mid(mot, i, 1), A_Remplacer_Par, 0) - 1)
       Next i
       Decrypte = temp
    End Function


    Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
    0