diff --git a/src/competence.c b/src/competence.c
index 5e52a36dda010eccf8939ccc8df5110e59e1b33e..4903f40d319df1c7abb78ef1a8d7245e0a1ff189 100644
--- a/src/competence.c
+++ b/src/competence.c
@@ -60,6 +60,16 @@ int estVide(Competence *c)
     return(c->enfant==NULL);
 }
 
+/*!
+ * \fn int aUnFrere(Competence *c)
+ * \brief La fonction indique si une competence a un frère.
+ *
+ * \return vrai ou faux.
+ */
+int aUnFrere(Competence *c)
+{
+    return(c->frere!=NULL);
+}
 
 /* -------------------------------------------------------*/
 /* Fonctions de set des competences */
@@ -74,25 +84,22 @@ int set_comp_enfant(Competence *parent, Competence *nouvel_enfant)  /* Ne foncti
     }
     else  // Solution cracra mais ça ne marche pas autrement (avec un while) //
     {
-        if(estVide(parent->enfant))
-        {
-            parent->enfant->frere = nouvel_enfant;
-        }
-        else if(estVide(parent->enfant->frere))
-        {
-            parent->enfant->frere->frere = nouvel_enfant;
-        }
-        else if(estVide(parent->enfant->frere->frere))
-        {
-            parent->enfant->frere->frere->frere = nouvel_enfant;
-        }
+        set_comp_frere(parent->enfant, nouvel_enfant);
     }
     return 0;
 }
 
 int set_comp_frere(Competence *noeud, Competence *nouveau_frere)
 {
-    noeud->frere = nouveau_frere;
+    if(aUnFrere(noeud))
+    {
+        set_comp_frere(noeud->frere, nouveau_frere);
+    }
+    else
+    {
+        init_Competence(noeud->frere);
+        noeud->frere = nouveau_frere;
+    }
     return 0;
 }