diff --git a/script/admin_express.R b/script/admin_express.R
new file mode 100644
index 0000000000000000000000000000000000000000..626120f9805b76278f9741c96e7f960f5e7e8576
--- /dev/null
+++ b/script/admin_express.R
@@ -0,0 +1,33 @@
+# Functions
+
+# Data
+input_dir = geau::current_version("data-common/data/IGN/ADMIN-EXPRESS/version")
+
+commune = sf::st_read(file.path(input_dir, "COMMUNE.shp"))
+commune = sf::st_drop_geometry(commune)
+commune = commune[c("NOM", "NOM_M", "INSEE_COM", "INSEE_DEP", "INSEE_REG", "SIREN_EPCI")]
+names(commune) = c("commune_name", "commune_nam_cap", "commune", "departement", "region", "epci")
+rownames(commune) = commune[["commune"]]
+commune = commune[geau::so_ii_scope, ]
+
+commune_so_ii = read.csv2(geau::current_version("data-common/so-ii/commune"))
+commune_so_ii = merge(commune_so_ii[c("commune", "syble", "symbo")], commune)
+
+epci = sf::st_read(file.path(input_dir, "EPCI.shp"))
+epci = sf::st_drop_geometry(epci)
+names(epci) = c("id", "epci", "epci_name", "epci_nature")
+rownames(epci) = epci[["epci"]]
+epci = epci[unique(commune[["epci"]]), c("epci", "epci_name", "epci_nature")]
+
+# Save
+today = Sys.Date()
+write.csv2(
+    commune_so_ii,
+    sprintf("data-common/so-ii/commune/commune-%s.csv", today),
+    row.names = FALSE
+)
+write.csv2(
+    epci,
+    sprintf("data-common/so-ii/epci/epci-%s.csv", today),
+    row.names = FALSE
+)
\ No newline at end of file