diff --git a/packages/ui/src/components/activite.stories_snapshots_NotLogged.html b/packages/ui/src/components/activite.stories_snapshots_NotLogged.html
index 089834fad25181c6ab99049ae9c154ff1051fd91..d8ba118a4ed62c4a10fc1b45a13b637b8da9ad30 100644
--- a/packages/ui/src/components/activite.stories_snapshots_NotLogged.html
+++ b/packages/ui/src/components/activite.stories_snapshots_NotLogged.html
@@ -1,3 +1,3 @@
 <div class="fr-alert fr-alert--info fr-alert--sm">
-  <p>Vous n’avez pas accès à cette page, veuillez vous connecter</p>
+  <p>Vous n'avez pas accès à cette page, veuillez vous connecter</p>
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/activite.stories_snapshots_Unauthorized.html b/packages/ui/src/components/activite.stories_snapshots_Unauthorized.html
index 3cb9a6a8f236e500a75b20d5e4d8c4f93300b3f7..cd58ec1b3e3c5fe996dd7dcae9da060392a20f96 100644
--- a/packages/ui/src/components/activite.stories_snapshots_Unauthorized.html
+++ b/packages/ui/src/components/activite.stories_snapshots_Unauthorized.html
@@ -1,3 +1,3 @@
 <div class="fr-alert fr-alert--error fr-alert--sm">
-  <p>Erreur: vous n’avez pas le droit d’accéder à ce contenu</p>
+  <p>Erreur: vous n'avez pas le droit d’accéder à ce contenu</p>
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/activites.stories_snapshots_Forbidden.html b/packages/ui/src/components/activites.stories_snapshots_Forbidden.html
index 3cb9a6a8f236e500a75b20d5e4d8c4f93300b3f7..cd58ec1b3e3c5fe996dd7dcae9da060392a20f96 100644
--- a/packages/ui/src/components/activites.stories_snapshots_Forbidden.html
+++ b/packages/ui/src/components/activites.stories_snapshots_Forbidden.html
@@ -1,3 +1,3 @@
 <div class="fr-alert fr-alert--error fr-alert--sm">
-  <p>Erreur: vous n’avez pas le droit d’accéder à ce contenu</p>
+  <p>Erreur: vous n'avez pas le droit d’accéder à ce contenu</p>
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/activites.stories_snapshots_NotConnected.html b/packages/ui/src/components/activites.stories_snapshots_NotConnected.html
index 089834fad25181c6ab99049ae9c154ff1051fd91..d8ba118a4ed62c4a10fc1b45a13b637b8da9ad30 100644
--- a/packages/ui/src/components/activites.stories_snapshots_NotConnected.html
+++ b/packages/ui/src/components/activites.stories_snapshots_NotConnected.html
@@ -1,3 +1,3 @@
 <div class="fr-alert fr-alert--info fr-alert--sm">
-  <p>Vous n’avez pas accès à cette page, veuillez vous connecter</p>
+  <p>Vous n'avez pas accès à cette page, veuillez vous connecter</p>
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/error.stories_snapshots_Forbidden.html b/packages/ui/src/components/error.stories_snapshots_Forbidden.html
index 089834fad25181c6ab99049ae9c154ff1051fd91..d8ba118a4ed62c4a10fc1b45a13b637b8da9ad30 100644
--- a/packages/ui/src/components/error.stories_snapshots_Forbidden.html
+++ b/packages/ui/src/components/error.stories_snapshots_Forbidden.html
@@ -1,3 +1,3 @@
 <div class="fr-alert fr-alert--info fr-alert--sm">
-  <p>Vous n’avez pas accès à cette page, veuillez vous connecter</p>
+  <p>Vous n'avez pas accès à cette page, veuillez vous connecter</p>
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/error.stories_snapshots_NotConnected.html b/packages/ui/src/components/error.stories_snapshots_NotConnected.html
index 3cb9a6a8f236e500a75b20d5e4d8c4f93300b3f7..cd58ec1b3e3c5fe996dd7dcae9da060392a20f96 100644
--- a/packages/ui/src/components/error.stories_snapshots_NotConnected.html
+++ b/packages/ui/src/components/error.stories_snapshots_NotConnected.html
@@ -1,3 +1,3 @@
 <div class="fr-alert fr-alert--error fr-alert--sm">
-  <p>Erreur: vous n’avez pas le droit d’accéder à ce contenu</p>
+  <p>Erreur: vous n'avez pas le droit d’accéder à ce contenu</p>
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/error.tsx b/packages/ui/src/components/error.tsx
index 57815d30c9efa533df0108306748d3d86c97fd50..c8059682644d69de9f44f54ad6864f67a6864ce8 100644
--- a/packages/ui/src/components/error.tsx
+++ b/packages/ui/src/components/error.tsx
@@ -9,8 +9,8 @@ interface CaminoAccessErrorProps {
 
 export const CaminoAccessError: FunctionalComponent<CaminoAccessErrorProps> = props => {
   if (isNotNullNorUndefined(props.user)) {
-    return <Alert small={true} title="Erreur: vous n’avez pas le droit d’accéder à ce contenu" type="error" />
+    return <Alert small={true} title="Erreur: vous n'avez pas le droit d’accéder à ce contenu" type="error" />
   } else {
-    return <Alert small={true} title="Vous n’avez pas accès à cette page, veuillez vous connecter" type="info" />
+    return <Alert small={true} title="Vous n'avez pas accès à cette page, veuillez vous connecter" type="info" />
   }
 }
diff --git a/packages/ui/src/components/titre.stories.tsx b/packages/ui/src/components/titre.stories.tsx
index ac898ae7a008088a26f333cbe023379ee1a76068..2e99ac71900366e15a8d3efe15507ed2bf4c8a5d 100644
--- a/packages/ui/src/components/titre.stories.tsx
+++ b/packages/ui/src/components/titre.stories.tsx
@@ -14,6 +14,8 @@ import { Entreprise, entrepriseIdValidator } from 'camino-common/src/entreprise'
 import { titreIdValidator, titreSlugValidator, TitreIdOrSlug } from 'camino-common/src/validators/titres'
 import { ZERO_KM2 } from 'camino-common/src/number'
 import { CaminoRouter } from '@/typings/vue-router'
+import { CaminoHttpError } from '@/api/client-rest'
+import { HTTP_STATUS } from 'camino-common/src/http'
 
 const meta: Meta = {
   title: 'Components/Titre',
@@ -814,3 +816,39 @@ export const TitreAvecUnOctroiEnConstructionEtUnTravaux: StoryFn = () => (
     titreIdOrSlug={titre.id}
   />
 )
+
+export const NonConnecteTitreNotFound: StoryFn = () => (
+  <PureTitre
+    entreprises={entreprises}
+    currentDate={caminoDateValidator.parse('2024-03-09')}
+    currentDemarcheSlug={demarcheSlugValidator.parse('m-cx-lenoncourt-1968-exp02')}
+    initTab="points"
+    user={undefined}
+    router={routerPushMock}
+    apiClient={{
+      ...apiClient,
+      getTitreById: (_: TitreIdOrSlug) => {
+        return Promise.reject(new CaminoHttpError('Plop', HTTP_STATUS.NOT_FOUND))
+      },
+    }}
+    titreIdOrSlug={titreIdValidator.parse('s7RvqvCAgKs4DxkQBYV93cVx')}
+  />
+)
+
+export const ConnecteTitreNotFound: StoryFn = () => (
+  <PureTitre
+    entreprises={entreprises}
+    currentDate={caminoDateValidator.parse('2024-03-09')}
+    currentDemarcheSlug={demarcheSlugValidator.parse('m-cx-lenoncourt-1968-exp02')}
+    initTab="points"
+    user={{ ...testBlankUser, role: 'defaut' }}
+    router={routerPushMock}
+    apiClient={{
+      ...apiClient,
+      getTitreById: (_: TitreIdOrSlug) => {
+        return Promise.reject(new CaminoHttpError('Plop', HTTP_STATUS.NOT_FOUND))
+      },
+    }}
+    titreIdOrSlug={titreIdValidator.parse('s7RvqvCAgKs4DxkQBYV93cVx')}
+  />
+)
diff --git a/packages/ui/src/components/titre.stories_snapshots_ConnecteTitreNotFound.html b/packages/ui/src/components/titre.stories_snapshots_ConnecteTitreNotFound.html
new file mode 100644
index 0000000000000000000000000000000000000000..b797be1479cb07422a6008a0a9f39ee01086c41c
--- /dev/null
+++ b/packages/ui/src/components/titre.stories_snapshots_ConnecteTitreNotFound.html
@@ -0,0 +1,9 @@
+<div>
+  <div class="" style="display: flex; justify-content: center;">
+    <!---->
+    <div class="fr-alert fr-alert--error" role="alert">
+      <p class="fr-alert__title fr-h4">Titre non trouvé</p>Soit le titre n'existe pas, soit vous n'avez pas les droits d'y accéder
+    </div>
+    <!---->
+  </div>
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/titre.stories_snapshots_NonConnecteTitreNotFound.html b/packages/ui/src/components/titre.stories_snapshots_NonConnecteTitreNotFound.html
new file mode 100644
index 0000000000000000000000000000000000000000..ce22ee69e6893eb99dd915b17982ef87274fc47f
--- /dev/null
+++ b/packages/ui/src/components/titre.stories_snapshots_NonConnecteTitreNotFound.html
@@ -0,0 +1,9 @@
+<div>
+  <div class="" style="display: flex; justify-content: center;">
+    <!---->
+    <div class="fr-alert fr-alert--error" role="alert">
+      <p class="fr-alert__title fr-h4">Titre non trouvé</p>Connectez vous et re-essayez
+    </div>
+    <!---->
+  </div>
+</div>
\ No newline at end of file
diff --git a/packages/ui/src/components/titre.tsx b/packages/ui/src/components/titre.tsx
index 311cb2146609afb99ce574f216209d90c9d6ef46..03355672b726a0c225a07f267ce8de0042da74dd 100644
--- a/packages/ui/src/components/titre.tsx
+++ b/packages/ui/src/components/titre.tsx
@@ -2,7 +2,7 @@ import { computed, defineComponent, onMounted, ref, watch, inject } from 'vue'
 import { useRouter } from 'vue-router'
 import { LoadingElement } from './_ui/functional-loader'
 import { demarcheEnregistrementDemandeDateFind, DemarcheEtapeFondamentale, DemarcheSlug, demarcheSlugValidator } from 'camino-common/src/demarche'
-import { AsyncData } from '@/api/client-rest'
+import { AsyncData, CaminoHttpError } from '@/api/client-rest'
 import { User, isAdministration, isEntrepriseOrBureauDEtude, isSuper } from 'camino-common/src/roles'
 import { capitalize } from 'camino-common/src/strings'
 import { TitresTypes } from 'camino-common/src/static/titresTypes'
@@ -45,6 +45,7 @@ import { DemarchesConsentement } from './titre/demarche-consentement'
 import { useState } from '@/utils/vue-tsx-utils'
 import { isMachineWithConsentement, machineIdFind } from 'camino-common/src/machines'
 import { InitialSort } from './_ui/table'
+import { HTTP_STATUS } from 'camino-common/src/http'
 
 const activitesSort: InitialSort<string> = {
   colonne: activitesColonneIdAnnee,
@@ -177,9 +178,16 @@ export const PureTitre = defineComponent<Props>(props => {
         }
       } catch (e: any) {
         console.error('error', e)
-        titreData.value = {
-          status: 'ERROR',
-          message: e.message ?? "Une erreur s'est produite",
+        if (e instanceof CaminoHttpError && e.statusCode === HTTP_STATUS.NOT_FOUND) {
+          titreData.value = {
+            status: 'NEW_ERROR',
+            error: { message: 'Titre non trouvé', detail: isNullOrUndefined(props.user) ? 'Connectez vous et re-essayez' : "Soit le titre n'existe pas, soit vous n'avez pas les droits d'y accéder" },
+          }
+        } else {
+          titreData.value = {
+            status: 'ERROR',
+            message: e.message ?? "Une erreur s'est produite",
+          }
         }
       }
     }
diff --git a/packages/ui/src/components/utilisateurs.stories_snapshots_Forbidden.html b/packages/ui/src/components/utilisateurs.stories_snapshots_Forbidden.html
index 3cb9a6a8f236e500a75b20d5e4d8c4f93300b3f7..cd58ec1b3e3c5fe996dd7dcae9da060392a20f96 100644
--- a/packages/ui/src/components/utilisateurs.stories_snapshots_Forbidden.html
+++ b/packages/ui/src/components/utilisateurs.stories_snapshots_Forbidden.html
@@ -1,3 +1,3 @@
 <div class="fr-alert fr-alert--error fr-alert--sm">
-  <p>Erreur: vous n’avez pas le droit d’accéder à ce contenu</p>
+  <p>Erreur: vous n'avez pas le droit d’accéder à ce contenu</p>
 </div>
\ No newline at end of file
diff --git a/packages/ui/src/components/utilisateurs.stories_snapshots_NotConnected.html b/packages/ui/src/components/utilisateurs.stories_snapshots_NotConnected.html
index 089834fad25181c6ab99049ae9c154ff1051fd91..d8ba118a4ed62c4a10fc1b45a13b637b8da9ad30 100644
--- a/packages/ui/src/components/utilisateurs.stories_snapshots_NotConnected.html
+++ b/packages/ui/src/components/utilisateurs.stories_snapshots_NotConnected.html
@@ -1,3 +1,3 @@
 <div class="fr-alert fr-alert--info fr-alert--sm">
-  <p>Vous n’avez pas accès à cette page, veuillez vous connecter</p>
+  <p>Vous n'avez pas accès à cette page, veuillez vous connecter</p>
 </div>
\ No newline at end of file