Bill a une colonne de texte dans laquelle il doit remplacer toutes les instances de lettres par le nombre qui représente la position de la lettre dans l’alphabet. Ainsi, par exemple, si une cellule contient «T10A22», alors Bill doit remplacer les lettres telles que «2010122», où T est remplacé par 20 et A est remplacé par 1. Il note qu’il peut y avoir n’importe quel nombre de lettres dans n’importe quelle cellule donnée.

Si vous ne devez le faire qu’une seule fois (dans une seule feuille de calcul), il peut être assez facile de sélectionner la colonne et d’utiliser simplement Rechercher et remplacer. Vous pouvez rechercher A et remplacer par 1, rechercher B et remplacer par 2, et ainsi de suite. Il n’y aurait que 26 itérations à effectuer, ce qui peut sembler onéreux mais peut être fait en moins de temps qu’il n’en faut pour créer une macro pour effectuer les modifications.

Cela étant dit, si vous devez effectuer cette tâche régulièrement, une macro est votre meilleure solution. Vous pouvez implémenter l’approche Rechercher et remplacer en utilisant une macro de cette manière:

Sub ReplaceLetters1()

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _       ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     Selection.Replace What:="B", Replacement:="2"

Selection.Replace What:="C", Replacement:="3"

Selection.Replace What:="D", Replacement:="4"

Selection.Replace What:="E", Replacement:="5"

Selection.Replace What:="F", Replacement:="6"

Selection.Replace What:="G", Replacement:="7"

Selection.Replace What:="H", Replacement:="8"

Selection.Replace What:="I", Replacement:="9"

Selection.Replace What:="J", Replacement:="10"

Selection.Replace What:="K", Replacement:="11"

Selection.Replace What:="L", Replacement:="12"

Selection.Replace What:="M", Replacement:="13"

Selection.Replace What:="N", Replacement:="14"

Selection.Replace What:="O", Replacement:="15"

Selection.Replace What:="P", Replacement:="16"

Selection.Replace What:="Q", Replacement:="17"

Selection.Replace What:="R", Replacement:="18"

Selection.Replace What:="S", Replacement:="19"

Selection.Replace What:="T", Replacement:="20"

Selection.Replace What:="U", Replacement:="21"

Selection.Replace What:="V", Replacement:="22"

Selection.Replace What:="W", Replacement:="23"

Selection.Replace What:="X", Replacement:="24"

Selection.Replace What:="Y", Replacement:="25"

Selection.Replace What:="Z", Replacement:="26"

End Sub

Pour utiliser la macro, sélectionnez simplement les cellules que vous souhaitez traiter, puis exécutez-la. Vous pouvez également utiliser une approche différente qui repose sur une boucle For …​ Next, de cette manière:

Sub ReplaceLetters2()

Dim J As Integer

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _         ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     For J = 66 To 90         Selection.Replace What:=Chr(J), Replacement:=J - 64     Next J End Sub

Alors que la première opération .Replace pouvait être placée à l’intérieur de la boucle For …​ Next, j’ai choisi de la garder séparée pour que (du moins pour moi) la boucle paraisse plus simple. C’est un choix stylistique plus que toute autre chose.

Si, pour une raison quelconque, vous ne souhaitez pas utiliser la méthode .Replace, vous pouvez utiliser l’approche à l’ancienne consistant à regarder chaque caractère dans tout ce que vous évaluez. C’est l’approche utilisée dans cette fonction définie par l’utilisateur:

Function LetterToNum(c As Range) As String     Dim sRaw As String     Dim J As Integer

sRaw = UCase(c)

For J = 1 To 26         sRaw = Replace(sRaw, Chr(J + 64), J)

Next J     LetterToNum = sRaw End Function

Pour utiliser cette fonction, mettez simplement ce qui suit dans votre feuille de calcul, où A1 est la cellule que vous souhaitez convertir:

=LetterToNum(A1)

Si vous préférez ne pas utiliser de macros, vous pouvez utiliser une formule assez longue pour effectuer la conversion d’une cellule:

=TEXTJOIN("",FALSE, IF(ISNUMBER(VALUE(MID(A1,SEQUENCE(1,LEN(A1)),1))), MID(A1,SEQUENCE(1,LEN(A1)),1), COLUMN(INDIRECT(MID(A1,SEQUENCE(1,LEN(A1)),1) & ":" & MID(A1,SEQUENCE(1,LEN(A1)),1)))))

Cette formule suppose que le texte que vous souhaitez convertir se trouve dans la cellule A1. Il examine essentiellement chaque caractère de la chaîne de texte et détermine s’il s’agit d’un chiffre ou non. Si tel est le cas, il utilise le caractère original; si ce n’est pas le cas, il utilise la fonction INDIRECT pour déterminer une colonne en fonction de la lettre, puis utilise COLUMN pour renvoyer une valeur numérique pour cette colonne. Tout cela est ensuite recombiné à l’aide de la fonction TEXTJOIN.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (7820) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.