let est_valide_plateau (mon_plateau:plateau) =
        let (c, n, m, p) = (mon_plateau.c, mon_plateau.n, mon_plateau.m, mon_plateau.p) in
        
        (** On vérifie d'abord qu'aucune des cases du tableau ne soit un 'None'. *)

        for i = 0 to (m-1) do
                for j = 0 to (n-1) do
                        match p.(i).(j) with
                        | Some _        -> ();
                        | None                -> raise Mauvais_tableau;
                done;
        done;
        
        
        (** On vérifie d'abord horizontalement; *)

        for i = 0 to (m-2) do
                for j = 0 to (n-1) do
                        match (p.(i).(j), p.(i+1).(j)) with
                        | Some x, Some y ->
                                if  not(compatible_h ~pieceG:x ~pieceD:y ) then raise (Erreur_compatibilite_h(i, j));
                        
                        (** Si le tableau contient un case sans piece attribuée, on déclenche 'Mauvais_tableau'; *)

                        | _ -> raise Mauvais_tableau;
                done;
        done;
        
        
        (** Puis verticalement. *)

        for i = 0 to (m-1) do
                for j = 0 to (n-2) do
                        match (p.(i).(j), p.(i).(j+1)) with
                        | Some x, Some y ->
                                if  not(compatible_v ~pieceB:x ~pieceH:y ) then raise (Erreur_compatibilite_v(i, j));
                        | _ -> raise Mauvais_tableau;
                done;
        done;
        
        
        (** On use et on abuse des exceptions pour gérer des valeurs de retours spécifiques. *)

        raise Solution_trouvee;
        ()