diff --git a/CHANGELOG.md b/CHANGELOG.md
index c45a6d30fdcd0bf3bffbc42cbe18ec5d53409ed6..c9c41e31569b49516588d2ccb3d6f8ae347d7b5c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -37,6 +37,7 @@
 
 ### Fixed
 
+- #5169 Éviter une erreur JS sur `$.fn.positionner()` si la sélection est vide
 - #5168 Éviter une erreur fatale sur `analyse_fichier_connection()` si le fichier de connexion à analyser n’existe pas
 - #5101 Le statut de rubrique par défaut à tester est désormais `prepa` plutôt que `new`
 - #5183 Éviter de générer des icones trop grandes dans la liste des articles syndiqués
diff --git a/prive/javascript/ajaxCallback.js b/prive/javascript/ajaxCallback.js
index 1e2fa9bb22070ec1cbccd4d656eabeb27257d9d3..76edf4e48b56d5d7155e151e4fb75b7cbc3e5e3e 100644
--- a/prive/javascript/ajaxCallback.js
+++ b/prive/javascript/ajaxCallback.js
@@ -191,6 +191,9 @@ jQuery.getScript = function(url,callback){
  * @param bool force
  */
 jQuery.fn.positionner = function(force, setfocus) {
+	if (!this.length) {
+		return this;
+	}
 	var offset = jQuery(this).offset();
 	var hauteur = parseInt(jQuery(this).css('height'));
 	var marge = jQuery.spip.positionner_marge || 5;