diff --git a/src/cmisport/Application.java b/src/cmisport/Application.java
index fb463e8f6c7b65667d4f8420d014be1b6f126bc9..56b0d0e4be0ccf5b3e02c17bf84e930679e50158 100644
--- a/src/cmisport/Application.java
+++ b/src/cmisport/Application.java
@@ -13,5 +13,6 @@ public class Application{
     Test.testerGaussGenerator();
     Test.testerAthlete();
     Test.testerEquipe();
+    Test.testerMarche();
     }
 }
diff --git a/src/cmisport/Club.java b/src/cmisport/Club.java
index d253ab8c1c902bbc09426a8e12e4940f90a7677c..b6404202930149c4c025962a475205d887ad5ee6 100644
--- a/src/cmisport/Club.java
+++ b/src/cmisport/Club.java
@@ -43,7 +43,8 @@ public class Club{
     private ArrayList<Humain> membres;
 
     /** 
-     * Constructeur qui génére un club, la répartition des types d'humains ({@link Athlete}, {@link Coach} et {@link PersonelSante}) puis les humains individuelement.
+     * Constructeur qui génére un club, la répartition des types d'humains ({@link Athlete}, {@link Coach} et {@link PersonelSante}) puis les humains individuelement. 
+     * Le club aura au moins deux tiers d'athlètes parmi ses membres.
      * @param nom Le nom du club
      * @param solde La solde initiale du club
      * @param nbPoints Le nombre total de points qui sera répartit entre les différents humains.
@@ -54,30 +55,12 @@ public class Club{
       this.membres = new ArrayList<>();
       this.nom = nom;
       this.solde = solde;
-      ArrayList<Number> nbTypesHumains = new ArrayList<>();
       //S'assure que les ahtlètes représentent au moins 2 tiers des humains.
       //TODO (Peu important) Refactor ce test de proportion là il coute très cher mdrr
       do {
-        nbTypesHumains = Util.genererGaussDistribution(3, 0.3, nbHumains, 0, nbHumains); //Distribue le nbHumains dans 3 élements du tableau de manière aléatoire. Le premier élément du tableu est le nombre d'athlete, le second le nombre de coach et le troisieme le nombre de PersonelSante. 
-      } while (nbTypesHumains.getFirst().intValue() < nbHumains * 0.66);
+        this.membres = Util.genererListeAleatoireHumain(nbHumains, nbPoints, 0.3, 0.3);
+      } while ((this.membres.stream().filter(humain -> humain.getTypeHumain() == "ATHLETE").count()) < nbHumains * 0.66);
 
-      ArrayList<Number> nbPointsHumains = Util.genererGaussDistribution(nbHumains, 0.3, nbPoints, 1, Humain.VALEUR_MAX_CARACTERISTIQUE); //Distribue le nbPoints total de tous les humains de manière aléatoire entre tous les humains.
-
-      //Ajoute à la liste des membres les types d'humains en fonction de la répartition des nbTypesHumains et attribue à chaque humain les points qui lui ont été distribué dans nbPointsHumains.
-      int indexHumain = 0;
-      //TODO (Peu important) Surement moyen de faire une seule boucle générique.
-      for (int i = 0; i < nbTypesHumains.get(0).intValue(); i++) {
-        this.membres.add(new Athlete(nbPointsHumains.get(indexHumain).intValue(), 0.3));
-        indexHumain++;
-      }
-      for (int i = 0; i < nbTypesHumains.get(1).intValue(); i++) {
-        this.membres.add(new Coach(nbPointsHumains.get(indexHumain).intValue(), 0.5));
-        indexHumain++;
-      }
-      for (int i = 0; i < nbTypesHumains.get(2).intValue(); i++) {
-        this.membres.add(new PersonelSante(nbPointsHumains.get(indexHumain).intValue(), 0.5));
-        indexHumain++;
-      }
       this.reputation = new Reputation(0);
     }
 
@@ -99,7 +82,7 @@ public class Club{
      * @param p Le produit à acheter.
      */
     public void acheter(Produit p) throws SoldeInsuffisant {
-      if (this.solde < p.getPrix()) throw new SoldeInsuffisant("Le club ne possède pas assez de solde", p.getPrix() - this.solde);
+      if (this.solde < p.getPrix().doubleValue()) throw new SoldeInsuffisant("Le club ne possède pas assez de solde", p.getPrix().intValue() - this.solde);
       else{
         if (p instanceof Humain){
           this.membres.add((Humain) this.marche.enleveProduit(p));
@@ -108,7 +91,7 @@ public class Club{
           this.setLocal((Local) this.marche.enleveProduit(p));
           this.local.setClub(this);
         }
-        this.setSolde(-p.prix);
+        this.setSolde(-p.prix.intValue());
       }
     }
     /**
diff --git a/src/cmisport/Equipe.java b/src/cmisport/Equipe.java
index 3ca2a9ae6541d8d6eba3751994bc017d28aa0d23..90ca9f4b70b4de47728bd1d104ecdd7327310b8e 100644
--- a/src/cmisport/Equipe.java
+++ b/src/cmisport/Equipe.java
@@ -103,7 +103,7 @@ public class Equipe {
       StringBuilder sb = new StringBuilder();
       sb.append("Club : ").append(club.getNom()).append("\n");
       sb.append("Tableau des athlètes et de leurs caractéristiques : \n");
-      sb.append(Util.tabValCaraAthleteToString(this.athletes, false));
+      sb.append(Util.tabValCaraAthleteToString(this.athletes, false, false));
       return sb.toString();
     }
 }
diff --git a/src/cmisport/Humains/Humain.java b/src/cmisport/Humains/Humain.java
index 04c06da1d7d721b21f115b8063a6339d82333f54..194f7d48f62df30b7bbe1bac72b05ee59222c2a3 100644
--- a/src/cmisport/Humains/Humain.java
+++ b/src/cmisport/Humains/Humain.java
@@ -167,8 +167,11 @@ public abstract class Humain extends Produit{
    * Le string est formaté de manière a bien s'intégrer à la méthode {@link Util#tabValCaraAthleteToString}.
    * @return Un string composé du nom de l'athlete puis des valeurs de ses caractéristiques.
    */
-  public String nomValeursCaraToString(boolean afficherRole){
+  public String nomValeursCaraToString(boolean afficherRole, boolean afficherPrixCout){
       StringBuilder sb = new StringBuilder();
+      if (afficherPrixCout){
+        sb.append(String.format("%-8d %-8d", this.prix.intValue(), this.cout.intValue()));
+      }
       if (afficherRole){
         sb.append(String.format("%-12s", this.getTypeHumain()));
       }
diff --git a/src/cmisport/Local.java b/src/cmisport/Local.java
index 2f49065497d9a7ca63bd6c93e89f01b5a6583aa7..18f512e89f21c12c14c338338b781a72826b69ac 100644
--- a/src/cmisport/Local.java
+++ b/src/cmisport/Local.java
@@ -63,7 +63,7 @@ public class Local extends Produit {
    */
   @Override
   public double calculerPrix(){
-    this.prix += this.capacite * this.prixCapacite;
+    this.prix = this.prix.intValue() + this.capacite * this.prixCapacite;
     return this.capacite * prixCapacite;
   }
 
@@ -96,7 +96,7 @@ public class Local extends Produit {
    * @return Le nouveau {@link Produit#cout}
    */
   public double calculerCout(){
-    this.cout += this.capacite * this.coutCapacite;
+    this.cout = this.cout.intValue() + capacite * this.coutCapacite;
     return this.capacite * coutCapacite;
   }
 
diff --git a/src/cmisport/Marche.java b/src/cmisport/Marche.java
index b29f98b899e25b1ab3f8f66da27fabf16c6e2e9a..d8b4512c5c52a0cd135a78b943b333163078ddc0 100644
--- a/src/cmisport/Marche.java
+++ b/src/cmisport/Marche.java
@@ -2,38 +2,35 @@ package cmisport;
 import cmisport.Humains.*;
 import java.util.ArrayList;
 
-//TODO Implémenter le marché tout à changé et je sais pas la meilleure approche pour faire une belle interface.
 public class Marche{
     private ArrayList<Local> locauxAVendre;
-    private ArrayList<Athlete> athletesAVendre;
-    //private ArrayList<Coach> coachsAVendre;
-    //private ArrayList<Medecin> medecinsAVendre;
 
+    /**
+     * La liste des {@link Humain} achetables dans le marché. 
+ d'une liste d'humains.    */
+    private ArrayList<Humain> humains;
+
+    /**
+     * Le {@link Club} auxquel le marché appartient
+     */
     private Club club;
 
-    public Marche(Club cl){
+    //TODO Aussi générer les locaux
+    /**
+     * Constructeur initialisant un marché avec des humains à vendre générés aléatoirement.
+     * @param cl Le club auxquel le marché est relié.
+     * @param nbHumains Le nombre d'humains à générer.
+     * @param nbPointsHumains Le nombre total des points des humains.
+     */
+    public Marche(Club cl, int nbHumains, int nbPointsHumains){
         club = cl;
         locauxAVendre = new ArrayList<Local>();
-        athletesAVendre = new ArrayList<Athlete>();
-        //coachsAVendre = new ArrayList<Coach>();
-
-    //    for (int i = 0; i <= c.calculerReputation / 10; i++){
-    //        Local l = new Local();
-    //        Athlete a = new Athlete();
-    //        Coach c = new Coach();
-    //        Medecin m = new Medecin();
-    //        Kine l = new Kine();
-    //        Psy p = new Psy();
-    //        locauxAVendre.add(l);
-    //        athletesAVendre.add(a);
-    //        coachsAVendre.add(c);
-    //        medecinsAVendre.add(m);
-    //        kinesAVendre.add(k);
-    //        psyAVendre.add(p);
-    //    }
+        this.humains = Util.genererListeAleatoireHumain(nbHumains, nbPointsHumains, 0.3, 0.8);
     }
 
-    public void rafraichir(){
+    /**
+     */
+    public void rafraichir(int nbHumains, int nbPointsHumains){
         for (int i = 0; i <= locauxAVendre.size(); i++){
             //locauxAVendre[i] = new Local();
             //coachsAVendre[i] = new Coach();
@@ -96,4 +93,18 @@ public class Marche{
     //    }
     return a;
     }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String toString(){
+      StringBuilder sb = new StringBuilder();
+      sb.append(String.format("Solde de %s : %f", this.club.getNom(), this.club.getSolde()));
+      sb.append(String.format("\n"));
+      sb.append("Humains à vendre : ");
+      sb.append(String.format("\n"));
+      sb.append(Util.tabValCaraAthleteToString(this.humains, true, true));
+      return sb.toString();
+    }
 }
diff --git a/src/cmisport/Produit.java b/src/cmisport/Produit.java
index d8f25e2a1d8edc3940adb121dd989a2e303c7a02..e0298ddd072f4724bda269ea7ceab390d2e28e41 100644
--- a/src/cmisport/Produit.java
+++ b/src/cmisport/Produit.java
@@ -8,12 +8,12 @@ public abstract class Produit {
   /**
    * Stocke le prix à l'achat et la vente du produit.
    */
-  protected double prix;
+  protected Number prix;
 
   /**
    * Stocke le cout d'entretient à payer régulièrement pour le produit.
    */
-  protected double cout;
+  protected Number cout;
   
   /**
    * Méthode abstraite calculant le {@link #cout} du produit en fonctions de ses attributs. 
@@ -43,11 +43,11 @@ public abstract class Produit {
     this.cout = cout;
   }
 
-  public double getPrix(){
+  public Number getPrix(){
     return this.prix;
   }
 
-  public double getCout(){
+  public Number getCout(){
     return this.cout;
   } 
 }
diff --git a/src/cmisport/Test.java b/src/cmisport/Test.java
index 84244e9a91f83469fc292ead86c010e4811b52e4..f49c6d05b03f4677b62396e1d8a2fca482100a5a 100644
--- a/src/cmisport/Test.java
+++ b/src/cmisport/Test.java
@@ -47,6 +47,14 @@ public class Test {
     Equipe equipe = new Equipe(club, 6, 4000);
     System.out.println(equipe);
   }
+
+  public static void testerMarche(){
+    Club club = new Club("FC OPTIM", 1, 800, 5);
+    Marche marche = new Marche(club, 9, 1800);
+    System.out.println(marche);
+
+    
+  }
 //  public void testnom(String arg){
 //
 //    try {
diff --git a/src/cmisport/Util.java b/src/cmisport/Util.java
index 59e812cf0c52ee5040fccd6805fc2c944159bdde..c1586e25b1ec1851258d62b4754bf7530e3c6020 100644
--- a/src/cmisport/Util.java
+++ b/src/cmisport/Util.java
@@ -5,8 +5,7 @@ import java.util.Collection;
 import java.util.ListIterator;
 import java.util.Random;
 
-import cmisport.Humains.Athlete;
-import cmisport.Humains.Humain;
+import cmisport.Humains.*;
 
 /**
  * Classe stockant des méthodes utilitaires.
@@ -67,23 +66,61 @@ public class Util {
     }
 
   /**
-   * Méthode utilitaire permettant d'afficher dans un tableau les noms et caractéristiques d'une liste d'humains.
+   * Méthode utilitaire permettant de renvoyer un string d'un tableau d'humains avec l'indice +1, les noms et les caractéristiques des humains.
    * @param humains La liste d'{@link Humain} dont il faut afficher les caractéristiques.
    * @return Le tableau avec les noms des humains et les valeurs des caractéristiques.
    */
-  public static String tabValCaraAthleteToString(Collection<? extends Humain> humains, boolean afficherRole){
+  public static String tabValCaraAthleteToString(Collection<? extends Humain> humains, boolean afficherRole, boolean afficherPrixCout){
     StringBuilder sb = new StringBuilder();
+    sb.append(String.format("%-6s", "ID"));
+    if(afficherPrixCout){
+      sb.append(String.format("%-8s %-8s", "Prix", "Cout"));
+    }
     if (afficherRole){sb.append(String.format("%-12s", "ROLE"));}
     sb.append(String.format("%-23s", "NOM"));
     sb.append(Caracteristique.allCaracteristiquesToString());
     sb.append(String.format("\n"));
-    for (int i = 0; i < Caracteristique.values().length * 14; i++) {
+    for (int i = 0; i < Caracteristique.values().length * 16; i++) {
       sb.append("=");
     }
     sb.append("\n");
+    int indexHumain = 1;
     for (Humain athlete : humains){
-      sb.append(athlete.nomValeursCaraToString(afficherRole)).append(String.format("\n"));
+      sb.append(String.format("%-6d", indexHumain));
+      sb.append(athlete.nomValeursCaraToString(afficherRole, afficherPrixCout)).append(String.format("\n"));
+      indexHumain++;
     }
     return sb.toString();
   }
+
+  /**
+   * Génére une liste d'Humains dont la proportion des types d'humains et la répartition des points de ceux ci dépend des déviations passées en paramètre.
+   * @param nbHumains Le nombre d'humains à générer. 
+   * @param nbPointsTotal La somme des points de tous les humains. 
+   * @param deviationTypesHumain La déviation des types d'humains par rapport à la moyenne théorique. Valeur aux alentours de 0.3 recommandée.
+   * @param deviationTypesHumain La déviation des points des Humains par rapport à la moyenne théorique. Valeur aux alentours de 0.3 recommandée.
+   * @return La liste des {@link Humain} générée.
+   */
+  public static ArrayList<Humain> genererListeAleatoireHumain(int nbHumains, int nbPointsTotal, double deviationTypesHumain, double deviationPointsHumains){
+      ArrayList<Humain> humains = new ArrayList<>(nbHumains);
+      ArrayList<Number> nbTypesHumains = new ArrayList<>();
+      nbTypesHumains = Util.genererGaussDistribution(3, deviationTypesHumain, nbHumains, 0, nbHumains); //Distribue le nbHumains dans 3 élements du tableau de manière aléatoire. Le premier élément du tableu est le nombre d'athlete, le second le nombre de coach et le troisieme le nombre de PersonelSante. 
+      ArrayList<Number> nbPointsHumains = Util.genererGaussDistribution(nbHumains, deviationPointsHumains, nbPointsTotal, 1, Humain.VALEUR_MAX_CARACTERISTIQUE); //Distribue le nbPoints total de tous les humains de manière aléatoire entre tous les humains.
+      //Ajoute à la liste des membres les types d'humains en fonction de la répartition des nbTypesHumains et attribue à chaque humain les points qui lui ont été distribué dans nbPointsHumains.
+      int indexHumain = 0;
+      //TODO (Peu important) Surement moyen de faire une seule boucle générique.
+      for (int i = 0; i < nbTypesHumains.get(0).intValue(); i++) {
+        humains.add(new Athlete(nbPointsHumains.get(indexHumain).intValue(), 0.3));
+        indexHumain++;
+      }
+      for (int i = 0; i < nbTypesHumains.get(1).intValue(); i++) {
+        humains.add(new Coach(nbPointsHumains.get(indexHumain).intValue(), 0.5));
+        indexHumain++;
+      }
+      for (int i = 0; i < nbTypesHumains.get(2).intValue(); i++) {
+        humains.add(new PersonelSante(nbPointsHumains.get(indexHumain).intValue(), 0.5));
+        indexHumain++;
+      }
+      return humains;
+  }
 }