diff --git a/ecrire/action/editer_liens.php b/ecrire/action/editer_liens.php
index f9ba5148f0f84c211ff2e6882701ef0e2c5a3fce..2125a660fae9789ab7fd8107f2a80ac6e4d76cca 100644
--- a/ecrire/action/editer_liens.php
+++ b/ecrire/action/editer_liens.php
@@ -834,10 +834,17 @@ function lien_set($objet_source, $primary, $table_lien, $id, $objets, $qualif) {
 			);
 			$args['id_objet'] = $id_objet;
 
-			if (lien_triables($table_lien) and isset($qualif['rang_lien']) and intval($qualif['rang_lien'])) {
-				// on decale les liens de rang_lien>=la valeur inseree pour faire la place
-				$w = lien_where($primary, '*', $objet, $id_objet, array('rang_lien>='.intval($qualif['rang_lien']),"$primary!=".intval($id)));
-				sql_update($table_lien, array('rang_lien'=>'rang_lien+1'), $w);
+			if (lien_triables($table_lien) and isset($qualif['rang_lien'])) {
+				if (intval($qualif['rang_lien'])) {
+					// on decale les liens de rang_lien>=la valeur inseree pour faire la place
+					$w = lien_where($primary, '*', $objet, $id_objet, array('rang_lien>='.intval($qualif['rang_lien']),"$primary!=".intval($id)));
+					sql_update($table_lien, array('rang_lien'=>'rang_lien+1'), $w);
+				}
+				// tous les liens de même rôle recoivent le rang indiqué aussi
+				if (roles_colonne($objet_source, $objet)) {
+					$w = lien_where($primary, $id, $objet, $id_objet);
+					sql_updateq($table_lien, array('rang_lien' => intval($qualif['rang_lien'])), $w);
+				}
 				$reordonner = true;
 			}
 
diff --git a/prive/formulaires/editer_liens.php b/prive/formulaires/editer_liens.php
index 334e8be838f2da2d6d1facc05e206e6b3182b422..1b114f6add7a1806d2e2a11a5c6ae1478838d939 100644
--- a/prive/formulaires/editer_liens.php
+++ b/prive/formulaires/editer_liens.php
@@ -184,7 +184,7 @@ function formulaires_editer_liens_charger_dist($a, $b, $c, $options = array()) {
  * ordonner_lien doit être de la forme, et sert pour trier les liens
  * ordonner_lien[objet1-id1-objet2-id2] = nouveau_rang
  *
- * desordonner_liens n'a pas de forme precise, il doit simplement estre non nul/non vide
+ * desordonner_liens n'a pas de forme précise, il doit simplement être non nul/non vide
  *
  * @param string $a
  * @param string|int $b
@@ -278,7 +278,7 @@ function formulaires_editer_liens_traiter_dist($a, $b, $c, $options = array()) {
 				foreach ($supprimer as $k => $v) {
 					if ($lien = lien_verifier_action($k, $v)) {
 						$lien = explode('-', $lien);
-						list($objet_source, $ids, $objet_lie, $idl, $role) = $lien;
+						list($objet_source, $ids, $objet_lie, $idl, $role) = array_pad($lien, 5, null);
 						// appliquer une condition sur le rôle si défini ('*' pour tous les roles)
 						$cond = (!is_null($role) ? array('role' => $role) : array());
 						if ($objet_lien == $objet_source) {
@@ -407,7 +407,7 @@ function lien_verifier_action($k, $v) {
 function lien_retrouver_qualif($objet_lien, $lien) {
 	// un role est défini dans la liaison
 	$defs = explode('-', $lien);
-	list($objet1, , $objet2, , $role) = $defs;
+	list($objet1, , $objet2, , $role) = array_pad($defs, 5, null);
 	if ($objet_lien == $objet1) {
 		$colonne_role = roles_colonne($objet1, $objet2);
 	} else {