diff --git a/boomwhackers-8.json b/boomwhackers-8.json
index b3d54980d16e6cc59c52730dfe3e3fb148f0efe1..eada19bfb460588ccab4ec9601e4518aec3b5caa 100644
--- a/boomwhackers-8.json
+++ b/boomwhackers-8.json
@@ -1,10 +1,10 @@
 {
-  "do1": { "couleur": [167, 56, 36], "capsule": "0" },
-  "re1": { "couleur": [197, 101, 40], "capsule": "0" },
-  "mi1": { "couleur": [244, 226, 54], "capsule": "0" },
-  "fa1": { "couleur": [150, 197, 40], "capsule": "0" },
-  "sol1": { "couleur": [46, 72, 109], "capsule": "0" },
-  "la1": { "couleur": [62, 58, 135], "capsule": "0" },
-  "si1": { "couleur": [106, 41, 131], "capsule": "0" },
-  "do2": { "couleur": [151, 55, 30], "capsule": "0" }
+  "do1": { "couleur": [167, 56, 36], "capsule": "0", "court": "1" },
+  "re1": { "couleur": [197, 101, 40], "capsule": "0", "court": "0" },
+  "mi1": { "couleur": [244, 226, 54], "capsule": "0", "court": "0" },
+  "fa1": { "couleur": [150, 197, 40], "capsule": "0", "court": "0" },
+  "sol1": { "couleur": [46, 72, 109], "capsule": "0", "court": "0" },
+  "la1": { "couleur": [62, 58, 135], "capsule": "0", "court": "0" },
+  "si1": { "couleur": [106, 41, 131], "capsule": "0", "court": "0" },
+  "do2": { "couleur": [151, 55, 30], "capsule": "0", "court": "0" }
 }
diff --git a/joie.py b/joie.py
index df63b4ddc513ae109b3a359c0adb9cef56e354e5..4c1765c5aef9e8bbe8b41995bfa4253eede513eb 100644
--- a/joie.py
+++ b/joie.py
@@ -71,7 +71,7 @@ if args.exerciceSpectrogramme:
   g = GenerateurExercice(gamme.bpm)
   g.setBoomwhackers(boomwhackers)
   g.setLongueurPartitionColoree(8)
-  g.genererExerciceSpectrogramme(joie, "exercices/ex-spec-joie.tex", "thème joie")
+  g.genererExerciceSpectrogramme(joie, "exercices/ex-spec-joie.tex", "thème 1")
 else:
   print "Génération du son"
   s = BasicSequenceur(1, gamme.bpm, 0)
diff --git a/musique/exercice.py b/musique/exercice.py
index cd8850a2b3b7dd82310630742f090bf311d5143a..479b50387363355eeb4885d2f87be89d5efe436c 100644
--- a/musique/exercice.py
+++ b/musique/exercice.py
@@ -293,8 +293,9 @@ class GenerateurExercice(GammeTemperee):
     
     def pointColore(self, boomwhacker, x, y, r):
       result = self.couleurBoomwhackerToTikz(boomwhacker)
+      rayon = r if boomwhacker["court"] == "0" else r * 0.7
       result += "\\fill[fill=tempcolor] ("+ \
-                str(x) + "," +  str(y) + ") circle (" + str(r) + ");"
+                str(x) + "," +  str(y) + ") circle (" + str(rayon) + ");"
       if boomwhacker["capsule"] == "1":
          result += "\\fill [black] (" + str(x - r) + "," + str(y - 1.2 * r) + \
                     ") rectangle (" + str(x + r) + ", " + str(y - 1.9 * r) + ");"
@@ -302,6 +303,40 @@ class GenerateurExercice(GammeTemperee):
       
       return result
     
+    def ensembleDesNotesGraphiques(self, frequences, radius):
+      result = ""
+      
+      notes = sorted(list(set(frequences)))
+      
+      result += "\\begin{table}[H]\n\centering\n"
+      result += "\\begin{tabular}{|r|" + "".join(["c|"] * len(notes)) +  "}\n"
+      result += "\\hline\n"
+      
+      result += "Notes"
+      for n in notes:
+        result += "&"
+        result += self.frequenceToLaTeX(n)
+      result += "\\\\ \n"
+      result += "Forme"
+      for n in notes:
+        result += "&"
+        result += "\\begin{tikzpicture}[]"
+        nid = self.shiftNote(self.getOctaveEtIDNote(n), self.shiftOctave)
+        mw = self.boomwhackers[nid]
+        result += self.pointColore(mw, 0, 0, radius)
+        result += "\\end{tikzpicture}"
+      result += "\\\\ \n"
+      result += "Prénom"
+      for n in notes:
+        result += "&"
+        result += "\\hspace*{2.5cm}"
+      result += "\\\\ \n"
+      result += "\\hline\n"
+      result += "\\end{tabular}\n"
+      result += "\\caption{Représentation colorée des notes}\n"
+      result += "\\end{table}\n"
+      return result
+    
     def partitionGraphique(self, partitions):
       result = ""
       
@@ -312,6 +347,7 @@ class GenerateurExercice(GammeTemperee):
       
       stepx = 2
       stepy = 2.5
+      radius = stepx / 4.
       
       finDeLigne = self.longueurPartitionColoree * stepx
       
@@ -319,11 +355,16 @@ class GenerateurExercice(GammeTemperee):
       if self.estDessinable(partitions):
         p = partitions[0]
 
+        
+        result += self.ensembleDesNotesGraphiques(frequences, radius)
+
+        result += "La partition graphique suivante se lit ligne par ligne. Les durées sont représentées par les espaces entre les cercles colorés. \n \n"
+
+        result += "\\begin{figure}[H]"
         result += "\\begin{tikzpicture}[]"
         
         
         for note in p:
-          print note
           if x == 0:
             result += "\\node[draw] at (- " + str(stepx) + "," + str(y) + ") {" + str(nbl) + "};"
           if isinstance(note[0], float):
@@ -331,7 +372,7 @@ class GenerateurExercice(GammeTemperee):
             if note[0] != 0:
               n = self.shiftNote(self.getOctaveEtIDNote(note[0]), self.shiftOctave)
               mw = self.boomwhackers[n]
-              result += self.pointColore(mw, x, y, stepx / 4.)
+              result += self.pointColore(mw, x, y, radius)
             # on calcule la translation pour le point suivant
             x += self.dureeEnNoires(note[1]) * stepx
             if x >= finDeLigne:
@@ -341,11 +382,11 @@ class GenerateurExercice(GammeTemperee):
               
         
         result += "\\end{tikzpicture}"
+        result += "\\caption{Partition graphique retranscrite depuis le tableau des notes de la partition}"
+        result += "\\end{figure}"
       else:
         result += "Cette partition n'est pas représentable sous forme de partition pour boomwhackers diatoniques."
-      
-      print result
-      
+            
       return result
 
     # cette fonction écrit la fin de l'exercice spectrogramme