diff --git a/ecrire/req/sqlite_generique.php b/ecrire/req/sqlite_generique.php
index 40adefc616b330285e78eb1d144646b197ce5c82..13c77b8636eebaadd21c47004e204ce857d9198a 100644
--- a/ecrire/req/sqlite_generique.php
+++ b/ecrire/req/sqlite_generique.php
@@ -1823,6 +1823,7 @@ function spip_versions_sqlite(){
 
 class spip_sqlite {
 	static $requeteurs = array();
+	static $transaction_en_cours = array();
 
 	function spip_sqlite(){}
 
@@ -1840,6 +1841,7 @@ class spip_sqlite {
 
 	static function demarrer_transaction($serveur){
 		spip_sqlite::executer_requete("BEGIN TRANSACTION",$serveur);
+		spip_sqlite::$transaction_en_cours[$serveur] = true;
 	}
 
 	static function executer_requete($query, $serveur, $tracer=null){
@@ -1854,10 +1856,18 @@ class spip_sqlite {
 
 	static function annuler_transaction($serveur){
 		spip_sqlite::executer_requete("ROLLBACK",$serveur);
+		spip_sqlite::$transaction_en_cours[$serveur] = false;
 	}
 
 	static function finir_transaction($serveur){
+		// si pas de transaction en cours, ne rien faire et le dire
+		if (!isset (spip_sqlite::$transaction_en_cours[$serveur])
+		  OR spip_sqlite::$transaction_en_cours[$serveur]==false)
+			return false;
+		// sinon fermer la transaction et retourner true
 		spip_sqlite::executer_requete("COMMIT",$serveur);
+		spip_sqlite::$transaction_en_cours[$serveur] = false;
+		return true;
 	}
 }