Option Explicit
Function Note(ByVal Don)
Dim L&, C&
If TypeOf Don Is Range Then Don = Don.Value
If IsArray(Don) Then
For L = 1 To UBound(Don, 1): For C = 1 To UBound(Don, 2)
Don(L, C) = UneNote(Don(L, C)): Next C, L
Note = Don
Else: Note = UneNote(Don): End If
End Function
Private Function UneNote(ByVal Appré)
If VarType(Appré) = vbString Then If Len(Appré) >= 1 Then UneNote _
= InStr("IFSBT", UCase$(Left$(Appré, 1))) Else UneNote = 0
If UneNote = 0 Then UneNote = "?"
End Function
Function Appréc(ByVal Don)
Dim L&, C&
If TypeOf Don Is Range Then Don = Don.Value
If IsArray(Don) Then
For L = 1 To UBound(Don, 1): For C = 1 To UBound(Don, 2)
Don(L, C) = UneAppréc(Don(L, C)): Next C, L
Appréc = Don
Else: Appréc = UneAppréc(Don): End If
End Function
Private Function UneAppréc(ByVal Note)
On Error Resume Next
UneAppréc = Choose(Int(Note + 0.5), "I", "F", "S", "B", "TB")
If Err Then UneAppréc = "?"
End Function