diff --git a/ecrire/inc/message_select.php b/ecrire/inc/message_select.php
index b24465f5eafc95793ad6823eaacec57227b53e35..a7e14bedda8ed575b4c23c17c93b090471a4f228 100644
--- a/ecrire/inc/message_select.php
+++ b/ecrire/inc/message_select.php
@@ -17,9 +17,14 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 function afficher_messages($titre_table, $from, $where, &$messages_vus, $afficher_auteurs = true, $important = false, $boite_importante = true, $obligatoire = false) {
 	global $connect_id_auteur, $couleur_foncee, $spip_lang_rtl, $spip_lang_left;
 
-	$query_message = "SELECT messages.* FROM spip_messages AS messages$from $where" . (!$messages_vus ? '' : ' AND messages.id_message NOT IN ('.join(',', $messages_vus).')') . ' ORDER BY date_heure DESC';
+	$from =  "spip_messages AS messages$from";
+	$where .= (!$messages_vus ? '' : ' AND messages.id_message NOT IN ('.join(',', $messages_vus).')');
 
-	$tranches = afficher_tranches_requete($query_message, ($afficher_auteurs ? 4 : 2));
+	$requete = "SELECT messages.* FROM $from $where"  . ' ORDER BY date_heure DESC';
+	
+	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM $from $where"));
+	$cpt = $cpt['n'];
+	$tranches = afficher_tranches_requete($requete, $cpt, ($afficher_auteurs ? 4 : 2));
 
 	if ($tranches OR $obligatoire) {
 		if ($important) debut_cadre_couleur();
@@ -32,7 +37,7 @@ function afficher_messages($titre_table, $from, $where, &$messages_vus, $affiche
 
 		echo $tranches;
 
-		$result_message = spip_query($query_message);
+		$result_message = spip_query($requete);
 
 		while($row = spip_fetch_array($result_message)) {
 			$vals = array();
diff --git a/ecrire/inc/mots.php b/ecrire/inc/mots.php
index 40905e7b825182a5423f3839c0300cafa72c9128..49ded1cadbb052f07e3572b7b3d6f4fe3dd2b1c2 100644
--- a/ecrire/inc/mots.php
+++ b/ecrire/inc/mots.php
@@ -583,10 +583,16 @@ function afficher_groupe_mots($id_groupe) {
 			
 	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page", "fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')";
 
-	$multi = creer_objet_multi ("titre", "$spip_lang");
-	$query = "SELECT id_mot, titre, $multi FROM spip_mots WHERE id_groupe = '$id_groupe' ORDER BY multi";
+	$select = 'id_mot, titre, ' . creer_objet_multi ("titre", "$spip_lang");
+	$requete = "FROM spip_mots WHERE id_groupe = '$id_groupe'" ;
+	$order = " ORDER BY multi";
 
-	$tranches = afficher_tranches_requete($query, 3, $tmp_var, $javascript);
+	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n $requete"));
+	$cpt = $cpt['n'];
+
+	$requete = "SELECT $select $requete $order";
+
+	$tranches = afficher_tranches_requete($requete, $cpt, 3, $tmp_var, $javascript);
 
 	if (strlen($tranches)) {
 
@@ -610,7 +616,7 @@ function afficher_groupe_mots($id_groupe) {
 
 		echo ereg_replace("\:\:id\_ajax\_fonc\:\:", $id_ajax_fonc, $tranches);
 
-		$result = spip_query($query);
+		$result = spip_query($requete);
 		while ($row = spip_fetch_array($result)) {
 		
 			$vals = '';
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index f15f1655a20b47e90340303952dbddba244b25d2..b5950153edcbd0fa0c0b1255b8cce14bbd4e4ba3 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -447,22 +447,10 @@ function afficher_liste($largeurs, $table, $styles = '') {
 	return $res;
 }
 
-function afficher_tranches_requete(&$query, $colspan, $tmp_var=false, $javascript=false, $nb_aff = 10) {
+function afficher_tranches_requete(&$query, $num_rows, $colspan, $tmp_var=false, $javascript=false, $nb_aff = 10) {
 	static $ancre = 0;
 	global $spip_lang_right, $spip_display;
 
-	$query = trim($query);
-	$query_count = $query;
-	if (preg_match('{GROUP[[:space:]]BY}',$query_count)==FALSE){
-		$query_count = eregi_replace('^(SELECT)[[:space:]].*[[:space:]](FROM)[[:space:]]', '\\1 COUNT(*) \\2 ', $query);
-	}
-	$query_count = eregi_replace('ORDER[[:space:]]+BY.*$', '', $query_count);
-
-	$res = spip_query($query_count);
-	$num_rows = spip_num_rows($res);
-	if ($num_rows == 1) // ca n'est pas une requete avec jointure
-		list($num_rows) = spip_fetch_array($res);
-
 	if (!$num_rows) return;
 
 	// Ne pas couper pour trop peu
@@ -683,7 +671,6 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a
 	global $options, $spip_display;
 	global $spip_lang_left, $spip_lang_right;
 
-
 	// Preparation pour basculer vers liens de traductions
 	$afficher_trad = ($GLOBALS['meta']['gerer_trad'] == "oui");
 	if ($afficher_trad) {
@@ -739,12 +726,18 @@ function afficher_articles($titre_table, $requete, $afficher_visites = false, $a
 	$jjscript = addslashes(serialize($jjscript));
 	$hash = "0x".substr(md5($connect_id_auteur.$jjscript), 0, 16);
 
-
-
 	$tmp_var = substr(md5($jjscript), 0, 4);
 	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page","fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::", true) . "','$tmp_var')";
-	$tranches = afficher_tranches_requete($requete, $afficher_auteurs ? 4 + $ajout_col : 3 + $ajout_col, $tmp_var, $javascript);
 
+	if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/D',
+			$requete,
+		       $r)) {
+	  $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]"));
+	  $cpt = $cpt['n'];
+
+	  $tranches = afficher_tranches_requete($requete, $cpt, $afficher_auteurs ? 4 + $ajout_col : 3 + $ajout_col, $tmp_var, $javascript);
+
+	}
 	$requete = str_replace("FROM spip_articles AS articles ", "FROM spip_articles AS articles LEFT JOIN spip_petitions AS petitions USING (id_article)", $requete);
 
 	if (strlen($tranches) OR $toujours_afficher) {
@@ -956,7 +949,15 @@ function afficher_articles_trad($titre_table, $requete, $afficher_visites = fals
 	$tmp_var = substr(md5($jjscript), 0, 4);
 	
 	$javascript = "charger_id_url('" . generer_url_ecrire("ajax_page", 'fonction=sql&id_ajax_fonc=::id_ajax_fonc::::deb::') . "','$tmp_var')";
-	$tranches = afficher_tranches_requete($requete, 4, $tmp_var, $javascript);
+
+	if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', 
+			$requete,
+		       $r)) {
+	  $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]"));
+	  $cpt = $cpt['n'];
+
+	  $tranches = afficher_tranches_requete($requete, $cpt, 4, $tmp_var, $javascript);
+	}
 
 	$requete = str_replace("FROM spip_articles AS articles ", "FROM spip_articles AS articles LEFT JOIN spip_petitions AS petitions USING (id_article)", $requete);
 
@@ -1115,10 +1116,15 @@ function afficher_breves($titre_table, $requete, $affrub=false) {
 		if ($GLOBALS['langue_rubrique']) $langue_defaut = $GLOBALS['langue_rubrique'];
 		else $langue_defaut = $GLOBALS['meta']['langue_site'];
 	}
-	
-	if ($options == "avancees") $tranches = afficher_tranches_requete($requete, 4);
-	else  $tranches = afficher_tranches_requete($requete, 3);
 
+	if (preg_match('/(\bFROM\s+.*?)(\s+ORDER\s+BY\s+.*)?$/', 
+			$requete,
+		       $r)) {
+		$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n $r[1]"));
+		$cpt = $cpt['n'];
+
+		$tranches = afficher_tranches_requete($requete, $cpt, ($options == "avancees") ? 4 : 3);
+	}
 	if (strlen($tranches)) {
 
 		//debut_cadre_relief("breve-24.gif");
@@ -1213,7 +1219,14 @@ function afficher_rubriques($titre_table, $requete) {
 	global $connect_id_auteur;
 	global $spip_lang_rtl;
 
-	$tranches = afficher_tranches_requete($requete, 3);
+	if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', 
+			$requete,
+		       $r)) {
+	  $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]"));
+	  $cpt = $cpt['n'];
+
+	  $tranches = afficher_tranches_requete($requete, $cpt, 3);
+	}
 
 	if (strlen($tranches)) {
 
@@ -1325,7 +1338,14 @@ function puce_statut($statut, $type='article') {
 
 
 function afficher_auteurs ($titre_table, $requete) {
-	$tranches = afficher_tranches_requete($requete, 2);
+	if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', 
+			$requete,
+		       $r)) {
+
+	  $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]"));
+	  $cpt = $cpt['n'];
+	  $tranches = afficher_tranches_requete($requete, $cpt, 2);
+	}
 
 	if (strlen($tranches)) {
 
diff --git a/ecrire/inc/sites_voir.php b/ecrire/inc/sites_voir.php
index 453d03d430e7d35cd3fdd011b38efd6cec55674b..e0dc948ba7b4a9e014dc730f6a820a9916a44d40 100644
--- a/ecrire/inc/sites_voir.php
+++ b/ecrire/inc/sites_voir.php
@@ -16,8 +16,15 @@ function afficher_sites($titre_table, $requete) {
 	global $couleur_claire, $spip_lang_left, $spip_lang_right;
 	global $connect_id_auteur;
 
-	$tranches = afficher_tranches_requete($requete, 3);
+	if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', 
+			$requete,
+		       $r)) {
 
+	  $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]"));
+	  $cpt = $cpt['n'];
+
+	  $tranches = afficher_tranches_requete($requete, $cpt, 3);
+	}
 	if ($tranches) {
 //		debut_cadre_relief("site-24.gif");
 		if ($titre_table) echo "<div style='height: 12px;'></div>";
@@ -155,7 +162,14 @@ function afficher_syndic_articles($titre_table, $requete, $afficher_site = false
 	if ($connect_statut == '0minirezo') $cols ++;
 	if ($afficher_site) $cols ++;
 
-	$tranches = afficher_tranches_requete($requete, $cols);
+	if (preg_match('/(\s+FROM\s+.*?)(ORDER\s+BY\s+.*)?$/', 
+			$requete,
+		       $r)) {
+	  $cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n$r[1]"));
+	  $cpt = $cpt['n'];
+
+	  $tranches = afficher_tranches_requete($requete, $cpt, $cols);
+	}
 
 	if (strlen($tranches)) {