protected static ArrayList<Noeud> recherche(Graph g, String nomNoeudDep,
			ArrayList<Filtre> listFiltres, int niveauMax, TypeUnicite tUnicite) {
		if (g == null || listFiltres == null) {
			System.out.println("Un des arguments est a null");
			return null;
		}
		Noeud noeudDep = g.getNoeud(nomNoeudDep);
		if (noeudDep != null) {
			int niveau = 0;
			int niveauLastNoeud = 0;
			Filtre fInitial = listFiltres.get(0);
			ArrayList<Noeud> listNoeuds = new ArrayList<Noeud>();
			LinkedList<Noeud> listNoeudsToVisit = new LinkedList<Noeud>();
			ArrayList<Relation> listRelationGlobal = new ArrayList<Relation>();
			ArrayList<Relation> listRelations = noeudDep.getFlux(fInitial.getSens());
			if (listFiltres.size() != 1) {
				// Suppression du premier lien et du premier sens
				listFiltres.remove(0);
			}
			for (Relation r : listRelations) {
				if (r.getName().equalsIgnoreCase(fInitial.getNomFiltre())) {
					if (tUnicite.toString().equals("RELATION_GLOBAL")) {
						listRelationGlobal.add(r);
					}
					listNoeudsToVisit.add(r.getNoeudDestination());
				}
			}
			if (tUnicite.toString().equals("RELATION_GLOBAL")) {
				rechercheRelationGlobal(listNoeudsToVisit.getFirst(), listFiltres, niveauMax,
						niveau, niveauLastNoeud + 1, listNoeudsToVisit.size(), listNoeuds,
						listNoeudsToVisit, listRelationGlobal);
			} else {
				rechercheNoeudGlobal(listNoeudsToVisit.getFirst(), listFiltres, niveauMax, niveau,
						niveauLastNoeud + 1, listNoeudsToVisit.size(), listNoeuds,
						listNoeudsToVisit);
			}
			return listNoeuds;
		}
		return null;
	}