diff --git a/src/fr/monlouyan/bakefile/BakefileParser.java b/src/fr/monlouyan/bakefile/BakefileParser.java
index 3a1f92f..07b8d71 100644
--- a/src/fr/monlouyan/bakefile/BakefileParser.java
+++ b/src/fr/monlouyan/bakefile/BakefileParser.java
@@ -205,6 +205,7 @@ public class BakefileParser {
     public List<Rule> parse() {
         List<Rule> rules = new ArrayList<>();
         Set<String> phonyTargets = new HashSet<>();
+        List<String> allTargetNames = new ArrayList<>(); // Pour suivre l'ordre des cibles
     
         if (!Files.exists(Paths.get(filename))) {
             System.out.println("*** No targets specified and no bakefile found.  Stop.");
@@ -217,6 +218,18 @@ public class BakefileParser {
             List<String> dependencies = new ArrayList<>();
             List<String> commands = new ArrayList<>();
             
+            // Première passe : collecter toutes les cibles PHONY
+            for (String line : lines) {
+                if (line.trim().isEmpty()) continue;
+                
+                Matcher phonyMatcher = PHONY_PATTERN.matcher(line);
+                if (phonyMatcher.matches()) {
+                    String[] phonies = phonyMatcher.group(1).trim().split("\\s+");
+                    Collections.addAll(phonyTargets, phonies);
+                }
+            }
+            
+            // Deuxième passe : analyser les règles en tenant compte des PHONY
             for (int i = 0; i < lines.size(); i++) {
                 String line = lines.get(i);
                 
@@ -247,8 +260,7 @@ public class BakefileParser {
                 Matcher phonyMatcher = PHONY_PATTERN.matcher(line);
                 
                 if (phonyMatcher.matches()) {
-                    String[] phonies = phonyMatcher.group(1).trim().split("\\s+");
-                    Collections.addAll(phonyTargets, phonies);
+                    // Déjà traité dans la première passe
                     continue;
                 }
                 
@@ -271,9 +283,8 @@ public class BakefileParser {
                                 phonyTargets.contains(resolvedTarget)
                             ));
                             
-                            if (firstTarget == null && !phonyTargets.contains(resolvedTarget)) {
-                                firstTarget = resolvedTarget;
-                            }
+                            // Enregistrer le nom de la cible pour suivre l'ordre
+                            allTargetNames.add(resolvedTarget);
                         }
                     }
     
@@ -298,15 +309,32 @@ public class BakefileParser {
                         phonyTargets.contains(resolvedTarget)
                     ));
                     
-                    if (firstTarget == null && !phonyTargets.contains(resolvedTarget)) {
-                        firstTarget = resolvedTarget;
+                    // Enregistrer le nom de la cible pour suivre l'ordre
+                    allTargetNames.add(resolvedTarget);
+                }
+            }
+    
+            // Définir la première cible (similaire à Make)
+            // Make prend la première cible non-PHONY, ou la première cible si toutes sont PHONY
+            if (!allTargetNames.isEmpty()) {
+                // Chercher d'abord une cible non-PHONY dans l'ordre d'apparition
+                for (String targetName : allTargetNames) {
+                    if (!phonyTargets.contains(targetName)) {
+                        firstTarget = targetName;
+                        break;
                     }
                 }
+                
+                // Si toutes les cibles sont PHONY, prendre simplement la première
+                if (firstTarget == null) {
+                    firstTarget = allTargetNames.get(0);
+                }
             }
     
         } catch (IOException e) {
             e.printStackTrace();
         }
+        
         return rules;
     }
 
diff --git a/tests/test-31-redirection/README.md b/tests/test-31-redirection/README.md
new file mode 100644
index 0000000..7f6ae1d
--- /dev/null
+++ b/tests/test-31-redirection/README.md
@@ -0,0 +1,2 @@
+En gros, ici on vérifie si ça marche les redirections 
+jors j'envoie mon echo dans un fichier
\ No newline at end of file
diff --git a/tests/test-31-redirection/bake/Bakefile b/tests/test-31-redirection/bake/Bakefile
new file mode 100644
index 0000000..58e6e40
--- /dev/null
+++ b/tests/test-31-redirection/bake/Bakefile
@@ -0,0 +1,48 @@
+# Bakefile pour tester les redirections I/O
+
+.PHONY: all test-output test-append test-input test-multiple test-pipe test-cleanup
+
+all: test-output test-append test-input test-multiple test-pipe
+	@echo "Tous les tests de redirection I/O sont terminés"
+
+# Test de redirection de sortie standard (>)
+test-output:
+	@echo "Test de redirection de sortie >"
+	echo "Contenu écrit avec redirection >" > output.txt
+	@cat output.txt
+	@echo "-----------------------------"
+
+# Test de redirection avec ajout (>>)
+test-append:
+	@echo "Test de redirection avec ajout >>"
+	echo "Première ligne" > append.txt
+	echo "Deuxième ligne ajoutée" >> append.txt
+	@cat append.txt
+	@echo "-----------------------------"
+
+# Test de redirection d'entrée (<)
+test-input:
+	@echo "Test de redirection d'entrée <"
+	echo "Contenu à lire" > input.txt
+	cat < input.txt
+	@echo "-----------------------------"
+
+# Test de redirections multiples
+test-multiple:
+	@echo "Test de redirections multiples"
+	echo "Ligne 1" > multi.txt
+	echo "Ligne 2" >> multi.txt
+	cat < multi.txt > multi-output.txt
+	@cat multi-output.txt
+	@echo "-----------------------------"
+
+# Test de pipe |
+test-pipe:
+	@echo "Test de pipe |"
+	echo "LIGNE UN\nLIGNE DEUX\nLIGNE TROIS" | grep LIGNE | wc -l
+	@echo "-----------------------------"
+
+# Nettoyage des fichiers créés
+test-cleanup:
+	@echo "Nettoyage des fichiers de test"
+	rm -f output.txt append.txt input.txt multi.txt multi-output.txt
\ No newline at end of file
diff --git a/tests/test-31-redirection/make/Makefile b/tests/test-31-redirection/make/Makefile
new file mode 100644
index 0000000..58e6e40
--- /dev/null
+++ b/tests/test-31-redirection/make/Makefile
@@ -0,0 +1,48 @@
+# Bakefile pour tester les redirections I/O
+
+.PHONY: all test-output test-append test-input test-multiple test-pipe test-cleanup
+
+all: test-output test-append test-input test-multiple test-pipe
+	@echo "Tous les tests de redirection I/O sont terminés"
+
+# Test de redirection de sortie standard (>)
+test-output:
+	@echo "Test de redirection de sortie >"
+	echo "Contenu écrit avec redirection >" > output.txt
+	@cat output.txt
+	@echo "-----------------------------"
+
+# Test de redirection avec ajout (>>)
+test-append:
+	@echo "Test de redirection avec ajout >>"
+	echo "Première ligne" > append.txt
+	echo "Deuxième ligne ajoutée" >> append.txt
+	@cat append.txt
+	@echo "-----------------------------"
+
+# Test de redirection d'entrée (<)
+test-input:
+	@echo "Test de redirection d'entrée <"
+	echo "Contenu à lire" > input.txt
+	cat < input.txt
+	@echo "-----------------------------"
+
+# Test de redirections multiples
+test-multiple:
+	@echo "Test de redirections multiples"
+	echo "Ligne 1" > multi.txt
+	echo "Ligne 2" >> multi.txt
+	cat < multi.txt > multi-output.txt
+	@cat multi-output.txt
+	@echo "-----------------------------"
+
+# Test de pipe |
+test-pipe:
+	@echo "Test de pipe |"
+	echo "LIGNE UN\nLIGNE DEUX\nLIGNE TROIS" | grep LIGNE | wc -l
+	@echo "-----------------------------"
+
+# Nettoyage des fichiers créés
+test-cleanup:
+	@echo "Nettoyage des fichiers de test"
+	rm -f output.txt append.txt input.txt multi.txt multi-output.txt
\ No newline at end of file