diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index f201275b500676c6503ae27e38c5960c703e9f4d..feafba4b54fc345b975bda039a7da27f69fdf7ee 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -670,19 +670,21 @@ function calculer_critere_DEFAUT($idb, &$boucles, $crit)
 
 	if ($crit->not) $where = array("'NOT'", $where);
 
-	 // inserer la condition (cf {lang?})
-
-	$boucles[$idb]->where[]= (!$crit->cond ? $where :
-	  array("'?'",
-		calculer_argument_precedent($idb, $col, $boucles),
-		$where,
-		"''"));
+	// inserer la condition (cf {lang?})
+	// traiter a part la date, elle est mise d'office par SPIP,
+	if ($crit->cond) {
+		if (tester_param_date('articles', $col))
+		  $pred = '@$Pile["env"][\'' . $col ."']";
+		else $pred = calculer_argument_precedent($idb, $col, $boucles);
+		$where = array("'?'", $pred, $where,"''");
+	}
+	$boucles[$idb]->where[]= $where;
 }
 
 // http://doc.spip.org/@calculer_critere_infixe
 function calculer_critere_infixe($idb, &$boucles, $crit) {
 
-	global $table_date, $table_criteres_infixes;
+	global $table_criteres_infixes;
 	global $exceptions_des_jointures, $exceptions_des_tables;
 
 	$boucle = &$boucles[$idb];
@@ -713,14 +715,10 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
 	}
 
 	// Cas particulier : expressions de date
-	else if (isset($table_date[$type])
-	AND preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z]+)?$,",
-	$col, $regs)) {
+	else if ($regs = tester_param_date($boucle->type_requete, $col)) {
 		list($col, $table) =
 		calculer_critere_infixe_date($idb, $boucles, $regs);
-	}
-
-	else  {
+	} else {
 		if (@!array_key_exists($col, $desc['field'])) {
 	  	$calculer_critere_externe = 'calculer_critere_externe_init';
 			// gestion par les plugins des jointures tordues pas automatiques mais necessaires
@@ -774,6 +772,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
 	return array($arg, $op, $val, $col_alias);
 }
 
+
 // Faute de copie du champ id_secteur dans la table des forums,
 // faut le retrouver par jointure
 // Pour chaque Row il faudrait tester si le forum est 
@@ -1022,7 +1021,13 @@ function calculer_critere_infixe_ops($idb, &$boucles, $crit)
 	      // de la boucle superieure
 	      else if ($val == 'id_enfant')
 		$val = 'id_parent';
-	      $val = array(kwote(calculer_argument_precedent($idb, $val, $boucles)));
+	// un critere conditionnel sur date est traite a part
+	// car la date est mise d'office par SPIP, 
+	// il faut 
+	      if ($crit->cond AND tester_param_date('articles', $col))
+		  $val ='@$Pile["env"][\'' . $col ."']";
+	      else $val = calculer_argument_precedent($idb, $val, $boucles);
+	      $val = array(kwote($val));
 	    }
 	  } else {
 	    // comparaison explicite
@@ -1214,5 +1219,12 @@ function calculer_param_date($date_compare, $date_orig) {
 	")))";
 }
 
-
+function tester_param_date($type, $col)
+{
+	global $table_date;
+	if (isset($table_date[$type]) 
+	AND preg_match(",^((age|jour|mois|annee)_relatif|date|mois|annee|jour|heure|age)(_[a-z]+)?$,", $col, $regs))
+	  return $regs;
+	else return false;
+}
 ?>