So, it seems that you want to insert a node in the middle of two other nodes.
What you have to do, is create a new node, set the pointers precedent and suivant to the previous and next nodes, and update the pointers of the previous and next node, something like that:

So, if you change your code to do it, it will be something like that:
// Insert a new node after position
public void insererApres(Object element){
if(debut == null)
insererDebut(element);
else if (position == fin)
insererFin(element);
else {
// First, create the new node
Noeud nouveau = new Noeud(element);
// Set the pointers
nouveau.suivant = position.suivant;
nouveau.precedent = position;
// Update the previous node pointer
nouveau.precedent.suivant = nouveau;
// Update the next node pointer
nouveau.suivant.precedent = nouveau;
position = position.suivant;
nbElement++;
}
}
You also have to change your other methods to always have precedent and suivant pointing to the previous/next node:
public void insererDebut(Object element){
Noeud noeud = new Noeud(element);
noeud.suivant = debut;
if (noeud.suivant!=null)
noeud.suivant.precedent = noeud;
debut = noeud;
if (nbElement == 0)
fin = debut;
position = debut;
nbElement++;
}
public void insererFin(Object element){
if(debut == null)
insererDebut(element);
else{
fin.suivant = new Noeud(element);
fin.suivant.precedent = fin;
fin = fin.suivant;
position = fin;
nbElement++;
}
}