When you update some fields, you are not creating a new ref matricule value, right?
Then these updated values are not loaded, because of your where clause:
WHERE NOT Exists([ref matricule]);
There is a nice example of incremental loading incl. updates and deletes of records, check the QV cookbook @