public static Vector<Ticket> valideCaddie (Vector<Caddie> caddies) throws BDException, ParseException {
		ArrayList<Vector<Place>> placesToChoice = new ArrayList<Vector<Place>>();
		ArrayList<Integer> placesPrice = new ArrayList<Integer>();
		Vector<Ticket> toReturn = new Vector<Ticket>();
		int finalPrice = 0 ;

		// Test et récupération des places disponibles.
		for(Caddie caddie : caddies){
			Vector<Place> places = getPlacesDisponiblesFromZone(Integer.toString(caddie.getNumS()), caddie.getDate(), caddie.getZone());

			// Test si le nombre de places est bon.
			if(places.size() < caddie.getQt())
				throw new BDException("Il ne reste plus assez de places !!!!");

			// Choix des places.
			placesToChoice.add(choicePlaces(places, caddie.getQt()));

			// Ajout au prix de la commande.
			int prix =getPriceOfAPlace(caddie.getZone());
			finalPrice+=prix*caddie.getQt();
			placesPrice.add(prix);
		}

		// Insertion.
		PreparedStatement stmt = null;
		Connection conn = null;
		String requete = null;
		try {
			conn = BDConnexion.getConnexion();
			conn.setAutoCommit(false);

			// Création d'une nouvelle commande.
			int numDossier = BDRequetesTest.testNouveauDossier(conn,finalPrice);

			// Ajout de tous les tickets
			for(int i = 0 ; i< caddies.size() ; i++){

				Caddie caddie = caddies.get(i);
				Vector<Place> places = placesToChoice.get(i);
				int prixDelaPlace = placesPrice.get(i);
				for(Place place : places){
					// Get le nouveau num de serie.
					int noserie = BDRequetesTest.testNouveauTicket(conn);
					requete = "insert into lestickets values (?, ?, ?, ?, ?, ?, ?)";
					stmt = conn.prepareStatement(requete);
					stmt.setInt(1,noserie);
					stmt.setInt(2,caddie.getNumS());
					stmt.setTimestamp(3,new Timestamp((new SimpleDateFormat("dd/MM/yyyy HH:mm")).parse(caddie.getDate()).getTime()));
					stmt.setInt(4,place.getNum());
					stmt.setInt(5,place.getRang());
					Date dNow = new Date( );
					SimpleDateFormat ft = new SimpleDateFormat ("dd/MM/yyyy HH:mm");
					stmt.setTimestamp(6,new Timestamp((new SimpleDateFormat("dd/MM/yyyy HH:mm")).parse(ft.format(dNow)).getTime()));
					stmt.setInt(7,numDossier);
					int nb_insert = stmt.executeUpdate();
					if(nb_insert != 1)
					{
						// ERREUR CRITIQUE ....
						conn.rollback();
						throw new BDException("Impossible de valider la commande");
					}
					else
					{
						// Ajout d'un ticket à retourner.
						Ticket tik = new Ticket();
						tik.setDateEmission(ft.format(dNow));
						tik.setDateRep(caddie.getDate());
						tik.setNomS(caddie.getNom());
						tik.setNumDossier(numDossier);
						tik.setNumPlace(place.getNum());
						tik.setNumS(caddie.getNumS());
						tik.setNumTicket(noserie);
						tik.setRangPlace(place.getRang());
						tik.setZonePlace(place.getZone());
						tik.setPrix(prixDelaPlace);

						toReturn.add(tik);
					}
				}
			}

			// To c'est normalement passé.
			conn.commit();

		} catch (SQLException e) {
			throw new BDException("Problème de création de commande (Code Oracle : "+e.getErrorCode()+")");
		}
		finally {
			BDConnexion.FermerTout(conn, stmt, null);
		}
		return toReturn ;
	}