Résumé: Constraint Handling Rules (CHR) est un langage de haut niveau permettant le developpement de solveur de contraintes ainsi que la modification de solveurs existants. Dans ce mèmoire nous présentons une version précisée de la sémantique operationnelle de CHR. Cette nouvelle définition est plus conforme aux implémentations actuelles de CHR. Nous présentons également des résultats de correction et de complétude de programmes CHR. En général, plus d'une CHR règle est applicable à une conjonction de contraintes. Il est donc préférable d'avoir le même résultat, en termes syntaxtiques et sémantiques, indépendamment de la règle choisie lors de l'execution. Cette propriété syntaxique essentielle pour tout solveur de contraintes, qu'on appelera confluence, est au coeur de ce travail. La confluence garantit que le solveur calcule un résultat unique pour un ensemble de contraintes donné. Cela implique également que l'ordre de prise en compte des contraintes par le solveur n'a pas d'effet sur le résultat. Nous définissons une condition syntaxique décidable, nécessaire et suffisante pour la confluence de programmes CHR dont l'exécution termine. Cette condition s'appuie sur la notion de paires critiques utilisée pour les systèmes de réécriture de termes. Bien que semblable à la confluence en réécriture, la confluence de programmes CHR ne se réduit pas à celle-ci. Il est aussi prouvé dans ce mémoire que la confluence d'un programme implique (sous une faible restriction) la consistance de sa signification logique. Après l'étude de la confluence, nous nous intéressons aux méthodes permettant de rendre confluent un programme CHR qui ne l'est pas (si cela est possible). Finalement, nous présentons des applications pratiques de la programmation par contraintes utilisant le langage CHR. Le but est de montrer que la simplicité, la flexibilité, l'efficacité et le prototypage rapide sont des avantages de CHR.