diff --git a/dev/flat_list_existing_tables.Rmd b/dev/flat_list_existing_tables.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..0ede240e4ed4ed16d01db8ecc11676b0eaeb0356
--- /dev/null
+++ b/dev/flat_list_existing_tables.Rmd
@@ -0,0 +1,93 @@
+---
+title: "Liste des tables existantes"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+```
+
+```{r development-load}
+# Load already included functions if relevant
+pkgload::load_all(export_all = FALSE)
+```
+
+# Présentation
+
+Cette page contient la logique métier permettant de consulter les lots de données
+existants pour le projet Nitrates.
+
+# Exploration des données existantes
+
+## Connexion à la base de données PostgreSQL
+
+```{r connect_to_db, eval=FALSE}
+# Se connecter à la base de données PostgreSQL si_eau
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+```
+
+## Liste des schémas de la base de données `si_eau`
+
+```{r list_schemas, eval=FALSE}
+# Lister les schémas présents dans la base
+schemas_list <- data.frame(datalibaba::list_schemas(connexion))
+
+# Renommer la variable unique en "nom_schema"
+schemas_list <- schemas_list |>
+  rename(nom_schema = names(schemas_list)[1])
+
+# Trier le dataframe par la variable nom_schema
+schemas_list <- schemas_list |>
+  arrange(nom_schema)
+```
+
+## Liste des tables du schéma `nitrates`
+
+```{r list_tables, eval=FALSE}
+# Lister les tables présentes dans le schéma spécifié
+tables_list <- data.frame(datalibaba::list_tables(
+  con = connexion, 
+  db = "si_eau", 
+  schema = "nitrates"))
+
+# Renommer la variable unique en "nom_table"
+tables_list <- tables_list |>
+  rename(nom_table = names(tables_list)[1])
+
+# Trier le dataframe par la variable nom_table
+tables_list <- tables_list |>
+  arrange(nom_table)
+
+```
+
+```{r development-skeleton-dir, eval=FALSE}
+# Créer de l'arborescence et des fichiers du template
+usethis::use_rmarkdown_template(
+  template_name = "Liste des tables existantes",
+  template_dir = "liste-des-tables-existantes",
+  template_description = "Liste des tables existantes",
+  template_create_dir = TRUE
+)
+
+```
+
+```{r development-skeleton-copy, eval=FALSE}
+# Définir les chemins source et destination
+source_file <- "dev/flat_list_existing_tables.Rmd"
+destination_dir <- "inst/rmarkdown/templates/liste-des-tables-existantes/skeleton"
+destination_file <- file.path(destination_dir, "skeleton.Rmd")
+
+# Copier et renommer le fichier
+file.copy(from = source_file, to = destination_file, overwrite = TRUE)
+message("File copied and renamed successfully.")
+
+```
+
+```{r development-inflate, eval=FALSE}
+# Run but keep eval=FALSE to avoid infinite loop
+# Execute in the console directly
+fusen::inflate(flat_file = "dev/flat_list_existing_tables.Rmd", vignette_name = "Liste des tables existantes")
+```
+
diff --git a/inst/rmarkdown/templates/liste-des-tables-existantes/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/liste-des-tables-existantes/skeleton/skeleton.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..0ede240e4ed4ed16d01db8ecc11676b0eaeb0356
--- /dev/null
+++ b/inst/rmarkdown/templates/liste-des-tables-existantes/skeleton/skeleton.Rmd
@@ -0,0 +1,93 @@
+---
+title: "Liste des tables existantes"
+output: html_document
+editor_options: 
+  chunk_output_type: console
+---
+
+```{r development, include=FALSE}
+library(testthat)
+```
+
+```{r development-load}
+# Load already included functions if relevant
+pkgload::load_all(export_all = FALSE)
+```
+
+# Présentation
+
+Cette page contient la logique métier permettant de consulter les lots de données
+existants pour le projet Nitrates.
+
+# Exploration des données existantes
+
+## Connexion à la base de données PostgreSQL
+
+```{r connect_to_db, eval=FALSE}
+# Se connecter à la base de données PostgreSQL si_eau
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+```
+
+## Liste des schémas de la base de données `si_eau`
+
+```{r list_schemas, eval=FALSE}
+# Lister les schémas présents dans la base
+schemas_list <- data.frame(datalibaba::list_schemas(connexion))
+
+# Renommer la variable unique en "nom_schema"
+schemas_list <- schemas_list |>
+  rename(nom_schema = names(schemas_list)[1])
+
+# Trier le dataframe par la variable nom_schema
+schemas_list <- schemas_list |>
+  arrange(nom_schema)
+```
+
+## Liste des tables du schéma `nitrates`
+
+```{r list_tables, eval=FALSE}
+# Lister les tables présentes dans le schéma spécifié
+tables_list <- data.frame(datalibaba::list_tables(
+  con = connexion, 
+  db = "si_eau", 
+  schema = "nitrates"))
+
+# Renommer la variable unique en "nom_table"
+tables_list <- tables_list |>
+  rename(nom_table = names(tables_list)[1])
+
+# Trier le dataframe par la variable nom_table
+tables_list <- tables_list |>
+  arrange(nom_table)
+
+```
+
+```{r development-skeleton-dir, eval=FALSE}
+# Créer de l'arborescence et des fichiers du template
+usethis::use_rmarkdown_template(
+  template_name = "Liste des tables existantes",
+  template_dir = "liste-des-tables-existantes",
+  template_description = "Liste des tables existantes",
+  template_create_dir = TRUE
+)
+
+```
+
+```{r development-skeleton-copy, eval=FALSE}
+# Définir les chemins source et destination
+source_file <- "dev/flat_list_existing_tables.Rmd"
+destination_dir <- "inst/rmarkdown/templates/liste-des-tables-existantes/skeleton"
+destination_file <- file.path(destination_dir, "skeleton.Rmd")
+
+# Copier et renommer le fichier
+file.copy(from = source_file, to = destination_file, overwrite = TRUE)
+message("File copied and renamed successfully.")
+
+```
+
+```{r development-inflate, eval=FALSE}
+# Run but keep eval=FALSE to avoid infinite loop
+# Execute in the console directly
+fusen::inflate(flat_file = "dev/flat_list_existing_tables.Rmd", vignette_name = "Liste des tables existantes")
+```
+
diff --git a/inst/rmarkdown/templates/liste-des-tables-existantes/template.yaml b/inst/rmarkdown/templates/liste-des-tables-existantes/template.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..bed89bc20703ddb534ec1f009d1c9e1f20bc6651
--- /dev/null
+++ b/inst/rmarkdown/templates/liste-des-tables-existantes/template.yaml
@@ -0,0 +1,4 @@
+name: Liste des tables existantes
+description: >
+   Liste des tables existantes
+create_dir: TRUE
diff --git a/vignettes/liste-des-tables-existantes.Rmd b/vignettes/liste-des-tables-existantes.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..d68f7560a0280260c6fa3db9f3c2d204f5b99dff
--- /dev/null
+++ b/vignettes/liste-des-tables-existantes.Rmd
@@ -0,0 +1,82 @@
+---
+title: "Liste des tables existantes"
+output: rmarkdown::html_vignette
+vignette: >
+  %\VignetteIndexEntry{Liste des tables existantes}
+  %\VignetteEngine{knitr::rmarkdown}
+  %\VignetteEncoding{UTF-8}
+---
+
+```{r, include = FALSE}
+knitr::opts_chunk$set(
+  collapse = TRUE,
+  comment = "#>"
+)
+```
+
+```{r}
+library(data.nitrates)
+```
+
+<!-- WARNING - This vignette is generated by {fusen} from dev/flat_list_existing_tables.Rmd: do not edit by hand -->
+
+
+
+
+# Présentation
+
+Cette page contient la logique métier permettant de consulter les lots de données
+existants pour le projet Nitrates.
+
+# Exploration des données existantes
+
+## Connexion à la base de données PostgreSQL
+```{r connect_to_db}
+#| eval: no
+
+# Se connecter à la base de données PostgreSQL si_eau
+connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin")
+```
+
+
+## Liste des schémas de la base de données `si_eau`
+```{r list_schemas}
+#| eval: no
+
+# Lister les schémas présents dans la base
+schemas_list <- data.frame(datalibaba::list_schemas(connexion))
+
+# Renommer la variable unique en "nom_schema"
+schemas_list <- schemas_list |>
+  rename(nom_schema = names(schemas_list)[1])
+
+# Trier le dataframe par la variable nom_schema
+schemas_list <- schemas_list |>
+  arrange(nom_schema)
+```
+
+
+## Liste des tables du schéma `nitrates`
+```{r list_tables}
+#| eval: no
+
+# Lister les tables présentes dans le schéma spécifié
+tables_list <- data.frame(datalibaba::list_tables(
+  con = connexion, 
+  db = "si_eau", 
+  schema = "nitrates"))
+
+# Renommer la variable unique en "nom_table"
+tables_list <- tables_list |>
+  rename(nom_table = names(tables_list)[1])
+
+# Trier le dataframe par la variable nom_table
+tables_list <- tables_list |>
+  arrange(nom_table)
+
+```
+
+
+
+
+