diff --git a/projects/admin.py b/projects/admin.py
index 5a65a46fdfe9f65c4e90bd4f5293542db2ec39bb..e43c198933a4a26170dc30281e0b5bcfc49817f1 100644
--- a/projects/admin.py
+++ b/projects/admin.py
@@ -5,6 +5,8 @@ from django.contrib import admin
 from dynamicforms.views import download_multiple_forms_entries
 from dynamicforms.models import Form
 from .models import Edition, Participation, Project, EditionForm
+from django.contrib.admin import SimpleListFilter
+from profiles.models import Student
 
 
 @admin.register(Project)
@@ -37,7 +39,26 @@ class OrganizersInline(admin.TabularInline):
     extra = 0
 
 
-@admin.register(Edition)
+class SchoolFilter(admin.SimpleListFilter):
+    title = 'établissement'
+    parameter_name = 'profiles__school'
+
+    def lookups(self, request, model_admin):
+        list_of_school = []
+        query = Student.objects.values_list(
+            "school", flat=True).distinct()
+        for school in query:
+            list_of_school.append((school, school))
+        return list_of_school
+
+    def queryset(self, request, queryset):
+        if self.value():
+            emails = Student.objects.filter(
+                school=self.value()).values_list("user__email", flat=True)
+            return queryset.filter(user__email__in=emails)
+
+
+@ admin.register(Edition)
 class EditionAdmin(admin.ModelAdmin):
     """Admin panel for editions."""
 
@@ -73,7 +94,7 @@ class EditionAdmin(admin.ModelAdmin):
     num_cancelled.short_description = 'Annulés'
 
 
-@admin.register(EditionForm)
+@ admin.register(EditionForm)
 class EditionFormAdmin(admin.ModelAdmin):
     """Admin panel for edition forms."""
 
@@ -81,11 +102,12 @@ class EditionFormAdmin(admin.ModelAdmin):
     list_filter = ('edition', 'deadline',)
 
 
-@admin.register(Participation)
+@ admin.register(Participation)
 class ParticipationAdmin(admin.ModelAdmin):
     """Participation admin panel."""
 
     list_display = ('user', 'edition', 'submitted', 'state')
-    list_filter = ('edition', 'submitted', 'state',)
+    list_filter = (SchoolFilter,
+                   'edition', 'submitted', 'state',)
     readonly_fields = ('submitted',)
     search_fields = ('user__first_name', 'user__last_name', 'user__email',)
diff --git a/register/admin.py b/register/admin.py
index 8273b9e29e0f9b2aac75a2601e2104e3737ecd3b..175b18297bfcddffba5a0dc98e1c653682f54924 100644
--- a/register/admin.py
+++ b/register/admin.py
@@ -2,14 +2,35 @@
 
 from django.contrib import admin
 from .models import Registration
+from profiles.models import Student
 
 # Register your models here.
 
 
+class SchoolFilter(admin.SimpleListFilter):
+    title = 'établissement'
+    parameter_name = 'profiles__school'
+
+    def lookups(self, request, model_admin):
+        list_of_school = []
+        query = Student.objects.values_list(
+            "school", flat=True).distinct()
+        for school in query:
+            list_of_school.append((school, school))
+        return list_of_school
+
+    def queryset(self, request, queryset):
+        if self.value():
+            emails = Student.objects.filter(
+                school=self.value()).values_list("user__email", flat=True)
+            return queryset.filter(email__in=emails)
+
+
 @admin.register(Registration)
 class RegistrationAdmin(admin.ModelAdmin):
     """Admin panel for registrations."""
 
     list_display = ('last_name', 'first_name', 'submitted')
     readonly_fields = ('submitted',)
-    list_filter = ('submitted', 'validated')
+    list_filter = (SchoolFilter,
+                   'submitted', 'validated')
diff --git a/visits/admin.py b/visits/admin.py
index 0f1462eef75d632764d3f9827506a47e43762a6a..c6a76e957db4768009576fec21725ac74bad5a35 100644
--- a/visits/admin.py
+++ b/visits/admin.py
@@ -8,10 +8,30 @@ from django.utils.safestring import mark_safe
 from django.http import HttpResponse
 import csv
 from .models import Participation, Place, Visit
+from profiles.models import Student
 
 # Register your models here.
 
 
+class SchoolFilter(admin.SimpleListFilter):
+    title = 'établissement'
+    parameter_name = 'profiles__school'
+
+    def lookups(self, request, model_admin):
+        list_of_school = []
+        query = Student.objects.values_list(
+            "school", flat=True).distinct()
+        for school in query:
+            list_of_school.append((school, school))
+        return list_of_school
+
+    def queryset(self, request, queryset):
+        if self.value():
+            emails = Student.objects.filter(
+                school=self.value()).values_list("user__email", flat=True)
+            return queryset.filter(user__email__in=emails)
+
+
 class RegistrationsOpenFilter(admin.SimpleListFilter):
     """Custom filter to filter visits by their registration openness.
 
@@ -115,7 +135,7 @@ class ParticipationAdmin(admin.ModelAdmin):
     """Admin panel for visit participations."""
 
     list_display = ('submitted', 'visit', 'user_link', 'accepted', 'present')
-    list_filter = ('submitted', 'accepted', 'present')
+    list_filter = (SchoolFilter, 'submitted', 'accepted', 'present')
     actions = [accept_selected_participations, reject_selected_participations]
 
     def user_link(self, participation: Participation):