If I turn on the pic with signal>185 then duty = 0 ; then I reduce the signal value under 185 , then duty=divf
The first value in the LOOKUP table is returned when value is 0. You have 25 entries in the table so value should range from 0 to 24. When signal is >185 value is 25 which points outside of the table in which case divf remains unchanged - so if this is at startup it remains at 0.

If I move quickly the transmitter-stick (signal from 150 ) to maximum (200) I obtain random different values for duty, like 250 ,191, 90, 223 and sometime 255.
If I move slow the transmitter-stick , then duty = divf all time, so work perfectly.
This I don't think has anything to do with the LOOKUP command. Have you looked at the actual pulses being measured by the PIC, is it possible that they actually ARE varying in widht (due to noise in the stick or whatever) and that the PIC is doing exactly as it should?

/Henrik.