I notice that if a word such as En or A is at the beginning of the sentence, that it will still be converted to en or a. The following may be of some use because it leaves all the words in the too array as they were originally.
Sub blah()
too = Array("in", "en", "pour", "para", "a", "per", "di", "de", "avec", "contre", "dans", "entre", "par", "sans", "sur", "bis", "für", "aus", "mit", "nach", "von", "auf", "sopra", "tra", "da", "con", "contra", "por", "sin")
For Each cll In Selection.Cells
xx = Split(cll.Value)
For i = LBound(xx) To UBound(xx)
If IsError(Application.Match(xx(i), too, 0)) Then xx(i) = UCase(Left(xx(i), 1)) & Mid(xx(i), 2)
Next i
cll.Value = Join(xx)
Next cll
End Sub
Now you just need to deal with the dot variants.
Also, be very careful with the .Replace method; Excel remembers the settings used the last time Replace was used (including when it was used manually on the sheet), so you need to ensure that Match case and match entire cell contents tick boxes are correctly set and that you're not looking for a format either, so:
Cells.Replace What:=from(i), Replacement:=too(i)
becomes:
Cells.Replace What:=from(i), Replacement:=too(i), LookAt:=xlPart ,Searchformat:=false
Also be aware that a word such as Pourtant which includes pour, will have its capital letter reduced to lowercase. The same applies to any word beginning with A.