diff --git a/amd/build/suivi.js b/amd/build/suivi.js
index be83d902df8cca594f6ca7289c24d4b9b52e6f43..0a2c975065a6085bc0fb997d1d707074fa986e88 100644
--- a/amd/build/suivi.js
+++ b/amd/build/suivi.js
@@ -58,6 +58,9 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
                 $('.dropdown-menu-form').on('click', function (e) {
                    e.stopPropagation();
                 });
+                $('#iena-button-search').on('click', function(e){
+                	searchStudent();
+                })
                
 	    		
 	    		
@@ -99,7 +102,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
 		                updateGroupsFilterLabel(); 
 		            	
 		            }
-		            //changeGroup();
+		
 		        });
 		    },
 		    initTable:function(){
@@ -127,6 +130,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
         			
         			localStorage.setItem("groups",request);
         		}
+        		console.log(request);
         		initActivityFilter(false);
 		    	updateActivitiesFilterLabel(false);
 		    	initGroupFilter(false);
@@ -208,6 +212,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
     	symbol=$("#symbol-select").val();
     	completion=$("#completion-select").val();
     	data.count_results=0;
+
     	for(var i=0; i<data.students.length; i++){
     		if(data.display_groups==1){
     			data.students[i].display_groups=true;
@@ -419,7 +424,55 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
     
 
 
+	function searchStudent(){
+		$(".iena-filters .custom-select").prop('disabled', true);
+		$(".iena-filters .iena-custom-dropdown > button").prop('disabled', true);
+
+		if($("#iena-close-tag").length == 0){
+			console.log("on a pas encore cherché");
+			old_data=$.extend(true,{},data);
+		}
+		else{
+			console.log("le tag existe : on a déjà cherché");
+		}
+ 		
+		var completeUrl=getCompleteUrl();
+    	var searchinput= $('input[name="iena-search-student"]').val();
+ 		$('#iena-search-tag').html(`<span role="option" data-value="`+searchinput+`" aria-selected="true" class="badge badge-secondary clickable text-wrap text-break line-height-4 m-1" id="form_autocomplete_selection-1739873966209-0" data-active-selection="true">
+        `+searchinput+`<i id="iena-close-tag" class="icon fa fa-times pl-2 mr-0"></i>
+    </span>`);
+ 		
+    	$('#iena-search-tag').on('click', 'i', function(e){
+    		
+    		deleteSearch(old_data);
+    	});
 
+    	$.ajax({ url: completeUrl,
+        	data: {action: 'search_student', search_input:searchinput},
+        	type: 'post',
+        	success: function(request) { 
+        		showHideActivities();
+        		data=calcPercentage(JSON.parse(request));
+        		showHideStudents();
+        		if(!request.error){
+
+        		}
+        		$('input[name="iena-search-student"]').val("");
+        		reloadTable(data);
+        		updateGroupsFilterLabel(false);
+			}
+		});
+	}
+
+	function deleteSearch(old_data){
+		$('#iena-search-tag').html("");
+		data=old_data;
+		$(".iena-filters .custom-select").prop('disabled', false);
+		$(".iena-filters .iena-custom-dropdown > button").prop('disabled', false);
+		showHideStudents();
+		reloadTable(data);
+        		
+	}
     
 
      
@@ -579,7 +632,7 @@ define(['jquery', 'core/ajax', 'core/templates', 'core/str'],
     function checkAllGroupsFilter(){
         $('.selectallgroups').prop('checked', true);
         $('.group-option').prop('checked', true);
-        //changeGroup();
+
         $(".select-text").html(' Deselect');
         
     }
diff --git a/lang/en/format_iena.php b/lang/en/format_iena.php
index ae2972cbc296d7b318d05c0ba695eb22e1dec87a..18d6200d0ad3a07787f91537564f13eb55a0e106 100644
--- a/lang/en/format_iena.php
+++ b/lang/en/format_iena.php
@@ -121,3 +121,6 @@ $string['messagesSent']="Messages sent";
 $string['messagesNotSent']="An error occured: the messages could not be sent";
 $string['enable_icon_click']="Enable clicks on student progress";
 $string['enable_icon_click_help']="By default, students can access directly their activies by clicking on their bubbles in their progress dashboard. You can disable these links so they can't have access to them out of context.";
+$string['searchplaceholder']="Name, student ID...";
+$string['searchstudent']="Search";
+$string['filterstudent']="Filters";
\ No newline at end of file
diff --git a/lang/fr/format_iena.php b/lang/fr/format_iena.php
index 5a846b6d3c13f89b92e4eaef91d20dc5780e10f1..13b77cab8294d49bb066b56a66ef2c5066eec5af 100644
--- a/lang/fr/format_iena.php
+++ b/lang/fr/format_iena.php
@@ -121,3 +121,6 @@ $string['messagesSent']="Message(s) envoyé(s)";
 $string['messagesNotSent']="Une erreur s'est produite : le()s message(s) n'ont pas été envoyé(s)";
 $string['enable_icon_click']="Activer les pastilles cliquables";
 $string['enable_icon_click_help']="Par défaut, les étudiants peuvent accéder directement aux activités en cliquant sur leur pastille dans leur interface de progression. Vous pouvez désactiver ces liens pour que les étudiants ne puissent pas accéder aux ressources en dehors d'un certain contexte.";
+$string['searchplaceholder']="Nom, numéro étudiant...";
+$string['searchstudent']="Rechercher un étudiant";
+$string['filterstudent']="Filtres";
diff --git a/styles.css b/styles.css
index 3e0aaf3491e07b22aa09b81137a0786dc75c369c..cbee038b4e35d02b7c275a5f96b03a22ea94e852 100644
--- a/styles.css
+++ b/styles.css
@@ -1250,4 +1250,13 @@ border-bottom: 1px solid #dee2e6;
 
 #drawermenu .iena-custom-button{
 	margin:0!important;
+}
+
+#iena-search-tag{
+	display: inline-block;
+	vertical-align: middle;
+}
+
+#iena-search-bar{
+	margin-top: 30px;
 }
\ No newline at end of file
diff --git a/suivi_unit.php b/suivi_unit.php
index f102f167ff8176e4c519e2d507ae69ae00764647..86d5a7a19d91322f3a7e367ef91eb8f44a22ca6c 100644
--- a/suivi_unit.php
+++ b/suivi_unit.php
@@ -89,11 +89,12 @@ function get_groups($context, $activegroupids, $groups) {
 
 // Formate l'achèvement d'activités pour le tableau de suivi. Pour chaque étudiant, on aura
 // dans le bon ordre la liste des modules et le completionstate.
-function format_progress($progress, $modules, $groups, $activegroupids, $activesectionid) {
+function format_progress($progress, $modules, $groups, $search=false, $activegroupids=0, $activesectionid=0) {
+
     global $CFG, $COURSE;
     $students = array();
-
     foreach ($progress as $proginfo) {
+
         $progressstudent = new StdClass();
         $progressstudent->firstname = $proginfo->firstname;
         $progressstudent->lastname = $proginfo->lastname;
@@ -103,10 +104,10 @@ function format_progress($progress, $modules, $groups, $activegroupids, $actives
         $progressstudent->report_link = $CFG->wwwroot . "/report/outline/user.php?id=" .
         $progressstudent->id . "&course=" . $COURSE->id . "&mode=outline";
         $progressstudent->message_link = $CFG->wwwroot . "/message/index.php?id=" . $progressstudent->id;
-
-        //if ($activegroupid == 0) {
-            $progressstudent->groups = "";
-            $progressstudent->groupsid=array();
+        $progressstudent->groups = "";
+        $progressstudent->groupsid=array();
+       
+        if (!$search) {
             foreach ($groups as $group) {
                 if (in_array($progressstudent->id, $group->members)) {
                     if(empty( $progressstudent->groups)){
@@ -118,8 +119,12 @@ function format_progress($progress, $modules, $groups, $activegroupids, $actives
                     array_push( $progressstudent->groupsid, $group->id);
                 }
             }
-        //}
-
+        }
+        else{
+            $progressstudent->groups= $proginfo->groups;
+            $progressstudent->groupsid= $proginfo->groupsid;
+        }
+        
         foreach ($modules as $key => $module) {
             $moduleprogress = new StdClass();
 
@@ -133,6 +138,7 @@ function format_progress($progress, $modules, $groups, $activegroupids, $actives
 
             $progressstudent->progress[$key] = $moduleprogress;
         }
+        //error_log(print_r($progressstudent, true));
         $students[] = $progressstudent;
         
     }
@@ -217,11 +223,10 @@ function set_filters($data, $filters, $symbols, $sections, $currentusergroups, $
 }
 
 //
-function set_data($data, $modules, $groups, $activegroupsids, $activesectionid, $listoptions) {
+function set_links($data, $modules,$listoptions) {
     global $COURSE, $USER, $CFG;
 
-    $data["modules"] = $modules;;
-    $countmodules = count($data["modules"]);
+    $countmodules = count($modules);
 
     //$data["students"] = format_progress($progress, $modules, $groups, $activegroupsids, $activesectionid);
     //$countstudents = count($data["students"]);
@@ -242,11 +247,7 @@ function set_data($data, $modules, $groups, $activegroupsids, $activesectionid,
     if($listoptions->listoptions['display_details']["value"]){
         $data["display_details"]=1;
     }
-  
-    // Pas que pour le téléchargement du tableau, partie à optimiser
-    if (!isset($data['data'])) {
-        $data['data'] = array();
-    }
+    
 
     //$data['data'] = json_encode($data);
     return $data;
@@ -284,7 +285,78 @@ function get_progress_students($modules, $progress, $groups, $activegroupsids, $
 
          $arrayprogress=(object) array_unique(array_merge((array) $arrayprogress, (array) $progress), SORT_REGULAR);
     }
-        return format_progress($arrayprogress, $modules, $groups, $activegroupsids, $activesectionid);
+        
+        return format_progress($arrayprogress, $modules, $groups, false, $activegroupsids, $activesectionid);
+}
+
+function get_progress_student($identifier, $completion, $modules){
+    global $DB;
+    global $COURSE;
+    $countmethod=0;
+    $users=array();
+    
+    //Essayer de faire des switch case avec counttries
+    $arrayparams=array();
+    $explodedname=explode(" ", $identifier);
+    $sql="SELECT DISTINCT u.id, u.firstname, u.lastname, u.email, u.idnumber
+            FROM {user} u
+            JOIN {user_enrolments} ue ON ue.userid = u.id
+            JOIN {enrol} e ON e.id = ue.enrolid
+            JOIN {role_assignments} ra ON ra.userid = u.id
+            JOIN {context} ct ON ct.id = ra.contextid AND ct.contextlevel = 50
+            JOIN {course} c ON c.id = ct.instanceid AND e.courseid = c.id
+            JOIN {role} r ON r.id = ra.roleid AND r.shortname = 'student'
+            WHERE e.status = 0 AND u.suspended = 0 AND u.deleted = 0 AND c.id= ?";
+    $arrayparams[]=$COURSE->id;
+    if(count($explodedname)>1){
+
+        
+        $sql.=" AND (u.lastname LIKE ? AND u.firstname LIKE '?') OR (u.lastname LIKE '?' AND u.firstname LIKE '?')";
+        
+        array_push($arrayparams, $identifier[0], $identifier[1], $identifier[1], $identifier[0]);
+    }
+    else{
+        $sql.=" AND u.lastname LIKE ? OR u.idnumber = ?";
+
+        array_push($arrayparams, "%".$identifier."%", $identifier);
+    }
+
+    $users=array_values($DB->get_records_sql($sql, $arrayparams));
+
+
+    if(count($users)>0){
+        $completion_student=array();
+        $where = array();
+        $where_params = array();
+       
+        //regarder get_in_or_equal
+        for($i=0; $i<count($users);$i++){
+       // foreach($users as $user){
+            
+            $where = $DB->sql_equal('u.id', ':idstudent', false, false);
+            $where_params['idstudent'] = $users[$i]->id.'%';
+            $completion_student=array_values($completion->get_progress_all($where, $where_params));
+            $usergroup=groups_get_all_groups($COURSE->id, $users[$i]->id);
+            $completion_student[0]->groups="";
+            $completion_student[0]->groupsid=array();
+            
+            foreach($usergroup as $group){
+
+                $completion_student[0]->groups.=$group->name;
+                $completion_student[0]->groupsid[]=$group->id;
+                
+            }
+            $arrayprogress=(object) array_unique(array_merge((array) $arrayprogress, (array) $completion_student), SORT_REGULAR);   
+        }
+        return format_progress($arrayprogress, $modules, false, true);
+
+    }
+    else{
+        //On a pas trouvé d'utilisateur
+        return array("error"=>"Pas d'utilisateurs trouvés");
+    }
+    
+
 }
 
 $filters = [
@@ -361,7 +433,6 @@ if (!has_capability('course/iena:suivi', $context = context_course::instance($co
     exit;
 }
 
-
 $countstudents=count_enrolled_users($context);
 
 //Si on a sélectionné des groupes dans les filtres
@@ -453,15 +524,27 @@ if (isset($_POST['action']) && $_POST['action'] == "details") {
   
     echo json_encode($data);
 } 
+else if(isset($_POST['action']) && $_POST['action'] == 'search_student' && isset($_POST['search_input'])){
+
+    $data=[];
+    $sanitized=filter_var($_POST['search_input'], FILTER_SANITIZE_STRING);
+    $modules = get_activities($completion, $activesectionid);
+    $data["modules"]=$modules;
+    $data["students"]=get_progress_student($sanitized, $completion, $modules);
+    $data = set_links($data, $modules, $listoptions);
+    echo json_encode($data);
+}
 // If a post is sent trought the page --> Si on change les filtres (de groupes), le template est appelé en JS
 else if (isset($_POST['action']) && !empty($_POST['action'])) {
-    error_log("je change le filtre des groupes");
+    error_log("on passe dans l'action ");
     $groups = groups_get_all_groups($COURSE->id, 0, 0, 'g.*', true);
     $data = [];
     $modules = get_activities($completion, $activesectionid);
     $data["students"]=get_progress_students($modules, $arrayprogress, $groups, $activegroupsids, $activesectionid, $courseid, $cache, $completion);
     $data["modules"]=$modules;
     $data["countstudents"]=count($data["students"]);
+    $data = set_links($data, $modules, $listoptions);
+
     echo json_encode($data);
 } 
 
@@ -481,6 +564,7 @@ else {
         $data["completion_enabled"]=1;
         $currentusergroups = [];
         $activegroupname = "";
+
         
 
         $modules = get_activities($completion, $activesectionid);
@@ -494,13 +578,12 @@ else {
         $sections = get_sections($activesectionid);
         //$data["countstudents"]=$countstudents;
         $data = set_filters($data, $filters, $symbols, $sections,  $groupsall->current_user_groups, $groupsall->othergroups, $activesectionid);
-        //$data = set_data($data, $modules, $groups, $activegroupsids, $activesectionid, $listoptions);
         
         if (isset($_GET["msg_success"])) {
             $msg = $_GET["msg_success"];
             $data["msg_success"] = $msg;
         }
-        
+
       
 }
  
diff --git a/templates/suivi.mustache b/templates/suivi.mustache
index 21c15f18f75612b3fee6ba36b4561c97a9d9da0d..36d82eb21de0e463cd94b36e20a6ac726ed6da3f 100644
--- a/templates/suivi.mustache
+++ b/templates/suivi.mustache
@@ -1,7 +1,7 @@
 {{#completion_enabled}}
 <div>
 
-	<h2 class="mb1" style="display: inline-block;">{{#str}}table_progress, format_iena{{/str}}</h2>
+	
 	<div class="context-header-settings-menu">
         <div class="action-menu moodle-actionmenu d-inline" id="action-menu-3" data-enhance="moodle-core-actionmenu">
 	        <div class="menubar d-flex " id="action-menu-3-menubar" role="menubar">
@@ -30,7 +30,10 @@
 	</div>
 </div>
 
+<h4 style="margin-top:30px;">{{# str }} filterstudent, format_iena {{/ str}}</h4>
 <form style="clear: right;" class="form-inline iena-filters" action="" method="GET">
+
+<br>
 	<input name="courseid" type="number" hidden="hidden" style="display: none;" value="">
 
 	<label class="sr-only" for="section-select">Section</label>
@@ -135,6 +138,21 @@
 		</select>
 	</div>
 </form>
+
+<div>
+
+	<div id="iena-search-bar">
+		<h4>{{# str }} searchstudent, format_iena {{/ str}}</h4>
+		<input type="text" name="iena-search-student" placeholder="{{# str }} searchplaceholder, format_iena {{/ str}}"></input>
+		
+		<button id="iena-button-search" class="btn btn-primary">Rechercher</button>
+		<div id="iena-search-tag">
+			<div class="form-autocomplete-selection d-inline-block my-0 form-autocomplete-multiple h5" role="listbox" aria-atomic="true" tabindex="0"></div>
+
+		</div>
+	</div>
+</div>
+
 {{#msg_success}}
 	<div class="alert alert-success iena-message">{{# str }} messagesSent, format_iena {{/ str}}</div>
 {{/msg_success}}