diff --git a/IHM_Retouche_Photo/tools/editable.cpp b/IHM_Retouche_Photo/tools/editable.cpp
index 432500c711709b4f8d387934e24e7653ec4447ad..3ca01adfa30adc25dbe7df9568d7ab49efbc1f06 100644
--- a/IHM_Retouche_Photo/tools/editable.cpp
+++ b/IHM_Retouche_Photo/tools/editable.cpp
@@ -4,6 +4,9 @@ namespace tool {
     Editable::Editable(const QString & name, const QIcon & icon,bool free)
     : Tool(name, icon), _free(free) {}
 
+    void Editable::onKeyPress(ui::ImageArea &, QImage &, const QPoint &, const ui::Selection &, const QKeyEvent &) {}
+    void Editable::onKeyReleased(ui::ImageArea &, QImage &, const QPoint &, const ui::Selection &, const QKeyEvent &) {}
+
     void Editable::pressed(ui::ImageArea & area, QImage & image, QPoint & click, ui::Selection & selection, QMouseEvent & e) {
         if(image.rect().contains(click) || this->_free) {
             this->onMousePressed(area, image, click, selection, e);
@@ -21,4 +24,12 @@ namespace tool {
             this->onMouseMoved(area, image, click, selection, e, hold);
         }
     }
+
+    void Editable::keyPressed(ui::ImageArea & area, QImage & image, QPoint & click, ui::Selection & selection, QKeyEvent & e) {
+        this->onKeyPress(area, image, click, selection, e);
+    }
+
+    void Editable::keyReleased(ui::ImageArea & area, QImage & image, QPoint & click, ui::Selection & selection, QKeyEvent & e) {
+        this->onKeyReleased(area, image, click, selection, e);
+    }
 }
diff --git a/IHM_Retouche_Photo/tools/editable.h b/IHM_Retouche_Photo/tools/editable.h
index 3ff50758b2d691cc5663b67d601a810b43fa3aef..b332fa8ab5140d52786d72436b0802799ca0f62e 100644
--- a/IHM_Retouche_Photo/tools/editable.h
+++ b/IHM_Retouche_Photo/tools/editable.h
@@ -14,9 +14,15 @@ namespace tool {
             virtual void onMouseReleased(ui::ImageArea &, QImage &, const QPoint &, const ui::Selection &, const QMouseEvent &) = 0;
             virtual void onMouseMoved(ui::ImageArea &, QImage &, const QPoint &, const ui::Selection &, const QMouseEvent &, bool) = 0;
 
+            virtual void onKeyPress(ui::ImageArea &, QImage &, const QPoint &, const ui::Selection &, const QKeyEvent &);
+            virtual void onKeyReleased(ui::ImageArea &, QImage &, const QPoint &, const ui::Selection &, const QKeyEvent &);
+
         public slots:
             virtual void pressed(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &) final;
             virtual void released(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &) final;
             virtual void moved(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &, bool) final;
+
+            virtual void keyPressed(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QKeyEvent &) final;
+            virtual void keyReleased(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QKeyEvent &) final;
     };
 }
diff --git a/IHM_Retouche_Photo/tools/selectionnable.cpp b/IHM_Retouche_Photo/tools/selectionnable.cpp
index 49d0e5e2897c1005818d97d7d926a16c4c800fea..307c3d2b23429e13328c05f25f112e6866d0cc98 100644
--- a/IHM_Retouche_Photo/tools/selectionnable.cpp
+++ b/IHM_Retouche_Photo/tools/selectionnable.cpp
@@ -4,6 +4,9 @@ namespace tool {
     Selectionable::Selectionable(const QString & name, const QIcon & icon, bool free)
     : Tool(name, icon), _free(free) {}
 
+    void Selectionable::onKeyPress(ui::ImageArea &, ui::Selection &, const QPoint &, const QImage &, const QKeyEvent &) {}
+    void Selectionable::onKeyReleased(ui::ImageArea &, ui::Selection &, const QPoint &, const QImage &, const QKeyEvent &) {}
+
     void Selectionable::pressed(ui::ImageArea & area, QImage & image,  QPoint & click, ui::Selection & selection, QMouseEvent & e) {
         if(image.rect().contains(click) || this->_free) {
             this->onMousePressed(area, selection, click, image, e);
@@ -21,4 +24,12 @@ namespace tool {
             this->onMouseMoved(area, selection, click, image, e, hold);
         }
     }
+
+    void Selectionable::keyPressed(ui::ImageArea & area, QImage & image, QPoint & click, ui::Selection & selection, QKeyEvent & e) {
+        this->onKeyPress(area, selection, click, image, e);
+    }
+
+    void Selectionable::keyReleased(ui::ImageArea & area, QImage & image, QPoint & click, ui::Selection & selection, QKeyEvent & e) {
+        this->onKeyReleased(area, selection, click, image, e);
+    }
 }
diff --git a/IHM_Retouche_Photo/tools/selectionnable.h b/IHM_Retouche_Photo/tools/selectionnable.h
index 58751534ed504a48cf6792b18eb7e9c0d647c6c3..adf266db697fc61029782aafd808bbf42483c52b 100644
--- a/IHM_Retouche_Photo/tools/selectionnable.h
+++ b/IHM_Retouche_Photo/tools/selectionnable.h
@@ -14,9 +14,15 @@ namespace tool {
             virtual void onMouseReleased(ui::ImageArea &, ui::Selection &, const QPoint &, const QImage &, const QMouseEvent &) = 0;
             virtual void onMouseMoved(ui::ImageArea &, ui::Selection &, const QPoint &, const QImage &, const QMouseEvent &, bool) = 0;
 
+            virtual void onKeyPress(ui::ImageArea &, ui::Selection &, const QPoint &, const QImage &, const QKeyEvent &);
+            virtual void onKeyReleased(ui::ImageArea &, ui::Selection &, const QPoint &, const QImage &, const QKeyEvent &);
+
         public slots:
             virtual void pressed(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &) final;
             virtual void released(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &) final;
             virtual void moved(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &, bool) final;
+
+            virtual void keyPressed(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QKeyEvent &) final;
+            virtual void keyReleased(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QKeyEvent &) final;
     };
 }
diff --git a/IHM_Retouche_Photo/tools/tool.h b/IHM_Retouche_Photo/tools/tool.h
index 35f3605783936503b095fffda6db060ac775815f..810fa5803a4be05c87a0fd1618a4b3d5422e2706 100644
--- a/IHM_Retouche_Photo/tools/tool.h
+++ b/IHM_Retouche_Photo/tools/tool.h
@@ -19,5 +19,8 @@ namespace tool {
             virtual void released(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &) = 0;
             virtual void moved(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &, bool) = 0;
 
+            virtual void keyPressed(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QKeyEvent &) = 0;
+            virtual void keyReleased(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QKeyEvent &) = 0;
+
     };
 }
diff --git a/IHM_Retouche_Photo/ui/toolbox/toolRegister.cpp b/IHM_Retouche_Photo/ui/toolbox/toolRegister.cpp
index ac887d0ac7940c32968b6011a97cc55a73b9b263..cbeaa54335fd0c2ef7ad9b8c32d9ce25239b80e5 100644
--- a/IHM_Retouche_Photo/ui/toolbox/toolRegister.cpp
+++ b/IHM_Retouche_Photo/ui/toolbox/toolRegister.cpp
@@ -24,6 +24,10 @@ namespace ui {
             QObject::disconnect(this->_currentImage, SIGNAL(mousePressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)), this->_currentTool, SLOT(pressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)));
             QObject::disconnect(this->_currentImage, SIGNAL(mouseReleased(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)), this->_currentTool, SLOT(released(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)));
             QObject::disconnect(this->_currentImage, SIGNAL(mouseMoved(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&,bool)), this->_currentTool, SLOT(moved(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&,bool)));
+
+            QObject::disconnect(this->_currentImage, SIGNAL(keyboardPress(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)), this->_currentTool, SLOT(keyPressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)));
+            QObject::disconnect(this->_currentImage, SIGNAL(keyboardRelease(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)), this->_currentTool, SLOT(keyReleased(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)));
+
         }
 
         this->_currentTool = dynamic_cast<tool::Tool*>(item);
@@ -33,6 +37,9 @@ namespace ui {
             QObject::connect(this->_currentImage, SIGNAL(mousePressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)), this->_currentTool, SLOT(pressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)));
             QObject::connect(this->_currentImage, SIGNAL(mouseReleased(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)), this->_currentTool, SLOT(released(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)));
             QObject::connect(this->_currentImage, SIGNAL(mouseMoved(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&,bool)), this->_currentTool, SLOT(moved(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&,bool)));
+
+            QObject::connect(this->_currentImage, SIGNAL(keyboardPress(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)), this->_currentTool, SLOT(keyPressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)));
+            QObject::connect(this->_currentImage, SIGNAL(keyboardRelease(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)), this->_currentTool, SLOT(keyReleased(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)));
         }
 
         qDebug() << "tool choose";
@@ -43,6 +50,9 @@ namespace ui {
             QObject::disconnect(this->_currentImage, SIGNAL(mousePressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)), this->_currentTool, SLOT(pressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)));
             QObject::disconnect(this->_currentImage, SIGNAL(mouseReleased(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)), this->_currentTool, SLOT(released(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)));
             QObject::disconnect(this->_currentImage, SIGNAL(mouseMoved(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&,bool)), this->_currentTool, SLOT(moved(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&,bool)));
+
+            QObject::disconnect(this->_currentImage, SIGNAL(keyboardPress(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)), this->_currentTool, SLOT(keyPressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)));
+            QObject::disconnect(this->_currentImage, SIGNAL(keyboardRelease(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)), this->_currentTool, SLOT(keyReleased(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)));
         }
 
         this->_currentImage = dynamic_cast<ImageArea *>(image);
@@ -52,6 +62,9 @@ namespace ui {
             QObject::connect(this->_currentImage, SIGNAL(mousePressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)), this->_currentTool, SLOT(pressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)));
             QObject::connect(this->_currentImage, SIGNAL(mouseReleased(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)), this->_currentTool, SLOT(released(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&)));
             QObject::connect(this->_currentImage, SIGNAL(mouseMoved(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&,bool)), this->_currentTool, SLOT(moved(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QMouseEvent&,bool)));
+
+            QObject::connect(this->_currentImage, SIGNAL(keyboardPress(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)), this->_currentTool, SLOT(keyPressed(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)));
+            QObject::connect(this->_currentImage, SIGNAL(keyboardRelease(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)), this->_currentTool, SLOT(keyReleased(ui::ImageArea&,QImage&,QPoint&,ui::Selection&,QKeyEvent&)));
         }
 
         qDebug() << "view changed";
diff --git a/IHM_Retouche_Photo/ui/view/imagearea.cpp b/IHM_Retouche_Photo/ui/view/imagearea.cpp
index ed8ac2bc5149cd31a2c7af9ead8e1b08c5af9b77..383577fc16a6926399b7638f861349f7ffdfd528 100644
--- a/IHM_Retouche_Photo/ui/view/imagearea.cpp
+++ b/IHM_Retouche_Photo/ui/view/imagearea.cpp
@@ -91,6 +91,28 @@ namespace ui {
         emit this->mouseReleased(*this, this->_image, pixelPosition, this->_selection, *e);
     }
 
+    void ImageArea::keyPressEvent(QKeyEvent * event) {
+        QPoint pixelPosition = this->_position - this->_lastPos;
+        if(pixelPosition.x() <= 0 && pixelPosition.y() <= 0) {
+            pixelPosition.setX(abs(pixelPosition.x()) / this->_zoom);
+            pixelPosition.setY(abs(pixelPosition.y()) / this->_zoom);
+        }
+
+        this->repaint();
+        emit this->keyboardPress(*this, this->_image, pixelPosition,this->_selection, *event);
+    }
+
+    void ImageArea::keyReleaseEvent(QKeyEvent * event) {
+        QPoint pixelPosition = this->_position - this->_lastPos;
+        if(pixelPosition.x() <= 0 && pixelPosition.y() <= 0) {
+            pixelPosition.setX(abs(pixelPosition.x()) / this->_zoom);
+            pixelPosition.setY(abs(pixelPosition.y()) / this->_zoom);
+        }
+
+        this->repaint();
+        emit this->keyboardRelease(*this, this->_image, pixelPosition,this->_selection, *event);
+    }
+
     void ImageArea::wheelEvent(QWheelEvent *event) {
         if(event->angleDelta().y() > 0) {
             this->increaseZoom();
diff --git a/IHM_Retouche_Photo/ui/view/imagearea.h b/IHM_Retouche_Photo/ui/view/imagearea.h
index 1e31f1156f1665390108734777039b21c9f1acac..dc94499e0f97fac71d3c93ef4672d562ee3c6a7c 100644
--- a/IHM_Retouche_Photo/ui/view/imagearea.h
+++ b/IHM_Retouche_Photo/ui/view/imagearea.h
@@ -57,13 +57,16 @@ namespace ui {
             inline void setPosition(const QPoint & position) {this->_position = position;}
             inline void setLast_Positon(const QPoint & lastPosition) {this->_lastPos = lastPosition;}
 
-            virtual void paintEvent(QPaintEvent * e);
+            virtual void paintEvent(QPaintEvent *);
 
-            virtual void mouseMoveEvent(QMouseEvent *event);
-            virtual void mousePressEvent(QMouseEvent *event);
-            virtual void mouseReleaseEvent(QMouseEvent *event);
+            virtual void mouseMoveEvent(QMouseEvent *);
+            virtual void mousePressEvent(QMouseEvent *);
+            virtual void mouseReleaseEvent(QMouseEvent *);
 
-            virtual void wheelEvent(QWheelEvent *event);
+            virtual void keyPressEvent(QKeyEvent *);
+            virtual void keyReleaseEvent(QKeyEvent *);
+
+            virtual void wheelEvent(QWheelEvent *);
 
             static QImage Generate_Checkboard(qsizetype, qsizetype, qsizetype);
 
@@ -90,6 +93,8 @@ namespace ui {
             void mousePressed(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &);
             void mouseReleased(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &);
             void mouseMoved(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QMouseEvent &, bool);
+            void keyboardPress(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QKeyEvent &);
+            void keyboardRelease(ui::ImageArea &, QImage &, QPoint &, ui::Selection &, QKeyEvent &);
     };
 }