diff --git a/rsiTurtle.lua b/rsiTurtle.lua
index c3d647e555d3ff57d1a3e5aba37b6ea49ce6f542..cda152317dca582fc98c8fd28fab9d2856c70452 100644
--- a/rsiTurtle.lua
+++ b/rsiTurtle.lua
@@ -149,7 +149,7 @@ function RSI_Turtle:move2D(dx, dz)
     then
         return false
     end
-    succes = self:moveForward(math.abs(dz))
+    success = self:moveForward(math.abs(dz))
 
 
     return success
@@ -185,11 +185,41 @@ function RSI_Turtle:move(dx, dy, dz)
 end
 
 
+---
+-- \brief Déplacement avant multiple
+-- \param distance Distance à parcourir
+-- \return bool Succès
+function RSI_Turtle:moveForwardGrounded(distance)
+    local traveled = 0
+
+    self:ground()
+    while (traveled < distance) and turtle.forward()
+    do
+        self:ground()
+        self:climb()
+        traveled = traveled + 1
+    end
+
+    if self.facing_ == 0 then
+        self.pos_["x"] = self.pos_["x"] + traveled
+    elseif self.facing_ == 3 then
+        self.pos_["z"] = self.pos_["z"] + traveled
+    elseif self.facing_ == 6 then
+        self.pos_["x"] = self.pos_["x"] - traveled
+    elseif self.facing_ == 9 then
+        self.pos_["z"] = self.pos_["z"] - traveled
+    end
+
+    return (traveled == distance)
+end
+
+
 ---
 -- \brief Déplacement s'assurant de rester au niveau du sol
 -- escalade et descend automatiquement les pentes
+-- \return bool Succès
 function RSI_Turtle:moveToGrounded(x, z)
-    --TODO: Implementer
+    return self:moveGrounded(x - self.pos_["x"], z - self.pos_["z"])
 end
 
 
@@ -198,7 +228,51 @@ end
 -- escalade et descend automatiquement les pentes
 -- \return bool Succès
 function RSI_Turtle:moveGrounded(dx, dz)
-    --TODO: Implementer
+    local success = true
+
+    if dx >= 0
+    then
+        self:face(12)
+        success = self:moveForwardGrounded(dx)
+    elseif dx < 0
+    then
+        self:face(6)
+        success = self:moveForwardGrounded(-1*dx)
+    end
+
+    if not success
+    then
+        return false
+    end
+
+    if (self.facing_ == 0)
+    then
+        if dz < 0
+        then
+            self:turnLeft()
+        elseif dz > 0
+        then
+            self:turnRight()
+        end
+    elseif (self.facing_ == 6)
+    then
+        if dz > 0
+        then
+            self:turnLeft()
+        elseif dz < 0
+        then
+            self:turnRight()
+        end
+    end
+
+    if not success
+    then
+        return false
+    end
+
+    success = self:moveForwardGrounded(math.abs(dz))
+
+    return success
 end
 
 
diff --git a/test.lua b/test.lua
index 64e0d2020cfd41b57ab0eb27728ba59e08b75d4a..7b30f5e7bea52cfb7e9c8c576f5747c5386577d3 100644
--- a/test.lua
+++ b/test.lua
@@ -127,8 +127,17 @@ print(t:getPos())
 assert(checkPos(0,0,0))
 t:face(12)
 
-print("Tests climb")
-assert(t:climb())
+-- print("Tests climb")
+-- assert(t:climb())
+
+print("Tests moveForwardGrounded")
+assert(t:moveTo(0,5,0))
+assert(t:moveForwardGrounded(15))
+assert(checkPos(15,0,0))
+
+print("Tests moveGrounded")
+assert(t:moveToGrounded(-5,5))
+assert(checkPos(-5,0,5))
 
 print("Fin des tests")