Programmation par contraintes : partie I