diff --git a/blocks_fonctions.php b/blocks_fonctions.php
index ccd276004b4a8c18e4e21119d3bef743b22eb91b..87c3db6014ea34ec9393031d7c4a3f7bb306966f 100644
--- a/blocks_fonctions.php
+++ b/blocks_fonctions.php
@@ -119,22 +119,6 @@ function _block_charger_block($id_bloc) {
 		'b.id_bloc = ' . (int)$id_bloc
 	);
 
-	// chercher le squelette pour afficher le contenu du bloc
-	if (
-		test_espace_prive()
-		&& ($f = find_in_path($infos['identifiant'] . '.' . _EXTENSION_SQUELETTES, 'blocks_prive/'))
-		&& lire_fichier($f, $contenu)
-	) {
-		$squelette = 'blocks_prive/' . $infos['identifiant'];
-	} else if (
-		($f = find_in_path($infos['identifiant'] . '.' . _EXTENSION_SQUELETTES, 'blocks/'))
-		&& lire_fichier($f, $contenu)
-	) {
-		$squelette = 'blocks/' . $infos['identifiant'];
-	} else {
-		$squelette = 'blocks/dist';
-	}
-
 	$contexte = [
 		'id_bloc' => $id_bloc,
 	];
@@ -148,6 +132,8 @@ function _block_charger_block($id_bloc) {
 		}
 	}
 
+	$squelette = blocks_trouver_squelette($infos['identifiant']);
+
 	return recuperer_fond($squelette, $contexte);
 }
 
@@ -174,3 +160,37 @@ function generer_TITRE_BLOC($id_bloc) {
 
 	return $titre;
 }
+
+/**
+ * Chercher le squelette correspondant à un bloc par son identifiant
+ *
+ * @param string $identifiant Identifiant du bloc
+ * @param bool   $force_public Forcer une recherche du squelette public
+ * @return string Chemin du squelette trouvé
+ */
+function blocks_trouver_squelette($identifiant, $force_public = false) {
+	static $cache;
+	$cle = $identifiant . ($force_public ? 'oui' : 'non');
+	if (isset($cache[$cle])) {
+		return $cache[$cle];
+	}
+
+	if (
+		!$force_public
+		&& test_espace_prive()
+		&& ($f = find_in_path($identifiant . '.' . _EXTENSION_SQUELETTES, 'blocks_prive/'))
+		&& lire_fichier($f, $contenu)
+	) {
+		$squelette = 'blocks_prive/' . $identifiant;
+	} else if (
+		($f = find_in_path($identifiant . '.' . _EXTENSION_SQUELETTES, 'blocks/'))
+		&& lire_fichier($f, $contenu)
+	) {
+		$squelette = 'blocks/' . $identifiant;
+	} else {
+		$squelette = 'blocks/dist';
+	}
+	$cache[$cle] = $squelette;
+
+	return $squelette;
+}