diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..f9eff7d8caa48695afec3a1f76904ad3a16c43f0
Binary files /dev/null and b/.DS_Store differ
diff --git a/projet_personnel/algorithme_gestion_etudiants.py b/projet_personnel/algorithme_gestion_etudiants.py
index ea3f6fd9a8e951628d2a95f255fed07334d826e9..49466a2d17fe403d8c4127aa11683542d4721f70 100644
--- a/projet_personnel/algorithme_gestion_etudiants.py
+++ b/projet_personnel/algorithme_gestion_etudiants.py
@@ -3,8 +3,24 @@ import pandas as pd
 import os
 import statistics
 import re
+from IPython.display import display
+from tabulate import tabulate
 
-file_path = '/content/Data_Base.xlsx'
+all_course_BAC1 = ("Anglais 1", "Fondements du droit public", "Fondements du droit de l'entreprise", "Economie", "Espagnol 1", "Comptabilité", "Informatique de gestion", "Mathématiques de gestion 1", "Statistiques et probabilités", "Pilosophie", "Psychologie", "Sociologie", "Séminaire de travail universitaire en gestion")
+
+all_course_BAC2 = ("Anglais 2", "Droit de l'entreprise", "Macroéconomie", "Microéconomie", "Espagnol 2", "Marketing", "Production", "Informatique et algorithmique", "Finance", "Inférences statistiques", "Mathématiques de gestion 2", "Technologies industrielles")
+
+all_course_BAC3 = ("Anglais 3", "Economie industrielle", "Espagnol 3", "Séminaire : organisations et transformation digitale", "Management humain", "Projet entrepreneurial", "Comptabilité et contrôle de gestion", "Gestion de données", "Coding project", "Econométrie", "Recherche opérationnelle", "Optimization", "Séminaire : organisation et mutations sociales", "Questions de sciences religieuses")
+
+all_course_MA1 = ("Advanced English 1", "Español avanzado 1", "Data analytics", "Projet quantitatif et gestion de projet", "Data Mining", "Nouvelles technologies et pratiques émergentes", "Web mining", "Machine learning", "Quantitative Decision Making", "Recommender Systems", "Pilotage stratégique de l'entreprise", "Séminaire on Current Managerial Issues")
+
+all_course_MA2 = ("Advanced English 2", "Español avanzado 1", "Responsabilité sociétale de l'entreprise","Integrated Information Systems", "Mémoire", "Séminaire d'accompagnement du mémoire")
+
+
+
+
+
+file_path = '/Users/adrien/vscodeworkspace/coding-project/Data_Base.xlsx'
 data = pd.read_excel(file_path)
 
 excel_file_path = 'export_names.xlsx'
@@ -27,25 +43,25 @@ def register_student(data):
     # Setting up the patterns to follow for entering information
 
     while True:
-        Name = input("What is the student's name? ")  # Ask the user for the name
-        if name_pattern.match(Name):  # Check if the name matches the specified format
-            print("The name is valid.")
+        Firstname = input("What is the student's firstname? ")  # Ask the user for the name
+        if name_pattern.match(Firstname):  # Check if the name matches the specified format
+            print(f"The firstname is valid : {Firstname}")
             break  # Exit the loop if the name is valid
         else:
-            print("The name is not valid. Make sure to follow the specified format.")
+            print("The firstname is not valid. Make sure to follow the specified format.")
 
     while True:
-        Surname = input("What is the student's surname? ")  # Ask the user for the surname
-        if name_pattern.match(Surname):
-            print("The surname is valid.")
+        Lastname = input("What is the student's lastname? ")  # Ask the user for the surname
+        if name_pattern.match(Lastname):
+            print(f"The lastname is valid : {Lastname}")
             break  # Exit the loop if the surname is valid
         else:
-            print("The surname is not valid. Make sure to follow the specified format.")
+            print("The lastname is not valid. Make sure to follow the specified format.")
 
     while True:
         Date_of_birth = input("Please enter a date in the format dd/mm/yyyy: ")
         if date_pattern.match(Date_of_birth):
-            print("The date is valid.")
+            print(f"The date is valid : {Date_of_birth}")
             break  # Exit the loop if the date is valid
         else:
             print("The date is not valid. Make sure to follow the format dd/mm/yyyy.")
@@ -53,7 +69,7 @@ def register_student(data):
     while True:
         Place_of_birth = input("What is the city of birth? ")
         if place_of_birth_pattern.match(Place_of_birth):
-            print("The city of birth is valid.")
+            print(f"The place of birth is valid : {Place_of_birth}")
             break  # Exit the loop if the city of birth is valid
         else:
             print("The city of birth is not valid. Make sure to use only letters and spaces.")
@@ -61,7 +77,7 @@ def register_student(data):
     while True:
         Address = input("Please enter an address in the format 'street number, city': ")
         if address_pattern.match(Address):
-            print("The address is valid.")
+            print(f"The address is valid : {Address}")
             break  # Exit the loop if the address is valid
         else:
             print("The address is not valid. Make sure to follow the format 'street number, city'.")
@@ -69,7 +85,7 @@ def register_student(data):
     while True:
         Telephone = input("What is the telephone number? (in the format 000/00.00.00) ")
         if telephone_pattern.match(Telephone):
-            print("The telephone number is valid.")
+            print(f"The telephone number is valid : {Telephone}")
             break  # Exit the loop if the telephone number is valid
         else:
             print("The telephone number is not valid. Make sure to follow the requested format.")
@@ -77,7 +93,7 @@ def register_student(data):
     while True:
         Email = input("Enter the university email (@student.uclouvain.be): ")
         if email_pattern.match(Email):
-            print("The email is valid.")
+            print(f"The email is valid : {Email}")
             break  # Exit the loop if the email is valid
         else:
             print("The email is not valid. Make sure to follow the requested format.")
@@ -85,7 +101,7 @@ def register_student(data):
     while True:
         Gender = input("What is your gender? (For Male enter M, for Female enter F, and for another type enter O): ")
         if gender_pattern.match(Gender):
-            print("The gender is valid.")
+            print(f"The gender is valid : {Gender}")
             break  # Exit the loop if the gender is valid
         else:
             print("The gender is not valid. Make sure to follow the requested format.")
@@ -93,7 +109,7 @@ def register_student(data):
     while True:
         Academic_year = input("What is your academic year? (BAC1/BAC2/BAC3/MA1/MA2): ")
         if academic_year_pattern.match(Academic_year):
-            print("The academic year is valid.")
+            print(f"The academic year is valid : {Academic_year}")
             break  # Exit the loop if the academic year is valid
         else:
             print("The academic year is not valid. Make sure to follow the requested format.")
@@ -143,15 +159,15 @@ def register_student(data):
         else:
             print("The campus choice is not valid. Make sure to follow the requested format.")
 
-    register(data, Name, Surname, Date_of_birth, Place_of_birth, Address, Telephone, Email, Gender, Academic_year, Courses_and_grade, Campus)
+    register(data, Firstname, Lastname, Date_of_birth, Place_of_birth, Address, Telephone, Email, Gender, Academic_year, Courses_and_grade, Campus)
 
 
-def register(data, name, surname, date_of_birth, place_of_birth, address, telephone, email, gender, academic_year, courses_and_grade, campus):
-    matricule = generate_matricule(name, surname, date_of_birth)
+def register(data, firstname, lastname, date_of_birth, place_of_birth, address, telephone, email, gender, academic_year, courses_and_grade, campus):
+    matricule = generate_matricule(firstname, lastname, date_of_birth)
 
     student = {
-        "Name": name,
-        "Surname": surname,
+        "Name": firstname,
+        "Surname": lastname,
         "Date of Birth": date_of_birth,
         "Place of Birth": place_of_birth,
         "Address": address,
@@ -173,10 +189,10 @@ def register(data, name, surname, date_of_birth, place_of_birth, address, teleph
 
     return
 
-def generate_matricule(name, surname, date_of_birth):
-    consonants_name = ''.join([c for c in name if c.lower() not in 'aeiouy'])[:3]
-    consonants_surname = ''.join([c for c in surname if c.lower() not in 'aeiouy'])[:2]
-    last_consonant_surname = ''.join([c for c in surname if c.lower() not in 'aeiouy']).lower()[-1]  # not sure if it's the consonant of the first name or the last name
+def generate_matricule(firstname, lastname, date_of_birth):
+    consonants_name = ''.join([c for c in firstname if c.lower() not in 'aeiouy'])[:3]
+    consonants_surname = ''.join([c for c in lastname if c.lower() not in 'aeiouy'])[:2]
+    last_consonant_surname = ''.join([c for c in lastname if c.lower() not in 'aeiouy']).lower()[-1]  # not sure if it's the consonant of the first name or the last name
     birth_year_last_two_digits = str(date_of_birth)[-2:]
     random_integer = random.randint(0, 10)
     matricule_e = f"{consonants_name}{consonants_surname}{last_consonant_surname}{birth_year_last_two_digits}{random_integer}"
@@ -184,7 +200,7 @@ def generate_matricule(name, surname, date_of_birth):
 
     return matricule_e
 
-
+# MODIFYING THE DATA OF A STUDENT
 def modify(data):
     while True:
         matricule_to_modify = input("Enter the matricule of the student you want to modify (or 'q' to quit): ")
@@ -192,146 +208,165 @@ def modify(data):
             print("Operation canceled.")
             break
 
-        student_index = data[data['Matricule'] == matricule_to_modify.lower()].index.tolist()
+        student_row = data[data['Matricule'] == matricule_to_modify.lower()]
 
-        if not student_index:
+        if student_row.empty:
             print("No student found with the specified matricule.")
             return
 
-        student_index = student_index[0]
-        print(f"\nModifying the student with matricule {matricule_to_modify}:\n")
-        print("1. Name")
-        print("2. Surname")
-        print("3. Date of Birth")
-        print("4. Place of Birth")
-        print("5. Address")
-        print("6. Telephone")
-        print("7. Email")
-        print("8. Sex (M | F | O)")
-        print("9. Academic Year")
-        print("10. Curriculum")
-        print("11. Courses already passed and their grade")
-        print("12. Campus")
-
-        field_to_modify = int(input("Enter the number of the field you want to modify: "))
-
-        field_name_to_modify = field_mapping.get(field_to_modify, None)
-        print(f"You are modifying the field: {field_name_to_modify}")
-
-        if field_to_modify == 1:  # If the field to modify is the name (Name)
-            while True:
-                name = input("What is the name you want to modify? ")
-                if name_pattern.match(name):
-                    print("The name is valid.")
-                    data.at[student_index, 'Name'] = name
-                    break  # Exit the loop if the name is valid
-                else:
-                    print("The name is not valid. Make sure to follow the specified format.")
-        elif field_to_modify == 2:
-            while True:  # Ask the user for the surname
-                surname = input("What is the surname? ")
-                if name_pattern.match(surname):
-                    print("The surname is valid.")
-                    data.at[student_index, 'Surname'] = surname
-                    break  # Exit the loop if the surname is valid
-                else:
-                    print("The surname is not valid. Make sure to follow the specified format.")
-        elif field_to_modify == 3:
-            while True:
-                date_of_birth = input("Please enter a date in the format dd/mm/yyyy: ")
-                if date_pattern.match(date_of_birth):
-                    print("The date is valid.")
-                    data.at[student_index, 'Date of Birth'] = date_of_birth
-                    break  # Exit the loop if the date is valid
-                else:
-                    print("The date is not valid. Make sure to follow the format dd/mm/yyyy.")
-        elif field_to_modify == 4:
-            while True:
-                place_of_birth = input("What is the city of birth? ")
-                if place_of_birth_pattern.match(place_of_birth):
-                    print("The city of birth is valid.")
-                    data.at[student_index, 'Place of Birth'] = place_of_birth
-                    break  # Exit the loop if the city of birth is valid
-                else:
-                    print("The city of birth is not valid. Make sure to use only letters and spaces.")
-        elif field_to_modify == 5:
-            while True:
-                address = input("Please enter an address in the format 'street number, city': ")
-                if address_pattern.match(address):
-                    print("The address is valid.")
-                    data.at[student_index, 'Address'] = address
-                    break  # Exit the loop if the address is valid
-                else:
-                    print("The address is not valid. Make sure to follow the format 'street number, city'.")
-        elif field_to_modify == 6:
-            while True:
-                telephone = input("What is the telephone number? (in the format 000/00.00.00) ")
-                if telephone_pattern.match(telephone):
-                    print("The telephone number is valid.")
-                    data.at[student_index, 'Telephone'] = telephone
-                    break  # Exit the loop if the telephone number is valid
-                else:
-                    print("The telephone number is not valid. Make sure to follow the requested format.")
-        elif field_to_modify == 7:
-            while True:
-                email = input("Enter the university email (@student.uclouvain.be): ")
-                if email_pattern.match(email):
-                    print("The email is valid.")
-                    data.at[student_index, 'Email'] = email
-                    break  # Exit the loop if the email is valid
-                else:
-                    print("The email is not valid. Make sure to follow the requested format.")
-        elif field_to_modify == 8:
-            while True:
-                gender = input("What is your gender? (For Male enter M, for Female enter F, and for other type enter O): ")
-                if gender_pattern.match(gender):
-                    print("The gender is valid.")
-                    data.at[student_index, 'Gender'] = gender
-                    break  # Exit the loop if the gender is valid
-                else:
-                    print("The gender is not valid. Make sure to follow the requested format.")
-        elif field_to_modify == 9:
-            while True:
-                academic_year = input("What is your academic year? (BAC1/BAC2/BAC3/MA1/MA2): ")
-                if academic_year_pattern.match(academic_year):
-                    print("The academic year is valid.")
-                    data.at[student_index, 'Academic Year'] = academic_year
-                    break  # Exit the loop if the academic year is valid
-                else:
-                    print("The academic year is not valid. Make sure to follow the requested format.")
-        elif field_to_modify == 11:  # Courses and grades
-            print("Courses already passed and their grade:\n")
-            for course, grade in data.iloc[student_index].items():
-                if course not in field_mapping.values():
-                    print(f"{course}: {grade}")
-
-            while True:
-                course_to_modify = input("Enter the course you want to modify: ")
-                if course_to_modify in data.columns:  # The course has been found, you can continue with the rest of your code
-                    print("The specified course has been found.")
-                    break  # Exit the loop since the course has been found
-                else:
-                    print("The specified course has not been found. Please select a new one.")
-
-            new_grade = input(f"Enter the new grade for {course_to_modify}: ")
-            while not new_grade.isdigit() or int(new_grade) not in range(0, 21):
-                print("The grade must be an integer between 0 and 20.")
+        print("\nDetails of the student before modification:")
+        print(student_row[['Matricule', 'Firstname', 'Lastname']])
+
+        confirmation = input("Do you really want to modify this student? (YES/NO) ").upper()
+        if confirmation == "YES":
+            student_index = student_row.index[0]
+
+            print(f"\nModifying the student with matricule {matricule_to_modify}:\n")
+            print("1. Firstname")
+            print("2. Lastname")
+            print("3. Date of Birth")
+            print("4. Place of Birth")
+            print("5. Address")
+            print("6. Telephone")
+            print("7. Email")
+            print("8. Sex (M | F | O)")
+            print("9. Academic Year")
+            print("10. Curriculum")
+            print("11. Courses already passed and their grade")
+            print("12. Campus")
+
+            field_to_modify = int(input("Enter the number of the field you want to modify: "))
+
+            field_name_to_modify = field_mapping.get(field_to_modify, None)
+            print(f"You are modifying the field: {field_name_to_modify}")
+
+            if field_to_modify == 1:  # If the field to modify is the name (Name)
+                while True:
+                    firstname = input("What is the name you want to modify? ")
+                    if name_pattern.match(firstname):
+                        print(f"The firstname is valid : {firstname}")
+                        if field_to_modify in (1, 2, 3):
+                            matricule = generate_matricule(firstname, data.at[student_index, 'Lastname'], data.at[student_index, 'Date of Birth'])
+                        data.at[student_index, 'Firstame'] = firstname
+                        break  # Exit the loop if the name is valid
+                    else:
+                        print("The name is not valid. Make sure to follow the specified format.")
+            elif field_to_modify == 2:
+                while True:  # Ask the user for the surname
+                    lastname = input("What is the surname? ")
+                    if name_pattern.match(lastname):
+                        print(f"The lastname is valid : {lastname}")
+                        if field_to_modify in (1, 2, 3):
+                            matricule = generate_matricule(data.at[student_index, 'Firstname'], lastname, data.at[student_index, 'Date of Birth'])
+                        data.at[student_index, 'Lastname'] = lastname
+                        break  # Exit the loop if the surname is valid
+                    else:
+                        print("The surname is not valid. Make sure to follow the specified format.")
+            elif field_to_modify == 3:
+                while True:
+                    date_of_birth = input("Please enter a date in the format dd/mm/yyyy: ")
+                    if date_pattern.match(date_of_birth):
+                        print(f"The date is valid : {date_of_birth}")
+                        if field_to_modify in (1, 2, 3):
+                            matricule = generate_matricule(data.at[student_index, 'Firstname'], data.at[student_index, 'Lastname'], date_of_birth)
+                        data.at[student_index, 'Date of Birth'] = date_of_birth
+                        break  # Exit the loop if the date is valid
+                    else:
+                        print("The date is not valid. Make sure to follow the format dd/mm/yyyy.")
+            elif field_to_modify == 4:
+                while True:
+                    place_of_birth = input("What is the city of birth? ")
+                    if place_of_birth_pattern.match(place_of_birth):
+                        print(f"The city of birth is valid : {place_of_birth}")
+                        data.at[student_index, 'Place of Birth'] = place_of_birth
+                        break  # Exit the loop if the city of birth is valid
+                    else:
+                        print("The city of birth is not valid. Make sure to use only letters and spaces.")
+            elif field_to_modify == 5:
+                while True:
+                    address = input("Please enter an address in the format 'street number, city': ")
+                    if address_pattern.match(address):
+                        print(f"The address is valid : {address}")
+                        data.at[student_index, 'Address'] = address
+                        break  # Exit the loop if the address is valid
+                    else:
+                        print("The address is not valid. Make sure to follow the format 'street number, city'.")
+            elif field_to_modify == 6:
+                while True:
+                    telephone = input("What is the telephone number? (in the format 000/00.00.00) ")
+                    if telephone_pattern.match(telephone):
+                        print(f"The telephone number is valid : {telephone}")
+                        data.at[student_index, 'Telephone'] = telephone
+                        break  # Exit the loop if the telephone number is valid
+                    else:
+                        print("The telephone number is not valid. Make sure to follow the requested format.")
+            elif field_to_modify == 7:
+                while True:
+                    email = input("Enter the university email (@student.uclouvain.be): ")
+                    if email_pattern.match(email):
+                        print(f"The email is valid : {email}")
+                        data.at[student_index, 'Email'] = email
+                        break  # Exit the loop if the email is valid
+                    else:
+                        print("The email is not valid. Make sure to follow the requested format.")
+            elif field_to_modify == 8:
+                while True:
+                    gender = input("What is your gender? (For Male enter M, for Female enter F, and for other type enter O): ")
+                    if gender_pattern.match(gender):
+                        print(f"The gender is valid : {gender}")
+                        data.at[student_index, 'Gender'] = gender
+                        break  # Exit the loop if the gender is valid
+                    else:
+                        print("The gender is not valid. Make sure to follow the requested format.")
+            elif field_to_modify == 9:
+                while True:
+                    academic_year = input("What is your academic year? (BAC1/BAC2/BAC3/MA1/MA2): ")
+                    if academic_year_pattern.match(academic_year):
+                        print(f"The academic year is valid : {academic_year}")
+                        data.at[student_index, 'Academic Year'] = academic_year
+                        break  # Exit the loop if the academic year is valid
+                    else:
+                        print("The academic year is not valid. Make sure to follow the requested format.")
+            elif field_to_modify == 11:  # Courses and grades
+                print("Courses already passed and their grade:\n")
+                for course, grade in data.iloc[student_index].items():
+                    if course not in field_mapping.values():
+                        print(f"{course}: {grade}")
+
+                while True:
+                    course_to_modify = input("Enter the course you want to modify: ")
+                    if course_to_modify in data.columns:  # The course has been found, you can continue with the rest of your code
+                        print("The specified course has been found.")
+                        break  # Exit the loop since the course has been found
+                    else:
+                        print("The specified course has not been found. Please select a new one.")
+
                 new_grade = input(f"Enter the new grade for {course_to_modify}: ")
+                while not new_grade.isdigit() or int(new_grade) not in range(0, 21):
+                    print("The grade must be an integer between 0 and 20.")
+                    new_grade = input(f"Enter the new grade for {course_to_modify}: ")
+
+                # Update the grade
+                data.at[student_index, course_to_modify] = int(new_grade)
+            elif field_to_modify == 12:
+                while True:
+                    campus = input("Enter 'Louvain-la-Neuve' or 'Mons' depending on the campus: ")
+                    if campus_pattern.match(campus):
+                        print(f"The campus choice is valid : {campus}")
+                        data.at[student_index, 'Campus'] = campus
+                        break  # Exit the loop if the campus choice is valid
+                    else:
+                      print("The campus choice is not valid. Make sure to follow the requested format.")
 
-            # Update the grade
-            data.at[student_index, course_to_modify] = int(new_grade)
-        elif field_to_modify == 12:
-            while True:
-                campus = input("Enter 'Louvain-la-Neuve' or 'Mons' depending on the campus: ")
-                if campus_pattern.match(campus):
-                    print("The campus choice is valid.")
-                    data.at[student_index, 'Campus'] = campus
-                    break  # Exit the loop if the campus choice is valid
-                else:
-                    print("The campus choice is not valid. Make sure to follow the requested format.")
         else:
-            new_value = input(f"Enter the new value for the selected field: ")
-            data.at[student_index, field_mapping[field_to_modify]] = new_value
+            print("Modification canceled.")
+            break  # Exit the loop if modification is canceled
+
+        data.at[student_index, 'Matricule'] = matricule # Update the Matricule column with the new matricule
+        
+        print("be careful because of a modification the registration number has changed :")
+
+        print(f"the new matricule is : {matricule}")
 
         # Save the modified data to the Excel file
         data.to_excel(file_path, index=False)
@@ -353,6 +388,7 @@ field_mapping = {
 }
 
 
+# DELETION OF A STUDENT BASED ON HIS MATRICULE BECAUSE IT'S UNIQUE 
 def delete(data):
     matricule_to_delete = input("Enter the matricule of the student you want to delete: ")
     student_index = data[data['Matricule'] == matricule_to_delete.lower()].index.tolist()
@@ -380,104 +416,96 @@ def delete(data):
         print("Deletion canceled.")
 
 
+
 # FIND
 def find_student(data):
-    search_criteria = input("Enter the search criteria (Name/Surname/Matricule): ").capitalize()
 
-    if search_criteria == "Name":
-        name_search = input("Enter the name of the student: ")
-        results = data[data['Name'].str.contains(name_search, case=False, na=False)]
-    elif search_criteria == "Surname":
-        surname_search = input("Enter the surname of the student: ")
-        results = data[data['Surname'].str.contains(surname_search, case=False, na=False)]
-    elif search_criteria == "Matricule":
-        matricule_search = input("Enter the matricule of the student: ")
-        results = data[data['Matricule'].str.contains(matricule_search, case=False, na=False)]
+    print("Below the search criteria : ")
+    print("1. By his/her lastname")
+    print("2. By his/her firstname")
+    print("3. By his/her matricule")
+
+    search_criteria = input("Enter the number of what you want to do: ")
+
+    if  search_criteria == "1":
+          surname_search = input("Enter the lastname of the student: ")
+          results = data[data['Lastname'].str.contains(surname_search, case=False, na=False)]
+    elif search_criteria == "2":
+          name_search = input("Enter the firstname of the student: ")
+          results = data[data['Firstname'].str.contains(name_search, case=False, na=False)]
+    elif search_criteria == "3":
+          matricule_search = input("Enter the matricule of the student: ")
+          results = data[data['Matricule'].str.contains(matricule_search, case=False, na=False)]
     else:
-        print("Invalid search criteria.")
-        return
+          print("Invalid search criteria.")
+          return
 
     if results.empty:
         print("No student found with the specified criteria.")
     else:
         print("Student(s) found:")
         for index, row in results.iterrows():
-            print(f"Name: {row['Name']}, Surname: {row['Surname']}, Matricule: {row['Matricule']}")
+            print(f"Firstname: {row['Firstname']}, Lastname: {row['Lastname']}, Matricule: {row['Matricule']}")
+
 
 # SHOW
 def filter_students(data):
     if data.empty:
         print("The list of students is empty.")
     else:
-        print("\nList of students:")
+        table_data = []
         for index, row in data.iterrows():
-            print(f"Name: {row['Name']}, Surname: {row['Surname']}, Matricule: {row['Matricule']}")
+            table_data.append([row['Firstname'], row['Lastname'], row['Matricule']])
 
+        headers = ["Firstname", "Lastname", "Matricule"]
+        print(tabulate(table_data, headers=headers, tablefmt="pretty"))
+    
+    export_choice = input("Do you want to export the list to an Excel file? (yes/no): ").lower()
+    if export_choice == "yes":
+        export_to_excel(data)
+    read_choice = input("Do you want to read the exported list from an Excel file? (yes/no): ").lower()
+    if read_choice == "yes":
+        read_exported_list()
 
 
-# Using the function export_filtered_student_list_to_excel
-# export_filtered_student_list_to_excel(data, 'filtered_student_list.xlsx')
+def export_to_excel(data):
+    excel_filename = input("Enter the name of the Excel file (without extension): ")
+    excel_filename += ".xlsx"
 
-"""
-print('To filter students, enter SCREEN')
-print('To export the list to an Excel document, enter EXPORT')
-print('To read the list, enter READ')
-choice = input("")
-if choice == "SCREEN":
-    filter_students(data)
-elif choice == "EXPORT":
-    export(data)
-elif choice == "READ":
-    read(data)
-"""
-
-def filter_students(data):
-    show_list = input("Do you want to see the list of students? YES/NO")
-    if show_list == "YES":
-        for index, row in data.iterrows():
-            print(f"Name: {row['Name']}, Surname: {row['Surname']}, Matricule: {row['Matricule']}")
-
-        export_choice = input("Do you want to export the list? YES/NO")
-
-        if export_choice == "YES":
-            try:
-                data.to_excel(excel_file_path, index=False)
-                print(f"The list of students has been successfully exported to {excel_file_path}.")
-            except Exception as e:
-                print(f"Error exporting to Excel: {e}")
-
-            read_choice = input("Do you want to read the exported list? YES/NO")
-
-            if read_choice == "YES":
-                try:
-                    os.system(f"start excel {excel_file_path}")
-                except Exception as e:
-                    print(f"Error opening the Excel file: {e}")
-                    return open_excel(excel_file_path)
+    try:
+        data.to_excel(excel_filename, index=False)
+        print(f"List successfully exported to {excel_filename}.")
+    except Exception as e:
+        print(f"An error occurred during export: {e}")
 
-        return
-    return
+def read_exported_list():
+    excel_filename = input("Enter the name of the Excel file to read (include .xlsx extension): ")
 
-def open_excel(excel_file_path):
     try:
-        os.system(f"start excel {excel_file_path}")
+        exported_data = pd.read_excel(excel_filename)
+        print("\nExported List:")
+        print(exported_data)
+        print("\nExported list successfully read from Excel.")
+    except FileNotFoundError:
+        print(f"File not found: {excel_filename}")
     except Exception as e:
-        print(f"Error opening the Excel file: {e}")
+        print(f"An error occurred during reading: {e}")
+
 
-# SORTING
 
+# SORTING
 def sort(data):
-    print('1. Sort in ascending alphabetical order')
-    print('2. Sort in descending alphabetical order')
-    print('3. Sort by date of birth')
-    print('4. Sort by age')
-    print('5. Sort by matricule')
-    print('6. Sort by academic year')
-    print('7. Get all people who passed a course')
-    print('8. Get all people who failed a course')
-    print('9. Get all Bachelor students')
+    print('1.  Sort in ascending alphabetical order')
+    print('2.  Sort in descending alphabetical order')
+    print('3.  Sort by date of birth')
+    print('4.  Sort by age')
+    print('5.  Sort by matricule')
+    print('6.  Sort by academic year')
+    print('7.  Get all people who passed a course')
+    print('8.  Get all people who failed a course')
+    print('9.  Get all Bachelor students')
     print('10. Get all Master students')
-    sorting_choice = input("")
+    sorting_choice = input("Enter the number of what you want to do: ")
     if sorting_choice == "1":
         sort_ascending(data)
     elif sorting_choice == "2":
@@ -501,24 +529,107 @@ def sort(data):
     return
 
 def sort_ascending(data):
-    if 'Name' not in data.columns:
-        print("The 'Name' column does not exist in the DataFrame.")
-        return
+    sorted_data = data.sort_values(by='Firstname', ascending=True)
+    see_the_data(sorted_data, columns_to_show=['Firstname', 'Lastname', 'Matricule'])
+    export_option(sorted_data)
+
+def sort_descending(data):
+    sorted_data = data.sort_values(by='Firstname', ascending=False)
+    see_the_data(sorted_data, columns_to_show=['Firstname', 'Lastname', 'Matricule'])
+    export_option(sorted_data)
+
+def sort_by_date(data):
+    sorted_data = data.sort_values(by='Date of Birth')
+    see_the_data(sorted_data, columns_to_show=['Firstname', 'Lastname', 'Date of Birth'])
+    export_option(sorted_data)
+
+def sort_by_age(data):
+    data['Age'] = (pd.to_datetime('today') - pd.to_datetime(data['Date of Birth'])).astype('<m8[Y]')
+    sorted_data = data.sort_values(by='Age', ascending=True)
+    see_the_data(sorted_data, columns_to_show=['Firstname', 'Lastname', 'Age'])
+    export_option(sorted_data)
+
+
+
+
+def sort_by_matricule(data):
+    sorted_data = data.sort_values(by='Matricule', ascending=True)
+    see_the_data(sorted_data, columns_to_show=['Firstname', 'Lastname', 'Matricule'])
+    export_option(sorted_data)
+
+def sort_by_academic_year(data):
+    sorted_data = data.sort_values(by='AcademicYear', ascending=True)
+    see_the_data(sorted_data, columns_to_show=['Firstname', 'Lastname', 'AcademicYear'])
+    export_option(sorted_data)
+
+
+
+
+# attention il faut pouvoir matcher ceci avec les résultats obtenus
+def sort_passed(data):
+    passed_data = data[data['PassedCourse'] == True]
+    see_the_data(passed_data, columns_to_show=['Firstname', 'Lastname', 'PassedCourse'])
+    export_option(passed_data)
+
+def sort_failed(data):
+    failed_data = data[data['PassedCourse'] == False]
+    see_the_data(failed_data, columns_to_show=['Firstname', 'Lastname', 'PassedCourse'])
+    export_option(failed_data)
+
+
+
+
+
+def sort_bachelor(data):
+    bachelor_data = data[data['Academic Year'] == 'BAC1' or 'BAC2' or 'BAC3']
+    see_the_data(bachelor_data, columns_to_show=['Firstname', 'Lastname', 'Academic Year'])
+    export_option(bachelor_data)
+
+def sort_master(data):
+    master_data = data[data['Academic Year'] == 'MA1' or 'MA2']
+    see_the_data(master_data, columns_to_show=['Firstname', 'Lastname', 'Academic Year'])
+    export_option(master_data)
+
+# export the data into an excel
+def export_option(data):
+    export = input("Do you want to export in a file? (YES/NO) ").upper()
+    if export == "YES":
+        filename = input("Enter the filename: ")
+        filename = filename + '.xlsx'
+        export_data_to_excel(data, filename)
+
+def export_data_to_excel(data, filename):
+    data.to_excel(filename, index=False)
+    print(f"\nData exported to {filename}")
+
+# see the data needed
+def see_the_data(data, columns_to_show=None):
+    if columns_to_show is None:
+        columns_to_show = data.columns
+
+    data_to_show = data[columns_to_show]
+    table = tabulate(data_to_show, headers='keys', tablefmt='grid')
+    print(table)
 
-    # Sort the DataFrame by the 'Name' column
-    sorted_data = data.sort_values(by='Name', ascending=True)
 
-    # Display the sorted list
-    print("\nList of students sorted in alphabetical order (ascending):")
-    for index, row in sorted_data.iterrows():
-        print(f"Name: {row['Name']}, Surname: {row['Surname']}, Matricule: {row['Matricule']}")
 
 # Example usage
 # Replace 'data' with the name of your DataFrame
 
+
+
+
+
+
+
+
+
+
+
+
 # STATS
 
-def statistics(data):
+def statistics_analysis(data):
     print('1. Get basic statistics')
     print('2. Get all student grades')
     print('3. Get all grades for a course')
@@ -649,7 +760,7 @@ def export_stats(data):
 # Action
 
 def action():
-    print("What do you want to do?\n Below, you will find what is possible followed by the commands to type.\n")
+    print("What do you want to do?\nBelow, you will find what is possible followed by the commands to type.\n")
     print("1. Register a student")
     print("2. Modify one or more fields")
     print("3. Delete a student")
@@ -678,11 +789,11 @@ def action():
     elif command == "4":
         find_student(data)
     elif command == "5":
-        show(data)
+        filter_students(data)
     elif command == "6":
         sort(data)
     elif command == "7":
-        statistics(data)
+        statistics_analysis(data)
     elif command == "8":
         return False
 
diff --git a/projet_personnel/algorithme_student_generate.py b/projet_personnel/algorithme_student_generate.py
index 098b34b3d221799d902d4f4db2c017c7160fafe7..b37fb2c5cfdf28ee0d0cba8ee88ee18d4cdcaa04 100644
--- a/projet_personnel/algorithme_student_generate.py
+++ b/projet_personnel/algorithme_student_generate.py
@@ -184,7 +184,7 @@ for each in range(number_of_students): # générer des données
             grades[courses] = random.randint(0, 20)
 
 
-    data_generated.append({"Name": last_name, "Surname": first_name, "Academic Year" : academic_year, "Place of Birth" : city_of_birth , "Telephone": phone, "Address": adress_of_student, "Genre" : gender_of_student, "Email" : email_formated, "Campus" : campus, "Date of Birth" : complete_date_of_birth, "Matricule" : matricule, **grades})
+    data_generated.append({"Firstname": last_name, "Lastname": first_name, "Academic Year" : academic_year, "Place of Birth" : city_of_birth , "Telephone": phone, "Address": adress_of_student, "Genre" : gender_of_student, "Email" : email_formated, "Campus" : campus, "Date of Birth" : complete_date_of_birth, "Matricule" : matricule, **grades})
 
 # génération de données qui ne peuvent pas se ressembler