Try this (not tested).
[L].[alt_end], [T].[source elevation]
[Splitted_Lines] AS [L]
[ID] AS [target ID],
FIRST([elevation]) AS [source elevation]
WHERE [no_ponceau] = "Doris_05"
AND [situation] = "aval"
) AS [A]
[EndPoints] as [B]
ON [A].[no_ponceau] = [B].[no_ponceau]
AND Touches([A].[ID], [B].[ID])
ORDER BY [B].[elevation] DESC
GROUP BY [ID]
) AS [T]
ON [L].[ID] = [T].[target ID]
SET [alt_end] = [source elevation]
I have rearranged some things. Table A is pre-filtered, since that is faster than filtering after the expensive join. Touches is changed to use object IDs, so that it is controlled by the location precision of the (first) drawing, whereas Geom (I) would the use default precision of 0.000001.