diff --git a/R/create_dummy.R b/R/create_dummy.R
index faa2ec5c8d398bbd425b748644ad39889f69ca78..1fe3b81a00e5aac4d4335522ba849e6ef5f7cb9f 100644
--- a/R/create_dummy.R
+++ b/R/create_dummy.R
@@ -9,6 +9,7 @@
 #' @param schema Nom du schéma dans lequel créer la table.
 #' @param table Nom de la table à créer.
 #' @param pk Clé primaire de la table à créer. NULL par défaut.
+#' @param id_range Plage de 5 valeurs de l'identifiant id. 1:5 par défaut.
 #' @param role Nom du rôle (utilisateur) pour se connecter à la base de données.
 #'
 #' @return Un message indiquant si la table a été créée avec succès.
@@ -26,9 +27,12 @@
 #'              database = "collectr",
 #'              schema = "public",
 #'              table = "dummy",
+#'              pk = NULL,
+#'              id_range = "1:5"
 #'              role = "runner")
 #' }
-create_dummy <- function(host, database, schema, table, pk = NULL, role) {
+create_dummy <- function(host, database, schema, table, pk = NULL,
+                         id_range = "1:5", role) {
   # Se connecter à la base de données PostgreSQL
   connexion <- datalibaba::connect_to_db(server = host,
                                          db = database,
@@ -40,9 +44,12 @@ create_dummy <- function(host, database, schema, table, pk = NULL, role) {
     stop("La connexion fournie n\'est pas une connexion PostgreSQL valide.")
   }
 
+  # Générer dynamiquement la plage d'ID
+  id_values <- eval(parse(text = id_range))
+
   # Créer un dataframe fictif
   df <- data.frame(
-    id = 1:5,
+    id = id_values,
     name = c("Alice", "Bob", "Charlie", "David", "Eve"),
     birthdate = c("1990-01-15", "1985-06-22", "1992-09-10", "1988-03-05", "1995-12-30"),
     value = rnorm(5)
diff --git a/R/import_and_merge_tables.R b/R/import_and_merge_tables.R
index 93d4d1c6d61d555c8829a1b3cf6e97dad4486ba9..ac35de3940a895337f001649159625dc3eaf7e23 100644
--- a/R/import_and_merge_tables.R
+++ b/R/import_and_merge_tables.R
@@ -1,19 +1,20 @@
 
 #' Importe et fusionne les données de tables PostgreSQL
 #'
-#' @description Cette fonction permet d'importer les données d'une table 
-#' PostgreSQL dans une autre table en supprimant les champs absents dans l'une 
+#' @description Cette fonction permet d'importer les données d'une table
+#' PostgreSQL dans une autre table en supprimant les champs absents dans l'une
 #' ou l'autre des tables.
 #'
+#' @param host Hôte de la base de données PostgreSQL.
 #' @param database Nom de la base de données.
-#' @param source_table Le nom de la table source à partir de laquelle importer 
+#' @param source_table Le nom de la table source à partir de laquelle importer
 #' les données.
 #' @param source_schema Le schéma de la table source.
 #' @param target_table Le nom de la table cible où les données seront fusionnées.
 #' @param target_schema Le schéma de la table cible.
 #' @param role Le rôle du propriétaire de la table.
 #'
-#' @return TRUE si l'importation et la fusion des données se sont déroulées 
+#' @return TRUE si l'importation et la fusion des données se sont déroulées
 #' avec succès.
 #'
 #' @importFrom datalibaba connect_to_db
@@ -22,59 +23,79 @@
 #' @export
 #' @examples
 #' \dontrun{
+#' # Créer une table dummy dans le schéma collectr de la base production
+#' create_dummy(host = "localhost",
+#'              database = "collectr",
+#'              schema = "public",
+#'              table = "source",
+#'              pk = "id",
+#'              role = "runner")
+#' # Créer une table dummy dans le schéma collectr de la base production
+#' create_dummy(host = "localhost",
+#'              database = "collectr",
+#'              schema = "public",
+#'              table = "target",
+#'              pk = "id",
+#'              id_range = "6:10",
+#'              role = "runner")
 #' # Utilisation de la fonction import_and_merge_tables()
-#' import_and_merge_tables(database = "si_eau",
-#'                         source_table = "nitrate_data_analyse_ars_2023",
-#'                         source_schema = "nitrates",
-#'                         target_table = "nitrate_data_analyse_ars_test",
-#'                         target_schema = "nitrates",
-#'                         role = "admin")
+#' import_and_merge_tables(host = "localhost",
+#'                         database = "collectr",
+#'                         source_table = "source",
+#'                         source_schema = "public",
+#'                         target_table = "target",
+#'                         target_schema = "public",
+#'                         role = "runner")
 #' }
-import_and_merge_tables <- function(database, source_table, source_schema, 
+import_and_merge_tables <- function(host, database, source_table, source_schema,
                                     target_table, target_schema, role) {
   # Se connecter à la base de données PostgreSQL
-  connexion <- datalibaba::connect_to_db(db = database, 
-                                         user = role, 
+  connexion <- datalibaba::connect_to_db(db = database,
+                                         user = role,
+                                         server = host,
                                          ecoSQL = FALSE)
-  
+
   # Vérifier si la connexion est une connexion PostgreSQL valide
   if (!inherits(connexion, "PostgreSQLConnection")) {
     stop("La connexion fournie n\'est pas une connexion PostgreSQL valide.")
   }
   # Vérifier si les tables source et cible existent dans les schémas respectifs
-  if (!table_exists(database = database, schema = source_schema, table = source_table, role = role)) {
+  if (!table_exists(host = host, database = database, schema = source_schema,
+                    table = source_table, role = role)) {
     stop("La table source sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.")
   }
-  if (!table_exists(database = database, schema = target_schema, table =  target_table, role = role)) {
+  if (!table_exists(host = host, database = database, schema = target_schema,
+                    table =  target_table, role = role)) {
     stop("La table cible sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.")
   }
 
   # Obtenir la liste des colonnes communes entre la table source et la table cible
   existing_source_result <- DBI::dbGetQuery(
-    connexion, 
-    paste0("SELECT column_name FROM information_schema.columns 
-           WHERE table_schema = '", source_schema,"' 
+    connexion,
+    paste0("SELECT column_name FROM information_schema.columns
+           WHERE table_schema = '", source_schema,"'
            AND table_name = '", source_table, "';"))
   existing_target_result <- DBI::dbGetQuery(
-    connexion, 
-    paste0("SELECT column_name FROM information_schema.columns 
-           WHERE table_schema = '", target_schema,"' 
+    connexion,
+    paste0("SELECT column_name FROM information_schema.columns
+           WHERE table_schema = '", target_schema,"'
            AND table_name = '", target_table, "';"))
   source_columns <- existing_source_result$column_name
   target_columns <- existing_target_result$column_name
   common_columns <- intersect(source_columns, target_columns)
-  
+
   # Générer la requête d'insertion en sélectionnant uniquement les colonnes communes
   insert_query <- paste0("INSERT INTO ", target_schema, ".", target_table, " (",
                         paste(common_columns, collapse = ", "), ")",
                         " SELECT ", paste(common_columns, collapse = ", "),
                         " FROM ", source_schema, ".", source_table)
-  
+
   # Insérer les données dans la table cible
   DBI::dbExecute(connexion, insert_query)
 
   # Fermer la connexion à la base de données
   DBI::dbDisconnect(connexion)
-  
+
+  # Retourner TRUE en cas de succès
   return(TRUE)
 }
diff --git a/dev/0-dev_history.Rmd b/dev/0-dev_history.Rmd
index e545891433edfc668916a66d259352e51fba7b4a..9309763eb6a8369ff7c574f25bdefd434e024582 100644
--- a/dev/0-dev_history.Rmd
+++ b/dev/0-dev_history.Rmd
@@ -83,6 +83,7 @@ usethis::use_r("download_and_extract_wfs")
 usethis::use_r("format_colnames")
 usethis::use_r("format_filepath")
 usethis::use_r("get_variable_completion_rate")
+usethis::use_r("import_and_merge_tables")
 usethis::use_r("import_geopackage")
 usethis::use_r("import_shapefile")
 usethis::use_r("import_xlsx")
@@ -105,6 +106,7 @@ usethis::use_test("download_and_extract_wfs")
 usethis::use_test("format_colnames")
 usethis::use_test("format_filepath")
 usethis::use_test("get_variable_completion_rate")
+usethis::use_test("import_and_merge_tables")
 usethis::use_test("import_geopackage")
 usethis::use_test("import_shapefile")
 usethis::use_test("import_xlsx")
diff --git a/man/create_dummy.Rd b/man/create_dummy.Rd
index 20c3bcd7277e296b8b888a0c1d4405ade4cebb0d..0fb84ed23786d3895f9e0eb25d303cb79b4fd0c4 100644
--- a/man/create_dummy.Rd
+++ b/man/create_dummy.Rd
@@ -4,7 +4,7 @@
 \alias{create_dummy}
 \title{Crée une table de test dans une base de données PostgreSQL}
 \usage{
-create_dummy(host, database, schema, table, pk = NULL, role)
+create_dummy(host, database, schema, table, pk = NULL, id_range = "1:5", role)
 }
 \arguments{
 \item{host}{Hôte de la base de données PostgreSQL.}
@@ -17,6 +17,8 @@ create_dummy(host, database, schema, table, pk = NULL, role)
 
 \item{pk}{Clé primaire de la table à créer. NULL par défaut.}
 
+\item{id_range}{Plage de 5 valeurs de l'identifiant id. 1:5 par défaut.}
+
 \item{role}{Nom du rôle (utilisateur) pour se connecter à la base de données.}
 }
 \value{
@@ -33,6 +35,8 @@ create_dummy(host = "localhost",
              database = "collectr",
              schema = "public",
              table = "dummy",
+             pk = NULL,
+             id_range = "1:5"
              role = "runner")
 }
 }
diff --git a/man/import_and_merge_tables.Rd b/man/import_and_merge_tables.Rd
index 1c324093ec206cfd423c7f0da66654635beb0150..274bad8e5797a08cca18c463f2d981b459bcd522 100644
--- a/man/import_and_merge_tables.Rd
+++ b/man/import_and_merge_tables.Rd
@@ -5,6 +5,7 @@
 \title{Importe et fusionne les données de tables PostgreSQL}
 \usage{
 import_and_merge_tables(
+  host,
   database,
   source_table,
   source_schema,
@@ -14,6 +15,8 @@ import_and_merge_tables(
 )
 }
 \arguments{
+\item{host}{Hôte de la base de données PostgreSQL.}
+
 \item{database}{Nom de la base de données.}
 
 \item{source_table}{Le nom de la table source à partir de laquelle importer
@@ -38,12 +41,28 @@ ou l'autre des tables.
 }
 \examples{
 \dontrun{
+# Créer une table dummy dans le schéma collectr de la base production
+create_dummy(host = "localhost",
+             database = "collectr",
+             schema = "public",
+             table = "source",
+             pk = "id",
+             role = "runner")
+# Créer une table dummy dans le schéma collectr de la base production
+create_dummy(host = "localhost",
+             database = "collectr",
+             schema = "public",
+             table = "target",
+             pk = "id",
+             id_range = "6:10",
+             role = "runner")
 # Utilisation de la fonction import_and_merge_tables()
-import_and_merge_tables(database = "si_eau",
-                        source_table = "nitrate_data_analyse_ars_2023",
-                        source_schema = "nitrates",
-                        target_table = "nitrate_data_analyse_ars_test",
-                        target_schema = "nitrates",
-                        role = "admin")
+import_and_merge_tables(host = "localhost",
+                        database = "collectr",
+                        source_table = "source",
+                        source_schema = "public",
+                        target_table = "target",
+                        target_schema = "public",
+                        role = "runner")
 }
 }
diff --git a/tests/testthat/test-import_and_merge_tables.R b/tests/testthat/test-import_and_merge_tables.R
new file mode 100644
index 0000000000000000000000000000000000000000..abf663e8fbb38a29034a59d327b95aa11107746c
--- /dev/null
+++ b/tests/testthat/test-import_and_merge_tables.R
@@ -0,0 +1,86 @@
+test_that("import_and_merge_tables works", {
+
+  Sys.setenv(user_runner="runner")
+  Sys.setenv(pwd_runner=Sys.getenv("BDD_RUNNER_PWD"))
+
+  # Créer une table source dans le schéma public de la base collectr
+  create_dummy(host = "localhost",
+               database = "collectr",
+               schema = "public",
+               table = "source",
+               pk = "id",
+               role = "runner")
+  # Créer une table target dans le schéma public de la base collectr
+  create_dummy(host = "localhost",
+               database = "collectr",
+               schema = "public",
+               table = "target",
+               pk = "id",
+               id_range = "6:10",
+               role = "runner")
+
+  expect_true(import_and_merge_tables(
+    host = "localhost",
+    database = "collectr",
+    source_table = "source",
+    source_schema = "public",
+    target_table = "target",
+    target_schema = "public",
+    role = "runner"
+  ))
+})
+
+test_that("import_and_merge_tables fails", {
+
+  Sys.setenv(user_runner="runner")
+  Sys.setenv(pwd_runner=Sys.getenv("BDD_RUNNER_PWD"))
+
+  # Créer une table source dans le schéma public de la base collectr
+  create_dummy(host = "localhost",
+               database = "collectr",
+               schema = "public",
+               table = "source",
+               pk = "id",
+               role = "runner")
+  # Créer une table target dans le schéma public de la base collectr
+  create_dummy(host = "localhost",
+               database = "collectr",
+               schema = "public",
+               table = "target",
+               pk = "id",
+               id_range = "6:10",
+               role = "runner")
+
+  expect_error(import_and_merge_tables(
+    host = "localhost",
+    database = "collectr",
+    source_table = "ghost",
+    source_schema = "public",
+    target_table = "target",
+    target_schema = "public",
+    role = "runner"
+  ), "La table source sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.")
+
+  expect_error(import_and_merge_tables(
+    host = "localhost",
+    database = "collectr",
+    source_table = "source",
+    source_schema = "public",
+    target_table = "ghost",
+    target_schema = "public",
+    role = "runner"
+  ), "La table cible sp\u00e9cifi\u00e9e n\'existe pas dans la base de donn\u00e9es.")
+
+  skip_on_ci()
+  mockery::stub(import_and_merge_tables, "datalibaba::connect_to_db", function(...) "InvalidConnection")
+
+  expect_error(import_and_merge_tables(
+    host = "localhost",
+    database = "collectr",
+    source_table = "source",
+    source_schema = "public",
+    target_table = "target",
+    target_schema = "public",
+    role = "runner"
+  ), "La connexion fournie n\'est pas une connexion PostgreSQL valide.")
+})
diff --git a/vignettes/database-utils.Rmd b/vignettes/database-utils.Rmd
index 7f177bff99e42f22fc7d69710f7223be297608db..72bf05552e721ecb62c906ae623f76228b90880a 100644
--- a/vignettes/database-utils.Rmd
+++ b/vignettes/database-utils.Rmd
@@ -41,11 +41,13 @@ create_schema(host = "localhost",
 ```{r examples-create_dummy, eval=FALSE}
 #' \dontrun{
 # Création d'une table dummy dans le schéma public de la base collectr
-collectr::create_dummy(host = "localhost",
-                       database = "collectr", 
-                       schema = "public", 
-                       table = "dummy", 
-                       role = "runner")
+create_dummy(host = "localhost",
+             database = "collectr", 
+             schema = "public", 
+             table = "dummy",
+             pk = "id",
+             id_range = "1:5",
+             role = "runner")
 #' }
 ```
 
diff --git a/vignettes/write-data.Rmd b/vignettes/write-data.Rmd
index fc81166dbe14ae28d7cbde3118c335456d6d8161..3dc8cae0865834d9cc97be434a080b6d38f04219 100644
--- a/vignettes/write-data.Rmd
+++ b/vignettes/write-data.Rmd
@@ -83,13 +83,29 @@ insert_into_table(database = "si_eau",
 
 ```{r examples-import_and_merge_tables, eval=FALSE}
 #' \dontrun{
+# Créer une table source dans le schéma public de la base collectr
+create_dummy(host = "localhost",
+             database = "collectr",
+             schema = "public",
+             table = "source",
+             pk = "id",
+             role = "runner")
+# Créer une table target dans le schéma public de la base collectr
+create_dummy(host = "localhost",
+             database = "collectr",
+             schema = "public",
+             table = "target",
+             pk = "id",
+             id_range = "6:10",
+             role = "runner")
 # Utilisation de la fonction import_and_merge_tables()
-import_and_merge_tables(database = "si_eau",
-                        source_table = "nitrate_data_analyse_ars_2023",
-                        source_schema = "nitrates",
-                        target_table = "nitrate_data_analyse_ars_test",
-                        target_schema = "nitrates",
-                        role = "admin")
+import_and_merge_tables(host = "localhost",
+                        database = "collectr",
+                        source_table = "source",
+                        source_schema = "public",
+                        target_table = "target",
+                        target_schema = "public",
+                        role = "runner")
 #' }
 ```