diff --git a/apps/member/forms.py b/apps/member/forms.py
index 59d3fec2c78a4a18d54a56ead1481fed077d59fe..5517f1ff5da5565278726e7a65c38598a162a69c 100644
--- a/apps/member/forms.py
+++ b/apps/member/forms.py
@@ -1,7 +1,7 @@
 # -*- mode: python; coding: utf-8 -*-
 # Copyright (C) 2018-2019 by BDE ENS Paris-Saclay
 # SPDX-License-Identifier: GPL-3.0-or-later
-
+from dal import autocomplete
 from django.contrib.auth.forms import UserChangeForm, UserCreationForm
 from django.contrib.auth.models import User
 from django import forms
@@ -44,6 +44,14 @@ class MembershipForm(forms.ModelForm):
     class Meta:
         model = Membership
         fields = ('user','roles','date_start')
+        widgets = {
+            'user': autocomplete.ModelSelect2(url='member:user_autocomplete',
+                                                     attrs={
+                                                         'data-placeholder': 'Nom ...',
+                                                         'data-minimum-input-length': 1,
+                                                     }),
+        }
+
 
 MemberFormSet = forms.modelformset_factory(Membership,
                                            form=MembershipForm,
diff --git a/apps/member/urls.py b/apps/member/urls.py
index 9bcc10959180f9da8eb5757f8ebbfd5e888ec38a..d57541c22734398a3de8f79dd27ae014d6d98ba3 100644
--- a/apps/member/urls.py
+++ b/apps/member/urls.py
@@ -18,4 +18,5 @@ urlpatterns = [
     path('user/',views.UserListView.as_view(),name="user_list"),
     path('user/<int:pk>',views.UserDetailView.as_view(),name="user_detail"),
     path('user/<int:pk>/update',views.UserUpdateView.as_view(),name="user_update_profile"),
+    path('user/user-autocomplete',views.UserAutocomplete.as_view(),name="user_autocomplete"),
 ]
diff --git a/apps/member/views.py b/apps/member/views.py
index 90ea5ec351311902db2243a5771809cea1973e6f..608e3deeb582882b06bb47eb5b86015d6abeb129 100644
--- a/apps/member/views.py
+++ b/apps/member/views.py
@@ -2,7 +2,7 @@
 
 # Copyright (C) 2018-2019 by BDE ENS Paris-Saclay
 # SPDX-License-Identifier: GPL-3.0-or-later
-
+from dal import autocomplete
 from django.contrib.auth.mixins import LoginRequiredMixin
 from django.utils.translation import gettext_lazy as _
 from django.views.generic import CreateView, ListView, DetailView, UpdateView
@@ -115,6 +115,18 @@ class UserListView(LoginRequiredMixin,SingleTableView):
         return context
 
 
+class UserAutocomplete(autocomplete.Select2QuerySetView):
+    """
+    Auto complete note by aliases
+    """
+    def get_queryset(self):
+        qs = User.objects.all()
+
+        if self.q:
+            qs = qs.filter(username__regex=self.q)
+
+        return qs
+
 ###################################
 ############## CLUB ###############
 ###################################
diff --git a/apps/note/forms.py b/apps/note/forms.py
index 2e814be638282c963dd8995e8a2a090c5b93d18b..34d00487acfd831b648690daedc7015d2aca5b3a 100644
--- a/apps/note/forms.py
+++ b/apps/note/forms.py
@@ -24,6 +24,11 @@ class TransactionForm(forms.ModelForm):
         fields = ('destination', 'reason', 'amount',)
 
         widgets = {
+            'source': autocomplete.ModelSelect2(url='note:note_autocomplete',
+                                                     attrs={
+                                                         'data-placeholder': 'Note ...',
+                                                         'data-minimum-input-length': 1,
+                                                     }),
             'destination': autocomplete.ModelSelect2(url='note:note_autocomplete',
                                                      attrs={
                                                          'data-placeholder': 'Note ...',