You try this UDF in a standard module. It uses Google Translate.
It appear to work for me, although I've no idea if the translation is correct 
Function Translate(rng As Range, Optional translateFrom As String = "en", Optional translateTo As String = "fr")
Application.Volatile (False)
Dim p1&, p2&, url$, resp$
Const DIV_RESULT$ = "<div class=""result-container"">"
Const URL_TEMPLATE$ = "https://translate.google.com/m?hl=[from]&sl=[from]&tl=[to]&ie=UTF-8&prev=_m&q="
url = URL_TEMPLATE & WorksheetFunction.EncodeURL(rng)
url = Replace(url, "[to]", translateTo)
url = Replace(url, "[from]", translateFrom)
resp = WorksheetFunction.WebService(url)
p1 = InStr(resp, DIV_RESULT)
If p1 Then
p1 = p1 + Len(DIV_RESULT)
p2 = InStr(p1, resp, "</div>")
Translate = Mid$(resp, p1, p2 - p1)
End If
End Function
Bookmarks