If the users can not pick from the validation list, they are in dire need of training. In the past, I have just used the selection event to present a userform with a listbox or combobox. That method gives you lots of flexibility and holds your users hands more too.

In the worksheet code:
[VBA]Public Sub Worksheet_Change(ByVal Target As Range)
orderCharKen Target
End Sub[/VBA]
In a Module or the existing one:
[VBA]Sub orderCharKen(ByVal Target As Range)
Dim disOrder As String
Dim newOrder As String
Dim disT As String
Dim disC As String
Dim disD As String
Dim disV As String
Dim disH As String
Dim disS As String
Dim newT As String
Dim newC As String
Dim newD As String
Dim newV As String
Dim newH As String
Dim newS As String
Dim vRange As Range, fRange As Range

If Application.Intersect(Target, Range("ORDER_CHARACTERS")) Is Nothing _
Or Target.Count <> 1 Then Exit Sub

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

disOrder = LCase(Target.Value)

disT = "t"
disC = "c"
disD = "d"
disV = "v"
disH = "h"
disS = "s"

If Len(disOrder) <> Len(Application.Substitute(disOrder, disT, "")) Then
newT = disT
Else
newT = ""
End If
If Len(disOrder) <> Len(Application.Substitute(disOrder, disC, "")) Then
newC = disC
Else
newC = ""
End If
If Len(disOrder) <> Len(Application.Substitute(disOrder, disD, "")) Then
newD = disD
Else
newD = ""
End If
If Len(disOrder) <> Len(Application.Substitute(disOrder, disV, "")) Then
newV = disV
Else
newV = ""
End If
If Len(disOrder) <> Len(Application.Substitute(disOrder, disH, "")) Then
newH = disH
Else
newH = ""
End If
If Len(disOrder) <> Len(Application.Substitute(disOrder, disS, "")) Then
newS = disS
Else
newS = ""
End If

newOrder = newT & newC & newD & newV & newH & newS
'=INDIRECT(INDEX(VERIFICATION_RANGE_FOR_FREE_TEXT,RELATIVE_POSITION_WORKSHE ET_A))
Set vRange = Evaluate("=INDIRECT(INDEX(VERIFICATION_RANGE_FOR_FREE_TEXT,RELATIVE_POSITIO N_WORKSHEET_A))")
Set fRange = vRange.Find(newOrder)
If Not fRange Is Nothing Then Target.Value2 = newOrder

If Target.Value2 <> newOrder Then
MsgBox "Invalid Entry: " & Target.Value2 & vbLf & _
"Sorted Entry: " & newOrder, vbCritical
Target.Value2 = Empty
Target.Select
End If

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub[/VBA]