diff --git a/app/models/concerns/as_direct_object.rb b/app/models/concerns/as_direct_object.rb
index 6b21fb09cbfa59c3a302e7fd43a61f7d46fbe188..21677277b55f68a73ce22c5a31d152f7a7cae160 100644
--- a/app/models/concerns/as_direct_object.rb
+++ b/app/models/concerns/as_direct_object.rb
@@ -22,8 +22,8 @@ module AsDirectObject
               class_name: 'Communication::Website::Connection',
               dependent: :destroy # When the direct object disappears all connections with the object as a source must disappear
 
-    after_save  :sync_connections
-    after_touch :sync_connections
+    after_save  :connect_dependencies
+    after_touch :connect_dependencies
   end
 
   def is_direct_object?
@@ -34,7 +34,7 @@ module AsDirectObject
     false
   end
 
-  def sync_connections
+  def connect_dependencies
     dependencies.each do |dependency|
       website.connect(dependency, self)
     end
diff --git a/app/models/concerns/as_indirect_object.rb b/app/models/concerns/as_indirect_object.rb
index 42989fba26e0468eee0afd3d5cafea34cf9b25cd..4bb3d77cac7b4e46b3d2192b3cdc806ca4dad26c 100644
--- a/app/models/concerns/as_indirect_object.rb
+++ b/app/models/concerns/as_indirect_object.rb
@@ -13,14 +13,14 @@ module AsIndirectObject
     has_many  :connections,
               as: :indirect_object,
               class_name: 'Communication::Website::Connection'
-              # Pas dependent_destroy parce que le processus est plus sophistiqué, et est fait dans la méthode destroy
+              # Pas dependent_destroy parce que le processus est plus sophistiqué, et est fait dans la méthode destroy du WithDependencies
     has_many  :websites,
               through: :connections
     # Ce serait super de faire la ligne ci-dessous, mais Rails ne sait pas faire ça avec un objet polymorphe (direct_source)
     # has_many :direct_sources, through: :connections
 
-    after_save  :sync_connections
-    after_touch :sync_connections
+    after_save  :connect_and_sync_direct_sources
+    after_touch :connect_and_sync_direct_sources
   end
 
   def is_direct_object?
@@ -58,7 +58,7 @@ module AsIndirectObject
                                 : reference.direct_sources # Récursivité sur les références
   end
 
-  def sync_connections
+  def connect_and_sync_direct_sources
     direct_sources.each do |direct_source|
       direct_source.website.connect self, direct_source
       direct_source.sync_with_git
diff --git a/app/models/concerns/with_dependencies.rb b/app/models/concerns/with_dependencies.rb
index a84da42596be128ced4ab26d90c19dc2c36824d5..4a4b37b169ac994a5878bfb80d3c5b8915dd85ba 100644
--- a/app/models/concerns/with_dependencies.rb
+++ b/app/models/concerns/with_dependencies.rb
@@ -20,13 +20,18 @@ module WithDependencies
     # et on a besoin que ces recursive_dependencies n'incluent pas l'objet courant, puisqu'il est "en cours de destruction" (ni ses propres recursive_dependencies).
     # Mais si on détruit juste l'objet et qu'on fait un `after_destroy :clean_website_connections`
     # on ne peut plus accéder aux websites (puisque l'objet est déjà détruit et ses connexions en cascades).
+    # Egalement, quand on supprime un objet indirect, il faut synchroniser ses anciennes sources directes pour supprimer toute référence éventuelle
     # Donc :
-    # 1. on stocke les websites
+    # 1. on stocke les websites (et les sources directes si nécessaire)
     # 2. on laisse la méthode destroy normale faire son travail
-    # 3. PUIS on demande aux websites stockés de nettoyer leurs connexions et leurs git files
+    # 3. PUIS on demande aux websites stockés de nettoyer leurs connexions et leurs git files (et on synchronise les potentielles sources directes)
     self.transaction do
+      snapshot_direct_sources = try(:direct_sources).to_a || []
       website_ids = websites_to_clean.pluck(:id)
       super
+      snapshot_direct_sources.each do |direct_source|
+        direct_source.sync_with_git
+      end
       clean_websites(Communication::Website.where(id: website_ids))
       # TODO: Actuellement, on ne nettoie pas les références
       # Exemple : Quand on supprime un auteur, il n'est pas nettoyé dans le static de ses anciens posts.
diff --git a/test/models/communication/website/dependency_test.rb b/test/models/communication/website/dependency_test.rb
index 12566f9980edecd471e15a5be4e2447fdcdfad29..f9ffd5c089049c83a471d8d2b8db166ba6f8011c 100644
--- a/test/models/communication/website/dependency_test.rb
+++ b/test/models/communication/website/dependency_test.rb
@@ -37,9 +37,12 @@ class Communication::Website::DependencyTest < ActiveSupport::TestCase
 
     assert_equal 9, page.recursive_dependencies.count
 
-    # Vérifie qu'on a bien une tâche de nettoyage si le block est supprimé
+    # Vérifie qu'on a bien
+    # - une tâche pour resynchroniser la page
+    # - une tâche de nettoyage si le block est supprimé
     Delayed::Job.destroy_all
     block.destroy
+    assert(sync_with_git_job(page))
     assert(destroy_obsolete_git_files_job)
 
   end
@@ -85,15 +88,19 @@ class Communication::Website::DependencyTest < ActiveSupport::TestCase
 
   protected
 
-  def destroy_obsolete_git_files_job(website_id = website_with_github.id)
-    find_performable_method_job(:destroy_obsolete_git_files_without_delay, website_id)
+  def sync_with_git_job(object)
+    find_performable_method_job(:sync_with_git_without_delay, object)
+  end
+
+  def destroy_obsolete_git_files_job(website = website_with_github)
+    find_performable_method_job(:destroy_obsolete_git_files_without_delay, website)
   end
 
   # On ne peut pas utiliser assert_enqueued_jobs sur les méthodes asynchrones gérées avec handle_asynchronously
-  def find_performable_method_job(method, id)
+  def find_performable_method_job(method, object)
     Delayed::Job.all.detect { |job|
       job.payload_object.method_name == method &&
-        job.payload_object.object.id == id
+        job.payload_object.object == object
     }
   end
 end