Le code pourrait être très certainement diminuer en évitant de répéter le code de conversion, mais je trouve que c'est très clair en l'état, et de toutes façons, on est pas à 10 lignes prêt ...
En l'état, seul les lettres sont prises en compte, donc si quelqu'un à le temps de faire la table de conversion, je mettrais à jour le code.
Code : Tout sélectionner
Func _KeybConvert($sString, $Type = 1) ; 1 = AZERTY To QWERTY  2 = QWERTY To AZERTY
    If $sString = '' Then
        SetError(1)
        Return ''
    EndIf
    If $Type <> 1 And $Type <> 2 Then
        SetError(1)
        Return ''
    EndIf
    Local $Azerty = "aAmMqQwWzZ;:,.!/?%*$&'-@+=<>[]{}"
    Local $Qwerty = "qQ,?aAzZwWmM;:!&§(_'èù)é+=./^$¨£"
    Local $Char, $Res, $j, $i
    Local $aAzerty = StringSplit($Azerty, "")
    Local $aQwerty = StringSplit($Qwerty, "")
    Switch $Type
        Case 1 ; AZERTY To QWERTY
            For $j = 1 To StringLen($sString)
                $Char = StringMid($sString, $j, 1)
                If StringInStr($Azerty, $Char, 1) Then
                    For $i = 1 To $aAzerty[0]
                        If $Char == $aAzerty[$i] Then
                            $Char = $aQwerty[$i]
                            ExitLoop
                        EndIf
                    Next
                EndIf
                $Res &= $Char
            Next
        Case 2 ; QWERTY To AZERTY
            For $j = 1 To StringLen($sString)
                $Char = StringMid($sString, $j, 1)
                If StringInStr($Qwerty, $Char, 1) Then
                    For $i = 1 To $aQwerty[0]
                        If $Char == $aQwerty[$i] Then
                            $Char = $aAzerty[$i]
                            ExitLoop
                        EndIf
                    Next
                EndIf
                $Res &= $Char
            Next
    EndSwitch
    Return $Res
EndFunc   ;==>_KeybConvertCode : Tout sélectionner
MsgBox(0, 'azerty => qwerty', _KeybConvert('azerty', 1))
MsgBox(0, 'qwerty => azerty', _KeybConvert('qwerty', 2))

