diff --git a/database/script/init_template.sql b/database/script/init_template.sql
index 98be940c5c77644bea603a3d8637d7575b44a1a2..8f007031979af8886c74d9c8d0ffe7ba631c40d6 100644
--- a/database/script/init_template.sql
+++ b/database/script/init_template.sql
@@ -41,7 +41,8 @@ INSERT INTO unicaen_renderer_macro (code, description, variable_name, methode_na
     ('Url#GestionDemandesExternes', '<p>Retourne le lien vers la page de gestion des demandes externes</p>', 'UrlService', 'getUrlGestionDemandesExternes'),
     ('Url#MesFormations', '<p>Retourne l''url de la page des formations réalisées d''un·e agent·e</p>', 'UrlService', 'getUrlMesFormations'),
     ('Url#PlanDeFormation', '<p>Fourni un lieu vers la page des plans de formation courants</p>', 'UrlService', 'getUrlPlanDeFormation'),
-    ('Url#ValidateurDemandesExternes', '<p>Retourne l''url associé à la page mes agents avec l''onglet ''Demande à titre individuel'' sélectionné</p>', 'UrlService', 'getUrlValidateurDemandesExternes')
+    ('Url#ValidateurDemandesExternes', '<p>Retourne l''url associé à la page mes agents avec l''onglet ''Demande à titre individuel'' sélectionné</p>', 'UrlService', 'getUrlValidateurDemandesExternes'),
+    ('SESSION#MotifAnnulation', '<p>Affiche le motif d''annulation</p>', 'session', 'getMotifAnnulation')
 ;
 
 INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('ENQUETE_EXPLICATION', '<p>Texte précisant le caractère anonyme et <em>facultatif</em> de l''enquête</p>', 'texte', 'À propos des formulaires de retour d''expérience', e'<p>Ces formulaires sont anonymes et si vous ne souhaitez pas fournir de réponse à une des questions de l\'enquête vous pouvez sélectionner la réponse "<em>Sans avis</em>".</p>
diff --git a/module/Formation/config/merged/session.config.php b/module/Formation/config/merged/session.config.php
index 24b4a17e42114fd300433e9127ba00a946a44949..3f597a60fd86d805e5a5302da6f892dc3677a68e 100644
--- a/module/Formation/config/merged/session.config.php
+++ b/module/Formation/config/merged/session.config.php
@@ -9,6 +9,10 @@ use Formation\Controller\SessionControllerFactory;
 use Formation\Controller\InscriptionController;
 use Formation\Event\NotificationNouvellesSessions\NotificationNouvellesSessionsEvent;
 use Formation\Event\NotificationNouvellesSessions\NotificationNouvellesSessionsEventFactory;
+use Formation\Form\Annulation\AnnulationForm;
+use Formation\Form\Annulation\AnnulationFormFactory;
+use Formation\Form\Annulation\AnnulationHydrator;
+use Formation\Form\Annulation\AnnulationHydratorFactory;
 use Formation\Form\Session\SessionForm;
 use Formation\Form\Session\SessionFormFactory;
 use Formation\Form\Session\SessionHydrator;
@@ -479,11 +483,13 @@ return [
     ],
     'form_elements' => [
         'factories' => [
+            AnnulationForm::class => AnnulationFormFactory::class,
             SessionForm::class => SessionFormFactory::class,
         ],
     ],
     'hydrators' => [
         'factories' => [
+            AnnulationHydrator::class => AnnulationHydratorFactory::class,
             SessionHydrator::class => SessionHydratorFactory::class,
         ],
     ],
diff --git a/module/Formation/src/Formation/Controller/SessionController.php b/module/Formation/src/Formation/Controller/SessionController.php
index 45f99169a183ceb232246393e3fe65be26c5766a..9e77bef103287e4221f4d4b8bb11d214531895d5 100644
--- a/module/Formation/src/Formation/Controller/SessionController.php
+++ b/module/Formation/src/Formation/Controller/SessionController.php
@@ -4,6 +4,7 @@ namespace Formation\Controller;
 
 use DateTime;
 use Formation\Entity\Db\Inscription;
+use Formation\Form\Annulation\AnnulationFormAwareTrait;
 use Formation\Form\SelectionFormateur\SelectionFormateurFormAwareTrait;
 use Formation\Form\SelectionGestionnaire\SelectionGestionnaireFormAwareTrait;
 use Formation\Form\Session\SessionFormAwareTrait;
@@ -50,6 +51,7 @@ class SessionController extends AbstractActionController
     use ResultatServiceAwareTrait;
     use UserServiceAwareTrait;
 
+    use AnnulationFormAwareTrait;
     use SelectionFormateurFormAwareTrait;
     use SelectionGestionnaireFormAwareTrait;
     use SessionFormAwareTrait;
@@ -337,11 +339,30 @@ class SessionController extends AbstractActionController
         return $this->redirect()->toRoute('session/afficher', ['session' => $session->getId()], [], true);
     }
 
-    public function annulerAction(): Response
+    public function annulerAction(): ViewModel
     {
         $session = $this->getSessionService()->getRequestedSession($this);
-        $this->getSessionService()->annuler($session);
-        return $this->redirect()->toRoute('session/afficher', ['session' => $session->getId()], [], true);
+
+        $form = $this->getAnnulationForm();
+        $form->setAttribute('action', $this->url()->fromRoute('session/annuler', ['session' => $session->getId()] ,[], true));
+        $form->bind($session);
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                $this->getSessionService()->annuler($session);
+                exit();
+            }
+        }
+
+        $vm = new ViewModel([
+            'title' => "Annulation de la session",
+            'form' => $form,
+        ]);
+        $vm->setTemplate('default/default-form');
+        return $vm;
     }
 
     public function reouvrirAction(): Response
diff --git a/module/Formation/src/Formation/Controller/SessionControllerFactory.php b/module/Formation/src/Formation/Controller/SessionControllerFactory.php
index 2763b52b6e9cd1da31c333c537ae4d370db97dfc..af2f710ccd4c4d282accfb5fee9a4781d166d9c9 100644
--- a/module/Formation/src/Formation/Controller/SessionControllerFactory.php
+++ b/module/Formation/src/Formation/Controller/SessionControllerFactory.php
@@ -2,6 +2,7 @@
 
 namespace Formation\Controller;
 
+use Formation\Form\Annulation\AnnulationForm;
 use Formation\Form\SelectionFormateur\SelectionFormateurForm;
 use Formation\Form\SelectionGestionnaire\SelectionGestionnaireForm;
 use Formation\Form\Session\SessionForm;
@@ -63,10 +64,12 @@ class SessionControllerFactory
         $userService = $container->get(UserService::class);
 
         /**
+         * @var AnnulationForm $annulationForm
          * @var SelectionFormateurForm $selectionFormateurForm
          * @var SelectionGestionnaireForm $selectionGestionnaireForm
          * @var SessionForm $sessionForm
          */
+        $annulationForm = $container->get('FormElementManager')->get(AnnulationForm::class);
         $sessionForm = $container->get('FormElementManager')->get(SessionForm::class);
         $selectionFormateurForm = $container->get('FormElementManager')->get(SelectionFormateurForm::class);
         $selectionGestionnaireForm = $container->get('FormElementManager')->get(SelectionGestionnaireForm::class);
@@ -86,6 +89,7 @@ class SessionControllerFactory
         $controller->setResultatService($resultatService);
         $controller->setSessionService($sessionService);
         $controller->setUserService($userService);
+        $controller->setAnnulationForm($annulationForm);
         $controller->setSessionForm($sessionForm);
         $controller->setSelectionFormateurForm($selectionFormateurForm);
         $controller->setSelectionGestionnaireForm($selectionGestionnaireForm);
diff --git a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Session.dcm.xml b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Session.dcm.xml
index 55dd3c8049de5ea36dc487a6fb7e486462a77425..2b6285e052c555777d14d10cf3c400e63d7fcaef 100644
--- a/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Session.dcm.xml
+++ b/module/Formation/src/Formation/Entity/Db/Mapping/Formation.Entity.Db.Session.dcm.xml
@@ -16,7 +16,8 @@
         <field name="lieu"                      type="string" length="256"      column="lieu"                        nullable="true"/>
         <field name="type"                      type="string" length="256"      column="type"                        nullable="true"/>
         <field name="autoInscription"           type="boolean"                  column="auto_inscription"            nullable="true"/>
-        <field name="complement"                type="string" length="4096"     column="complement"                  nullable="true"/>
+        <field name="complement"                type="text"                     column="complement"                  nullable="true"/>
+        <field name="motifAnnulation"           type="text"                     column="motif_annulation"                  nullable="true"/>
 
         <one-to-many field="journees"       target-entity="Formation\Entity\Db\Seance"    mapped-by="instance"/>
         <one-to-many field="inscriptions"   target-entity="Formation\Entity\Db\Inscription"    mapped-by="session"/>
diff --git a/module/Formation/src/Formation/Entity/Db/Session.php b/module/Formation/src/Formation/Entity/Db/Session.php
index 5142ede6326b1c6c0f847fbf61141ae72ad8cbab..c60a72df74ffb0a3f2916db2fcb61ed0945dae71 100644
--- a/module/Formation/src/Formation/Entity/Db/Session.php
+++ b/module/Formation/src/Formation/Entity/Db/Session.php
@@ -72,6 +72,7 @@ class Session implements
 
     private ?SessionParametre $parametre = null;
 
+    private ?string $motifAnnulation = null;
 
 
     public function __construct()
@@ -142,6 +143,17 @@ class Session implements
         return $this;
     }
 
+    public function getMotifAnnulation(): ?string
+    {
+        return $this->motifAnnulation;
+    }
+
+    public function setMotifAnnulation(?string $motifAnnulation): void
+    {
+        $this->motifAnnulation = $motifAnnulation;
+    }
+
+
     /** PLACE SUR LISTE  **********************************************************************************************/
 
     /**
diff --git a/module/Formation/src/Formation/Form/Annulation/AnnulationForm.php b/module/Formation/src/Formation/Form/Annulation/AnnulationForm.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7a058304207ae6da90fb1cbcdf944af34834ee5
--- /dev/null
+++ b/module/Formation/src/Formation/Form/Annulation/AnnulationForm.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace Formation\Form\Annulation;
+
+use Laminas\Form\Element\Button;
+use Laminas\Form\Element\Textarea;
+use Laminas\Form\Form;
+use Laminas\InputFilter\Factory;
+
+class AnnulationForm extends Form
+{
+    public function init() : void
+    {
+        //description
+        $this->add([
+            'name' => 'motif_annulation',
+            'type' => Textarea::class,
+            'options' => [
+                'label' => "Motif d'annulation <span class='icon icon-obligatoire' title='champ obligatoire'></span> :",
+                'label_options' => ['disable_html_escape' => true,],
+                'label_attributes' => [
+                    'class' => 'control-label',
+                ],
+            ],
+            'attributes' => [
+                'id' => 'motif_annulation',
+                'class' => 'tinymce',
+            ]
+        ]);
+        //bouton
+        $this->add([
+            'type' => Button::class,
+            'name' => 'bouton',
+            'options' => [
+                'label' => '<i class="fas fa-save"></i> Enregistrer',
+                'label_options' => [
+                    'disable_html_escape' => true,
+                ],
+            ],
+            'attributes' => [
+                'type' => 'submit',
+                'class' => 'btn btn-success',
+            ],
+        ]);
+        $this->setInputFilter((new Factory())->createInputFilter([
+            'motif_annulation' => [ 'require' => true,  ],
+        ]));
+
+    }
+
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Form/Annulation/AnnulationFormAwareTrait.php b/module/Formation/src/Formation/Form/Annulation/AnnulationFormAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..f1e8a69475a63fc75db7b9c59ea2ab51a869b31c
--- /dev/null
+++ b/module/Formation/src/Formation/Form/Annulation/AnnulationFormAwareTrait.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace Formation\Form\Annulation;
+
+trait AnnulationFormAwareTrait {
+
+    private AnnulationForm $annulationForm;
+
+    public function getAnnulationForm(): AnnulationForm
+    {
+        return $this->annulationForm;
+    }
+
+    public function setAnnulationForm(AnnulationForm $annulationForm): void
+    {
+        $this->annulationForm = $annulationForm;
+    }
+
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Form/Annulation/AnnulationFormFactory.php b/module/Formation/src/Formation/Form/Annulation/AnnulationFormFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..04eec0de399fa677e94b17a4557aaf9a924ba817
--- /dev/null
+++ b/module/Formation/src/Formation/Form/Annulation/AnnulationFormFactory.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Formation\Form\Annulation;
+
+use Laminas\Form\Annotation\Hydrator;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Container\NotFoundExceptionInterface;
+
+class AnnulationFormFactory {
+
+    /**
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $containerInterface): AnnulationForm
+    {
+        /** @var AnnulationHydrator $hydrator */
+        $hydrator = $containerInterface->get('HydratorManager')->get(AnnulationHydrator::class);
+
+        $form = new AnnulationForm();
+        $form->setHydrator($hydrator);
+        return $form;
+    }
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Form/Annulation/AnnulationHydrator.php b/module/Formation/src/Formation/Form/Annulation/AnnulationHydrator.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce4e510f2d820612917d3e91858070b6450e1234
--- /dev/null
+++ b/module/Formation/src/Formation/Form/Annulation/AnnulationHydrator.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace Formation\Form\Annulation;
+
+use Formation\Entity\Db\Session;
+use Laminas\Hydrator\HydratorInterface;
+
+class AnnulationHydrator implements HydratorInterface {
+
+    public function extract(object $object): array
+    {
+        /** @var Session $object */
+        $data = [
+            'motif_annulation' => $object->getMotifAnnulation(),
+        ];
+        return $data;
+    }
+
+    public function hydrate(array $data, object $object): object
+    {
+        $motif = (isset($data['motif_annulation']) AND trim($data['motif_annulation']) !== '') ? trim($data['motif_annulation']) : null;
+
+        /** @var Session $object */
+        $object->setMotifAnnulation($motif);
+        return $object;
+    }
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Form/Annulation/AnnulationHydratorFactory.php b/module/Formation/src/Formation/Form/Annulation/AnnulationHydratorFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..f96dd1170455fb007bc2b396baeaf52dd3b02d54
--- /dev/null
+++ b/module/Formation/src/Formation/Form/Annulation/AnnulationHydratorFactory.php
@@ -0,0 +1,14 @@
+<?php
+
+namespace Formation\Form\Annulation;
+
+use Psr\Container\ContainerInterface;
+
+class AnnulationHydratorFactory {
+
+    public function __invoke(ContainerInterface $container): AnnulationHydrator
+    {
+        $hydrator = new AnnulationHydrator();
+        return $hydrator;
+    }
+}
\ No newline at end of file
diff --git a/module/Formation/src/Formation/View/Helper/SessionInformationsViewHelper.php b/module/Formation/src/Formation/View/Helper/SessionInformationsViewHelper.php
index d8902d6496014ca03f02c70c00a907c0ab8a631f..ceb86c91ddeb74f0b8eeb9ed5e861a32c4ecd023 100644
--- a/module/Formation/src/Formation/View/Helper/SessionInformationsViewHelper.php
+++ b/module/Formation/src/Formation/View/Helper/SessionInformationsViewHelper.php
@@ -2,7 +2,6 @@
 
 namespace Formation\View\Helper;
 
-use Formation\Entity\Db\FormationInstance;
 use Formation\Entity\Db\Session;
 use Laminas\View\Helper\AbstractHelper;
 use Laminas\View\Helper\Partial;
diff --git a/module/Formation/src/Formation/View/Helper/partial/session-informations.phtml b/module/Formation/src/Formation/View/Helper/partial/session-informations.phtml
index 34b410c564c0b63b2c869a0a7f878e35e86cdeca..8a479325bc1d62e6d896d9fcafa8f47ff730ffd3 100644
--- a/module/Formation/src/Formation/View/Helper/partial/session-informations.phtml
+++ b/module/Formation/src/Formation/View/Helper/partial/session-informations.phtml
@@ -10,6 +10,7 @@
 use Application\Entity\Db\Interfaces\HasSourceInterface;
 use DemandeExterne\Provider\Privilege\DemandeexternePrivileges;
 use Formation\Entity\Db\Session;
+use Formation\Provider\Etat\SessionEtats;
 
 
 $gestionnaires = $session->getGestionnaires();
@@ -24,6 +25,16 @@ $displayListe = (!isset($options['display-liste']) OR $options['display-liste']
     <dl class="row">
         <dt class="col-md-3"> État</dt>
         <dd class="col-md-9">  <?php echo ($session->getEtatActif()) ? $this->etattype($session->getEtatActif()->getType(), ['display-categorie' => false]) . " " . $session->getEtatActif()->getType()->getLibelle() : "N.C."; ?> </dd>
+        <?php if ($session->isEtatActif(SessionEtats::ETAT_SESSION_ANNULEE)): ?>
+            <dt class="col-md-3"> Motif d'annulation</dt>
+            <dd class="col-md-9">
+                <?php if ($session->getMotifAnnulation()): ?>
+                    <?php echo $session->getMotifAnnulation(); ?>
+                <?php else : ?>
+                    <em>Aucun motif connu</em>
+                <?php endif; ?>
+            </dd>
+        <?php endif; ?>
         <?php if ($session->getComplement() !== null) : ?>
             <dt class="col-md-3"> Compléments</dt>
             <dd class="col-md-9"> <?php echo $session->getComplement(); ?></dd>
diff --git a/module/Formation/view/formation/session/afficher.phtml b/module/Formation/view/formation/session/afficher.phtml
index 36962f89b43e5473d01e4987dd98eb87ee003ed2..3bb6045fc74734f15f0d376f1bdb02a9990c2b1c 100644
--- a/module/Formation/view/formation/session/afficher.phtml
+++ b/module/Formation/view/formation/session/afficher.phtml
@@ -178,7 +178,7 @@ $canMesSessions = $this->isAllowed(FormateurPrivileges::getResourceId(FormateurP
                 <?php if (!$session->isEtatActif(SessionEtats::ETAT_SESSION_ANNULEE)) : ?>
                     <a <?php /** @see SessionController::annulerAction() */ ?>
                             href="<?php echo $this->url('session/annuler', ['session' => $session->getId()], [], true); ?>"
-                            class="btn btn-danger">
+                            class="btn btn-danger ajax-modal" data-event="modification">
                         Annuler la session
                     </a>
                 <?php else : ?>