diff --git a/core/admin.py b/core/admin.py
index 6fdc096608eecce62d4f0fdc9e540f4d41b8a29d..65d11365a77c2a098fcee2cd2b16ce30fc7741ca 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -2,7 +2,6 @@
 
 from django.contrib import admin
 from .models import Document, Address
-
 # Register your models here.
 
 
diff --git a/profiles/admin.py b/profiles/admin.py
index 82207b0dd026276567ef92a1583a8bcd5b74d246..4f00aa12ef96c41e9b9b99522ef931d97c651dec 100644
--- a/profiles/admin.py
+++ b/profiles/admin.py
@@ -3,26 +3,47 @@
 from django.contrib import admin
 from .models import Student, Tutor
 
+import csv
+from django.http import HttpResponse
+class ExportCsvMixin:
+    def export_as_csv(self, request, queryset):
+
+        meta = self.model._meta
+        field_names = [field.name for field in meta.fields]
+
+        response = HttpResponse(content_type='text/csv')
+        response['Content-Disposition'] = 'attachment; filename={}.csv'.format(meta)
+        writer = csv.writer(response)
+
+        writer.writerow(field_names)
+        for obj in queryset:
+            row = writer.writerow([getattr(obj, field) for field in field_names])
+
+        return response
+
+    export_as_csv.short_description = "Export Selected"
+
 
 class ProfileAdminMixin:
     """Common functionalities for profile admin panels."""
 
     search_fields = ('user__email', 'user__first_name', 'user__last_name',)
-
+    actions = ["export_as_csv"]
 
 @admin.register(Tutor)
-class TutorAdmin(ProfileAdminMixin, admin.ModelAdmin):
+class TutorAdmin(ProfileAdminMixin, admin.ModelAdmin,ExportCsvMixin):
     """Tutor admin panel."""
 
     autocomplete_fields = ('address',)
 
     class Meta:  # noqa
         model = Tutor
-
+    actions = ["export_as_csv"]
 
 @admin.register(Student)
-class StudentAdmin(ProfileAdminMixin, admin.ModelAdmin):
+class StudentAdmin(ProfileAdminMixin, admin.ModelAdmin,ExportCsvMixin):
     """Student admin panel."""
 
     class Meta:  # noqa
         model = Student
+    actions = ["export_as_csv"]
\ No newline at end of file
diff --git a/projects/admin.py b/projects/admin.py
index 2cdb4266757018f0fb6555f001160b373f76d267..5a65a46fdfe9f65c4e90bd4f5293542db2ec39bb 100644
--- a/projects/admin.py
+++ b/projects/admin.py
@@ -80,17 +80,6 @@ class EditionFormAdmin(admin.ModelAdmin):
     list_display = ('form', 'deadline', 'recipient',)
     list_filter = ('edition', 'deadline',)
 
-    actions = ['download_csv']
-
-    def download_csv(self, request, queryset):
-        """Download entries of selected edition forms under a ZIP file."""
-        form_ids = queryset.values_list('form__id', flat=True)
-        forms = Form.objects.filter(id__in=form_ids)
-        return download_multiple_forms_entries(request, forms=forms)
-
-    download_csv.short_description = (
-        'Télécharger les résponses des formulaires sélectionnés')
-
 
 @admin.register(Participation)
 class ParticipationAdmin(admin.ModelAdmin):
diff --git a/users/admin.py b/users/admin.py
index 5131546c64907e3e684fb5d537becff1efd161f9..aa7448e1e334df64de7766d61e983677d798ee02 100644
--- a/users/admin.py
+++ b/users/admin.py
@@ -7,7 +7,8 @@ from django.utils.translation import ugettext_lazy as _
 from visits.admin import ParticipationInline
 
 from .models import User
-
+from django.http import HttpResponse
+import csv
 
 class UserParticipationInline(ParticipationInline):
     """Inline for Participation on the User admin panel.
@@ -55,5 +56,21 @@ class CustomUserAdmin(UserAdmin):
             'fields': ('email', 'password1', 'password2')}
          ),
     )
-
     inlines = (UserParticipationInline, )
+
+    actions = ["export_as_csv"]
+
+    def export_as_csv(self, request, queryset):
+        meta = self.model._meta
+        field_names = [field.name for field in meta.fields]
+
+        response = HttpResponse(content_type='text/csv')
+        response['Content-Disposition'] = 'attachment; filename={}.csv'.format(
+            meta)
+        writer = csv.writer(response)
+        writer.writerow(field_names)
+        for obj in queryset:
+            row = writer.writerow([getattr(obj, field)
+                                   for field in field_names])
+        return response
+    export_as_csv.short_description = "Exporter au format CSV"
diff --git a/visits/admin.py b/visits/admin.py
index 20c48dd0c15ef597419d64c2999a3ff92f2cb4cc..0f1462eef75d632764d3f9827506a47e43762a6a 100644
--- a/visits/admin.py
+++ b/visits/admin.py
@@ -5,7 +5,8 @@ from django.contrib import admin, messages
 from django.template.defaultfilters import pluralize
 from django.urls import reverse
 from django.utils.safestring import mark_safe
-
+from django.http import HttpResponse
+import csv
 from .models import Participation, Place, Visit
 
 # Register your models here.
@@ -125,6 +126,23 @@ class ParticipationAdmin(admin.ModelAdmin):
 
     user_link.short_description = 'Utilisateur'
 
+    actions = ["export_as_csv"]
+
+    def export_as_csv(self, request, queryset):
+        meta = self.model._meta
+        field_names = [field.name for field in meta.fields]
+
+        response = HttpResponse(content_type='text/csv')
+        response['Content-Disposition'] = 'attachment; filename={}.csv'.format(
+            meta)
+        writer = csv.writer(response)
+        writer.writerow(field_names)
+        for obj in queryset:
+            row = writer.writerow([getattr(obj, field)
+                                   for field in field_names])
+        return response
+    export_as_csv.short_description = "Exporter au format CSV"
+
 
 @admin.register(Visit.organizers.through)
 class VisitOrganizersAdmin(admin.ModelAdmin):