private Widget creerListeUserPanel() {
		setWidth("100%");
		setHeight("100%");
		listUserPan.isVisible();
		listUserPan.setTitle("Liste des utilisateurs");
		final CellTable<User> table = new CellTable<User>();

		AdminService.Util.getInstance().getAllUsers(new AsyncCallback<ArrayList<User>>(){

			@Override
			public void onFailure(Throwable caught) {
				Window.alert("Erreur : "+ caught.getMessage());
			}
			@Override
			public void onSuccess(ArrayList<User> result) {
				if (result==null)
					Window.alert("Erreur lors de la récupération de la liste des utilisateurs");
				listeUtilisateurs = result;
				// The list of data to display.
				List<User> USERS = listeUtilisateurs;
				// Create a data provider.
				ListDataProvider<User> dataProvider = new ListDataProvider<User>();

				// Connect the table to the data provider.
				dataProvider.addDataDisplay(table);

				// Add the data to the data provider, which automatically pushes it to the
				// widget.
				List<User> list = dataProvider.getList();
				for (User user : USERS) {
					list.add(user);
				}
				// Add a ColumnSortEvent.ListHandler to connect sorting to the
				// java.util.List.
				ListHandler<User> columnSortHandler = new ListHandler<User>(
						list);
				table.addColumnSortHandler(columnSortHandler);
			}

		});

		class HasCellImpl implements HasCell<User, User> {
			private ActionCell<User> fCell;

			public HasCellImpl(String text, Delegate<User> delegate) {
				fCell = new ActionCell<User>(text, delegate);
			}

			@Override
			public Cell<User> getCell() {
				return fCell;
			}

			@Override
			public FieldUpdater<User, User> getFieldUpdater() {
				return null;
			}

			@Override
			public User getValue(User object) {
				return object;
			}
		}

		List<HasCell<User, ?>> cells = new LinkedList<HasCell<User, ?>>();
		cells.add(new HasCellImpl("supprimer", new Delegate<User>() {

			// SUPPRIMER ICI LE USER SELECTIONNE DE LA BDD
			@Override
			public void execute(User object) {
				AdminService.Util.getInstance().deleteUser(object.getLogin(), new AsyncCallback<Boolean>(){
					@Override
					public void onFailure(Throwable caught) {
						Window.alert("Erreur : "+ caught.getMessage());
					}
					@Override
					public void onSuccess(Boolean result) {
						if (result==null)
							Window.alert("Erreur lors de la suppression du compte !");
						else{
							Window.alert("L'utilisateur à été supprimé");
							stackPanel.remove(presentationPan);
							stackPanel.remove(listUserPan);
							stackPanel.remove(listSallePan);
							stackPanel.remove(addSallePan);
							configPanel();
						}
					}
				});
			}
		}));

		CompositeCell<User> pseudoColumn = new CompositeCell<User>(cells);
		table.addColumn(new TextColumn<User>() {

			@Override
			public String getValue(User object) {
				return object.getLogin();
			}
		}, "Pseudo");

		// Create nombre de fois ejecter column.
		Cell<Number> nbEjectionColumn = new NumberCell();
		table.addColumn(new Column<User, Number>(nbEjectionColumn) {

			@Override
			public Number getValue(User user) {
				return user.getNbEjections();
			}
		},"nb Ejections");

		// Create nombre de fois bannis column.
		Cell<Number> nbBanniColumn = new NumberCell();
		table.addColumn(new Column<User, Number>(nbBanniColumn) {

			@Override
			public Number getValue(User user) {
				return user.getNbBannissements();
			}
		},"nb Bannis");

		options = new ArrayList<String>();
		options.add("utilisateur");
		options.add("moderateur");
		options.add("administrateur");

		// Create droit column.
		SelectionCell dColumn = new SelectionCell(options);
		droitColumn = new Column<User, String>(dColumn) {

			@Override
			public String getValue(User object) {
				return object.getDroit();

			}



		};

		table.addColumn(droitColumn, "Droit");
		droitColumn.setFieldUpdater(new FieldUpdater<User, String>() {
			public void update(int index, User employee, String value) {
				employee.setDroit(value);
			}
		});

		// Create update column.
		List<HasCell<User, ?>> cellsModifUser = new LinkedList<HasCell<User, ?>>();
		cellsModifUser.add(new HasCellImpl("Mettre a jour", new Delegate<User>() {

			// Passe l'utilisateur en utilisateur
			@Override
			public void execute(User object) {
				droitColumn.setFieldUpdater(new FieldUpdater<User, String>() {
					public void update(int index, User employee, String value) {
						employee.setDroit(value);
					}
				});


				AdminService.Util.getInstance().majUser(object.getLogin(),object.getDroit(), new AsyncCallback<Boolean>(){
					@Override
					public void onFailure(Throwable caught) {
						Window.alert("Erreur : "+ caught.getMessage());
					}
					@Override
					public void onSuccess(Boolean result) {
						if (result==null)
							Window.alert("Erreur lors de la suppression du compte !");
						else{
							Window.alert("Les droits de l'utilisateur ont ete modifies");
							stackPanel.remove(presentationPan);
							stackPanel.remove(listUserPan);
							stackPanel.remove(listSallePan);
							stackPanel.remove(addSallePan);
							configPanel();
						}
					}
				});
			}
		}));

		CompositeCell<User> mColumn2 = new CompositeCell<User>(cellsModifUser);
		Column<User, User>  modifColumn2 = new Column<User, User>(mColumn2){

			@Override
			public User getValue(User object) {
				return object;
			}

		};
		table.addColumn(modifColumn2,"Modifier les droits d'acces");

		// En format data aux cas ou on modifie :
		/*DateCell dateLastColumn = new DateCell();
Column<User, Date> dateColumn = new Column<User, Date>(dateLastColumn) {
@Override
public Date getValue(User object) {
return object.getDateLastConnexion();
}
};
table.addColumn(dateColumn, "Date de derniere connexion");
		 */

		TextColumn<User> dateLastColumn = new TextColumn<User>() {
			@Override
			public String getValue(User user) {
				return user.getDateLastConnexion();
			}
		};
		table.addColumn(dateLastColumn, "Date de derniere connexion");

		table.addColumn(new Column<User, User>(pseudoColumn) {

			@Override
			public User getValue(User object) {
				return object;
			}
		},"Suprimer User");

		// Add it to the root panel.
		listUserPan.add(table);
		return listUserPan;
	}