1  Description de l’enquête

WarningTravail de vérification en cours

Les résultats présentés ci-dessous sont provisoires, et sont susceptibles de faire l’objet de corrections.

1.1 Contexte et objectifs

Les Observatoires Ruraux (OR) de Madagascar sont un dispositif d’enquête longitudinale auprès de ménages ruraux, mis en place à partir de 1995 dans le cadre du réseau des observatoires ruraux coordonné par l’IRD et l’INSTAT, puis le Ministère de l’agriculture. Deux OR font l’objet de cette campagne d’enquête en 2025 :

  • Marovoay , situé dans la région Boeny, dans le district de Marovoay. Marovoay constitue le deuxième pôle rizicole du pays, avec une production reposant sur l’irrigation par les eaux du fleuve Betsiboka. L’observatoire de Marovoay est situé dans la plaine alluviale du fleuve Betsiboka, au nord-ouest de Madagascar. La zone d’enquête s’organise autour de quatre fokontany — Ampijoroa et Maroala sur la rive gauche, Bepako et Madiromiongana sur la rive droite — séparés par le fleuve. La proximité du Parc national d’Ankarafantsika, dont les limites ont été étendues en 2002, confère à cette zone un intérêt particulier pour l’étude des interactions entre conservation et développement rural. L’économie locale repose principalement sur la riziculture irriguée, complétée par l’élevage bovin et les cultures de rente.
  • Alaotra, situé dans la région Alaotra-Mangoro, dans les districts d’Ambatondrazaka et d’Amparafaravola. L’Alaotra est le premier grenier à riz de Madagascar, caractérisé par de vastes plaines irriguées et des périmètres aménagés. L’observatoire de l’Alaotra se situe dans la cuvette du lac Alaotra, le plus grand lac de Madagascar, au centre-est de l’île. La zone d’enquête couvre sept fokontany répartis dans les districts d’Ambatondrazaka et d’Amparafaravola : Avaradrano, Feramanga Atsimo et Mangabe au sud du lac, Analamiranga, Maritampona, Ambohidrony et Ambatomanga à l’ouest. Le lac Alaotra est une nouvelle aire protégée établie temporairement en 2007, puis définitivement en 2015. Il est entouré de marais et de zones humides qui abritent des espèces endémiques. Premier bassin rizicole du pays, la région est aussi caractérisée par une pression foncière croissante et une dynamique de déforestation des bassins versants.

Ces enquêtes d’observatoires ruraux ont été menées de manière régulière entre 1995 et 2014 (Marovoay) et 1999 et 2014 (Alaotra), avec une seule interruption l’année 2009 en raison de la crise politique qui a secoué le pays. La campagne 2025, réalisée par le projet BETSAKA, renoue avec ce suivi après une interruption de plus de dix ans. L’enquête conserve les instruments et la méthodologie des campagnes antérieures, tout en reprenant des ajustements faits dans le cadre de l’observatoire du Makay en 2022 et 2024, et en les adaptant au contexte actuel.

Les principales modifications du questionnaire concernent : - la suppression du module dédié aux dépenses, qui était très long à administrer et qui avait peu été exploité dans le passé ; - l’introduction de nouveaux modules sur les événements climatiques extrêmes, la sécurité alimentaire, les stratégies d’adaptation au changement climatique.

La période de référence couvre les douze mois précédant l’interview, soit du 1er octobre 2024 au 30 septembre 2025.

Note méthodologique. Après plus de dix ans d’interruption (la dernière campagne régulière date de 2014), la reconstitution du panel de ménages constitue un défi majeur. Le suivi longitudinal est affecté par l’attrition (décès, migration, éclatement des ménages), ce qui a conduit à compléter le panel historique par un nouveau tirage aléatoire. Les comparaisons inter-temporelles doivent donc être interprétées avec prudence, en tenant compte de ce renouvellement partiel de l’échantillon. Un chapitre d’approfondissement est consacré à cette question, voir Chapter 11.

1.2 Méthodologie

L’enquête reprend le protocole des campagnes antérieures des Observatoires Ruraux. Le questionnaire ménage couvre l’ensemble des dimensions socio-économiques : démographie, habitat, activités agricoles et non agricoles, foncier, revenus, sécurité alimentaire, environnement et événements climatiques.

Les unités d’observation sont les ménages résidant dans les hameaux échantillonnés. L’échantillon de 2025 vise à reconstituer autant que possible le panel de ménages suivis lors des campagnes précédentes, complété par de nouveaux ménages en remplacement de ceux ayant quitté la zone ou disparus.

Les enquêteurs ont été formés par les superviseurs avant le déploiement sur le terrain. La saisie des données a été réalisée à l’aide de masques de saisie dédiés.

Note

Le protocole éthique de l’enquête a fait l’objet d’une approbation. Il est présenté en annexe du rapport.

1.3 Localisation des sites enquêtés

Les coordonnées GPS des hameaux enquêtés ont été relevées lors de la campagne. La carte ci-dessous présente la localisation approximative de chaque fokontany, calculée comme le centroïde des hameaux qui le composent.

Les deux observatoires se situent dans le nord-ouest (Marovoay) et le centre-est (Alaotra) de Madagascar.

Code
# --- Centroïdes des fokontany (moyennes des coordonnées GPS des hameaux) ---
# Les coordonnées individuelles des hameaux ne sont pas diffusées pour des
# raisons de confidentialité. Les centroïdes ci-dessous ont été calculés à
# partir du fichier :
#   documentation/Coordonnées_GPS_OR_Alaotra_Marovoay_2025.ods
# Code original de calcul (commenté) :
# gps_alaotra  <- read_ods(
#   "documentation/Coordonnées_GPS_OR_Alaotra_Marovoay_2025.ods",
#   sheet = "Alaotra 2025"
# )
# gps_marovoay <- read_ods(
#   "documentation/Coordonnées_GPS_OR_Alaotra_Marovoay_2025.ods",
#   sheet = "Marovoay 2025"
# )
# parse_dms <- function(dms_str) {
#   s <- str_replace_all(dms_str, "\\n", " ")
#   s <- str_replace_all(s, "[\"\u201d\u2033]", "'")
#   pattern <- "(\\d+)[°](\\d+)'([\\d.]+)'?\\s*([NS])\\s+(\\d+)[°](\\d+)'([\\d.]+)'?\\s*([EW])"
#   m <- str_match(s, pattern)
#   if (is.na(m[1])) return(c(lat = NA_real_, lon = NA_real_))
#   lat <- as.numeric(m[2]) + as.numeric(m[3]) / 60 + as.numeric(m[4]) / 3600
#   if (m[5] == "S") lat <- -lat
#   lon <- as.numeric(m[6]) + as.numeric(m[7]) / 60 + as.numeric(m[8]) / 3600
#   if (m[9] == "W") lon <- -lon
#   c(lat = lat, lon = lon)
# }
# coords_alaotra <- gps_alaotra |>
#   rename(Localisation = 5) |> rowwise() |>
#   mutate(coords = list(parse_dms(Localisation)),
#          lat = coords[["lat"]], lon = coords[["lon"]]) |>
#   ungroup() |> select(Hameaux, Fokontany, lat, lon) |>
#   mutate(Hameaux = str_replace_all(Hameaux, "\\n", " ") |> str_squish(),
#          Observatory = "Alaotra") |> filter(!is.na(lat))
# parse_marovoay <- function(gps_str) {
#   s <- str_replace_all(gps_str, "\\n", " ")
#   lat_match <- str_match(s, "Latitude\\s+(-?[\\d.]+)")
#   lon_match <- str_match(s, "Longitude\\s+(-?[\\d.]+)")
#   c(lat = as.numeric(lat_match[2]), lon = as.numeric(lon_match[2]))
# }
# coords_marovoay <- gps_marovoay |>
#   rename(GPS = `Coordonnées GPS`) |> rowwise() |>
#   mutate(coords = list(parse_marovoay(GPS)),
#          lat = coords[["lat"]], lon = coords[["lon"]]) |>
#   ungroup() |> select(Hameaux, Fokontany, lat, lon) |>
#   mutate(Observatory = "Marovoay") |> filter(!is.na(lat))
# all_coords <- bind_rows(coords_alaotra, coords_marovoay)
# fokontany_centroids <- all_coords |>
#   summarise(lat = mean(lat), lon = mean(lon), n_hameaux = n(),
#             .by = c(Observatory, Fokontany))

fokontany_centroids <- tribble(
  ~Observatory, ~Fokontany,           ~lat,       ~lon, 
  "Alaotra",    "Avaradrano",       -17.805414, 48.469958, 
  "Alaotra",    "Feramanga Atsimo", -17.844153, 48.373383,  
  "Alaotra",    "Mangabe",          -17.879586, 48.405244,  
  "Alaotra",    "Analamiranga",     -17.572375, 48.200017,  
  "Alaotra",    "Maritampona",      -17.603500, 48.207639,  
  "Alaotra",    "Ambohidrony",      -17.729175, 48.208611,  
  "Alaotra",    "Ambatomanga",      -17.741178, 48.200647,  
  "Marovoay",   "Ampijoroa",        -16.233414, 46.477984,  
  "Marovoay",   "Maroala",          -16.228857, 46.539738, 
  "Marovoay",   "Madiromiongana",   -16.086480, 46.749270, 
  "Marovoay",   "Bepako",           -16.163712, 46.658402
)

# Données WDPA
# On télécharge seulement si pas présentes localement
if (!(dir.exists("data/wdpa/"))) {
  wdpa_mdg <- wdpa_fetch("MDG", download_dir = "data/wdpa", wait = TRUE)
  write_rds(wdpa_mdg, "data/wdpa/MDG_protected_areas.rds") 
  wdpa_mdg <- read_rds("data/wdpa/MDG_protected_areas.rds") |>
    filter(str_detect(DESIG, "Ramsar", negate = TRUE)) |>
    filter(str_detect(DESIG, "UNESCO", negate = TRUE)) 
} else {
  wdpa_mdg <- read_rds("data/wdpa/MDG_protected_areas.rds")
}

 wdpa_mdg <- wdpa_mdg  |>
    filter(str_detect(DESIG, "Ramsar", negate = TRUE)) |>
    filter(str_detect(DESIG, "UNESCO", negate = TRUE)) 

if (!file.exists("data/alaotra_protected_area.geojson" )) {
  wdpa_mdg |>
  filter(
    str_detect(NAME, "Alaotra") & 
      str_detect(DESIG, "Ramsar", negate = TRUE)
  ) |> 
    st_write("data/alaotra_protected_area.geojson", delete_dsn = TRUE)

}

if (!file.exists("data/ankarafantsika_protected_area.geojson" )) {
  wdpa_mdg |>
  filter(
    str_detect(NAME, "Ankarafantsika") & 
      str_detect(DESIG, "Ramsar", negate = TRUE)
  ) |> 
    st_write("data/ankarafantsika_protected_area.geojson", delete_dsn = TRUE)
}

pa_alaotra <- st_read("data/alaotra_protected_area.geojson", quiet = TRUE)
pa_ankarafantsika <- st_read("data/ankarafantsika_protected_area.geojson", 
  quiet = TRUE)

# --- Filter centroids and protected areas by profile ---
fokontany_centroids <- filter_for_profile(fokontany_centroids)

# --- Carte interactive avec tmap ---
foko_sf <- st_as_sf(fokontany_centroids, coords = c("lon", "lat"), crs = 4326)

# Select protected areas relevant to the active profile
if (REPORT_MODE$is_consolidated) {
  pa_display <- bind_rows(pa_alaotra, pa_ankarafantsika)
} else if (REPORT_MODE$observatory == "Alaotra") {
  pa_display <- pa_alaotra
} else {
  pa_display <- pa_ankarafantsika
}

# Expand bounding box for better framing of centroids
bb_expanded <- tmaptools::bb(foko_sf, ext = 1.3)

if (knitr::is_html_output()) {
  tmap_mode("view")
} else {
  tmap_mode("plot")
}
tm_shape(foko_sf, bbox = bb_expanded) +
  tm_dots(
    fill = "Observatory",
    fill.scale = tm_scale_categorical(
      values = c("Alaotra" = "#E41A1C", "Marovoay" = "#377EB8")
    ),
    fill.legend = tm_legend(title = "Observatoire"),
    size = 1,
    id = "Fokontany",
    popup.vars = c("Observatoire" = "Observatory", "Fokontany" = "Fokontany")
  ) +
    tm_shape(pa_display |> mutate(`Couche` = "Aires protégées")) +
    tm_borders(
      col = "Couche",
      col.scale = tm_scale_categorical(values = c("Aires protégées" = "lightgreen")),
      col.legend = tm_legend(title = ""),
      lwd = 2
    ) +
  tm_basemap("OpenStreetMap") +
  tm_scalebar(position = c("left", "bottom"))

Localisation approximative des fokontany enquêtés (centroïde des hameaux)

1.4 Ménages enquêtés

Code
res_deb <- read_dta("data/ROS_MDG_microdata/2025/res_deb.dta")
res_m_a <- read_dta("data/ROS_MDG_microdata/2025/res_m_a.dta")

res_deb <- res_deb |>
  mutate(
    j0 = as.character(j0),
    Observatory = case_when(
      j0 == "3"  ~ "Marovoay",
      j0 == "21" ~ "Alaotra",
      TRUE       ~ j0
    ),
    j4bis = case_when(
      str_starts(str_to_lower(j4), "bepako") ~ "Bepako",
      str_starts(str_to_lower(j4), "ampijoroa") ~ "Ampijoroa",
      str_starts(str_to_lower(j4), "maroala") ~ "Maroala",
      str_starts(str_to_lower(j4), "madiromiongana") ~ "Madiromiongana",
      TRUE ~ j4
    )
  )

res_m_a <- res_m_a |>
  left_join(res_deb |> select(j5, Observatory), by = "j5")

Au total, 1026 ménages ont été enquêtés : 519 à Marovoay et 507 à Alaotra. Voir Table 2.1.

Code
tab <- res_deb |>
  group_by(Observatory) |>
  summarise(n_menages = n_distinct(j5), .groups = "drop") |>
  left_join(
    res_m_a |>
      group_by(Observatory) |>
      summarise(n_individus = n(), .groups = "drop"),
    by = "Observatory"
  ) |>
  arrange(desc(n_menages)) |>
  mutate(
    Pourcent_menages   = round(n_menages / sum(n_menages) * 100, 1),
    Pourcent_individus = round(n_individus / sum(n_individus) * 100, 1)
  )

tab <- tab |>
  add_row(
    Observatory        = "Ensemble",
    n_menages          = sum(tab$n_menages),
    Pourcent_menages   = 100,
    n_individus        = sum(tab$n_individus),
    Pourcent_individus = 100
  )

gt(tab) |>
  fmt_number(columns = c(n_menages, n_individus), sep_mark = " ", decimals = 0) |>
  fmt_number(columns = c(Pourcent_menages, Pourcent_individus), decimals = 1) |>
  cols_label(
    Observatory        = "Observatoire",
    n_menages          = "Ménages",
    Pourcent_menages   = "% ménages",
    n_individus        = "Individus",
    Pourcent_individus = "% individus"
  ) |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#B0E0E6")),
    locations = cells_body(rows = Observatory == "Ensemble")
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 1.1: Répartition des ménages et des individus selon les observatoires
Observatoire Ménages Individus % ménages % individus
Marovoay 519 2 297 50.6 53.8
Alaotra 507 1 975 49.4 46.2
Ensemble 1 026 4 272 100.0 100.0
Source : Enquête auprès des OR 2025

1.4.1 Dénombrement et taux de sondage

Le dénombrement préalable à l’enquête a recensé l’ensemble des ménages résidant dans les hameaux échantillonnés. Le Table 1.2 confronte le nombre de ménages dénombrés au nombre de ménages effectivement enquêtés. Le taux de sondage global est de l’ordre de 18 %.

Code
# --- Lecture et nettoyage du fichier de dénombrement ---
al_raw <- read_excel("data/Synthèse Dénombrement OR 2025.xlsx", sheet = "ALAOTRA ")
mr_raw <- read_excel("data/Synthèse Dénombrement OR 2025.xlsx", sheet = "MAROVOAY ")

clean_enum <- function(df, obs_name) {
  df |>
    mutate(`Nbr Mén E` = as.character(`Nbr Mén E`)) |>
    filter(!(Fokontany %in% "TOTAL") | is.na(Fokontany)) |>
    fill(Fokontany, .direction = "down") |>
    filter(!is.na(`Nbr toit D`)) |>
    mutate(Observatory = obs_name)
}

enum_all <- bind_rows(
  clean_enum(al_raw, "Alaotra"),
  clean_enum(mr_raw, "Marovoay")
)

enum_obs <- enum_all |>
  summarise(
    Toits = sum(`Nbr toit D`, na.rm = TRUE),
    Ménages_dénombrés = sum(`Nbr ménage D`, na.rm = TRUE),
    .by = Observatory
  ) |>
  left_join(
    res_deb |> count(Observatory, name = "Ménages_enquêtés"),
    by = "Observatory"
  ) |>
  mutate(`Taux de sondage (%)` = round(Ménages_enquêtés / Ménages_dénombrés * 100, 1))

enum_obs |>
  gt() |>
  fmt_number(columns = c(Toits, Ménages_dénombrés, Ménages_enquêtés),
             sep_mark = " ", decimals = 0) |>
  fmt_number(columns = `Taux de sondage (%)`, decimals = 1) |>
  cols_label(
    Observatory = "Observatoire",
    Toits = "Toits dénombrés",
    Ménages_dénombrés = "Ménages dénombrés",
    Ménages_enquêtés = "Ménages enquêtés"
  ) |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_source_note(
    source_note = md("**Source : Synthèse Dénombrement OR 2025 & Enquête auprès des OR 2025**")
  )
Table 1.2: Dénombrement et taux de sondage par observatoire
Observatoire Toits dénombrés Ménages dénombrés Ménages enquêtés Taux de sondage (%)
Alaotra 6 142 6 210 507 8.2
Marovoay 2 370 2 506 519 20.7
Source : Synthèse Dénombrement OR 2025 & Enquête auprès des OR 2025

1.4.2 Répartition par hameau

Le Table 1.3 détaille le nombre de ménages enquêtés dans chacun des hameaux, regroupés par site au sein de chaque observatoire.

Code
tab_ham <- res_deb |>
  group_by(Observatory, j4bis) |>
  summarise(n = n_distinct(j5), .groups = "drop_last") |>
  mutate(Percent = round(n / sum(n) * 100, 1)) |>
  ungroup()

totals <- tab_ham |>
  group_by(Observatory) |>
  summarise(j4bis = "Ensemble", n = sum(n), Percent = 100)

tab_ham <- bind_rows(tab_ham, totals) |>
  arrange(Observatory, desc(j4bis != "Ensemble"), desc(n))

gt(tab_ham, groupname_col = "Observatory") |>
  fmt_number(columns = Percent, decimals = 1) |>
  cols_label(j4bis = "Hameau", n = "Ménages", Percent = "% obs.") |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#B0E0E6")),
    locations = cells_row_groups()
  ) |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#CECECE")),
    locations = cells_body(rows = j4bis == "Ensemble")
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 1.3: Répartition des ménages enquêtés par hameau
Hameau Ménages % obs.
Alaotra
Avaradrano 90 17.8
Feramanga Atsimo 89 17.6
Mangabe 73 14.4
Ambatomanga 68 13.4
Ambodivoara 58 11.4
Ambohidrony 52 10.3
Analamiranga 46 9.1
Ambatoharanana 31 6.1
Ensemble 507 100.0
Marovoay
Ampijoroa 143 27.6
Madiromiongana 137 26.4
Bepako 123 23.7
Maroala 116 22.4
Ensemble 519 100.0
Source : Enquête auprès des OR 2025

1.5 Déroulement de l’enquête

1.5.1 Période de collecte

Les entretiens se sont déroulés entre début octobre et mi-novembre 2025. Un entretien isolé a été réalisé à Marovoay le 3 septembre. Le Figure 1.1 présente l’évolution cumulée du nombre d’entretiens réalisés à partir du 1er octobre 2025.

Code
chrono <- res_deb |>
  mutate(
    j14_str = sprintf("%08d", as.integer(j14)),
    date_interview = dmy(j14_str)
  ) |>
  filter(!is.na(date_interview)) |>
  count(Observatory, date_interview) |>
  arrange(Observatory, date_interview) |>
  mutate(cumul = cumsum(n), .by = Observatory)

ggplot(chrono, aes(x = date_interview, y = cumul, color = Observatory)) +
  geom_line(linewidth = 0.8) +
  geom_point(size = 1.5) +
  coord_cartesian(xlim = c(as.Date("2025-10-01"), NA)) +
  scale_x_date(
    date_breaks = "1 week", date_labels = "%d %b",
    expand = expansion(mult = c(0.01, 0.01))
  ) +
  labs(x = NULL, y = "Nombre cumulé d'entretiens", color = "Observatoire") +
  theme_ror() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
Figure 1.1: Fréquences cumulées des entretiens par observatoire (à partir du 1er octobre 2025)
Code
res_deb |>
  mutate(
    j14_str = sprintf("%08d", as.integer(j14)),
    date_interview = dmy(j14_str)
  ) |>
  filter(!is.na(date_interview)) |>
  group_by(Observatory) |>
  summarise(
    Début = min(date_interview, na.rm = TRUE),
    Fin   = max(date_interview, na.rm = TRUE),
    `Jours d'enquête` = n_distinct(date_interview),
    Ménages = n(),
    .groups = "drop"
  ) |>
  gt() |>
  cols_label(Observatory = "Observatoire") |>
  fmt_date(columns = c(Début, Fin), date_style = "day_month_year") |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 1.4: Période de collecte par observatoire
Observatoire Début Fin Jours d'enquête Ménages
Alaotra 1 October 2025 14 November 2025 32 507
Marovoay 3 September 2025 10 November 2025 31 519
Source : Enquête auprès des OR 2025

1.5.2 Équipe d’enquête

L’enquête a mobilisé 20 enquêteurs (10 par observatoire), encadrés par 6 superviseurs (3 par observatoire). La saisie des questionnaires a été assurée par 4 opérateurs. Le Figure 1.2 présente le nombre de questionnaires réalisés par chaque enquêteur (identifié par un code anonyme).

Code
enq <- res_deb |>
  mutate(Enquêteur = paste0("E", sprintf("%02d", j1))) |>
  count(Observatory, Enquêteur)
Code
enq |>
  ror_bar_grouped(x = Enquêteur, y = n, fill = Observatory,
                  y_label = "Questionnaires réalisés",
                  direction = "horizontal", facet = FALSE,
                  show_pct = FALSE)
Figure 1.2: Nombre de questionnaires par enquêteur et observatoire
Code
res_deb |>
  mutate(Superviseur = paste0("S", sprintf("%02d", j3))) |>
  count(Observatory, Superviseur) |>
  pivot_wider(names_from = Observatory, values_from = n, values_fill = 0) |>
  gt() |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 1.5: Nombre de questionnaires supervisés par superviseur
Superviseur Alaotra Marovoay
S01 172 86
S02 166 217
S03 169 216
Source : Enquête auprès des OR 2025
Code
res_deb |>
  mutate(Opérateur = paste0("OP", sprintf("%02d", j2))) |>
  count(Opérateur, name = "Questionnaires") |>
  gt() |>
  tab_style(
    style = list(cell_text(weight = "bold"), cell_fill(color = "#DCDCDC")),
    locations = cells_column_labels(columns = everything())
  ) |>
  tab_source_note(source_note = md("**Source : Enquête auprès des OR 2025**"))
Table 1.6: Nombre de questionnaires saisis par opérateur de saisie
Opérateur Questionnaires
OP01 252
OP02 255
OP03 260
OP04 259
Source : Enquête auprès des OR 2025