---
title: "Certificats énergétiques des bâtiments (CECB)"
subtitle: "Nombre de bâtiments certifiés et répartition selon l'étiquette-énergie et la période de construction, Vaud"
lang: fr
# subtitle: "Sous-titre de l'indicateur à insérer ici"
author: "DGE-DIREN"
date: last-modified # Renvoie automatiquement la date de dernière modification du .qmd
params: # ! `open_params_metadata_help()` pour des instructions de remplissage détaillées
fonction: 2 # Valeur numérique : 0=Non-défini/1=Description/2=Orientation/3=Pilotage
nature: 2 # Valeur numérique : 0=Non-défini/1=Actions/2=Effets/3=Impacts
idThematique: 08.05.02.01 # Identifiant selon nomenclature obsind theme/sous-theme/objet/id (p.ex. 08.03.01)
niveauPublication: 2 # Valeur numérique : 0=Non-défini/1=Interne/2=Public. Tout autre choix génère un avertissement
niveauDetail: Canton # Texte libre qui indique le niveau minimal d'agrégation disponible pour l'indicateur (canton, commune, région, installation, véhicule, etc.)
frequenceMAJ: Annuel # Texte libre, idéalement à choisir parmi les codes suivants : mensuel/semestriel/annuel/biannuel/mensuel/tous les x ans/non-défini
moisMAJ: 2 # Valeur numérique : 0=Non-défini/1=Janvier/2=Février, etc.
disponibleDepuis: 2022 # Valeur numérique Année (aaaa) (p.ex. 2000)
personneReference: Steve Ducommun # Prénom+Nom de la personne référente de l'indicateur
mailReference: stat.energie@vd.ch # E-mail ACV (générique ou nominal, se terminant par @vd.ch)
uuid: 1252ec35-7780-48e4-b59a-72191a8cb87e # !NE PAS MODIFIER! Identifiant unique généré automatiquement à la création de la fiche
uuidParent: null # Identifiant(s) unique(s) des indicateurs parents de l'indicateur actuel (format uuid avec séparateur '/' si plusieurs uuid)
uuidEnfant: null # Identifiant(s) unique(s) des indicateurs enfants de l'indicateur actuel (format uuid avec séparateur '/' si plusieurs uuid)
uuidConnexe: null # Identifiant(s) unique(s) des indicateurs connexes à l'indicateur actuel (format uuid avec séparateur '/' si plusieurs uuid)
majCatalogue: 1 # Valeur numérique : 0=Non/1=Oui pour mettre à jour les métadonnées dans le catalogue des indicateurs (connexion au disque partagé ObsInd requise)
format:
html:
other-links: # Copier la structure ci-dessous pour remplacer/ajouter d'autres liens sous la table des matières
- text: Infos statistiques énergie
href: 'https://www.vd.ch/environnement/energie/chiffres-cles-et-statistiques-energie-vaud/'
target: '_blank'
- text: Profil climatique communes
href: 'https://stat-climat-vd.ch/profil-climat/'
target: '_blank'
- text: Direction de l'énergie
href: 'https://www.vd.ch/djes/dge/dge-diren'
target: '_blank'
metadata-files: # Ne pas supprimer !
- assets/format-options.yml
editor_options:
chunk_output_type: console
---
<!-- Les métadonnées ci-dessus doivent être remplies pour chaque fiche. Lorsqu'un champ n'est disponible, il est possible d'écrire "" ou NULL -->
<!-- Aide au remplissage : `obsindVD::open_aide_remplissage_help()` (lancer la ligne de code dans la console) -->
```{r setup}
#| echo: false
#| warning: false
#| message: false
#| results: asis
# version: 1.2.2 (01.09.2026)
# -----------------------------------------------------------------------------
# Ne rien modifier dans ce bloc de code !
# Ce bloc doit être lancé pour charger les métadonnées dans l'environnement !
# -----------------------------------------------------------------------------
# update_model_setup_code() pour mettre à jour ce bloc avec la version du dernier modèle
# Chargement (ou installation) des librairies disponibles sur CRAN
if (!require("pacman")) install.packages("pacman")
pacman::p_load(tidyverse, readxl, glue, gt, DT, ggiraph, scales, ggtext)
# Chargement de la librairie obsindVD privée
# Pour l'installation : suivre les instructions dans le BitBucket : https://dsigit.etat-de-vaud.ch/outils/git/projects/DGE/repos/obsind/
# Si l'accès n'est pas autorisé, faire une demande à l'Observatoire des indicateurs
library(obsindVD)
# Par défaut : ouvrir l'aide obsindVD (supprimer cette ligne si superflu)
open_fiche_quarto_help()
# Vérifie, ajoute et insère des valeurs par défaut pour les métadonnées manquantes (en-tête YAML)
complete_metadata_params()
# Extraction + validation des métadonnées (en-tête YAML)
selected_metadata <- return_selected_metadata()
# Ajout de l'identifiant dans les en-têtes du document html
display_identifiant(value = selected_metadata[['Identifiant thématique']])
```
::: {.callout-tip .narrow icon="false" collapse="true"}
# Métadonnées de l'indicateur
```{r}
# --------------------------------------
# Présentation des métadonnées ----
# --------------------------------------
tidyr::tibble(
`Attribut` = names(selected_metadata),
`Valeur` = selected_metadata
) |>
gt_table_ind()
```
:::
```{r}
# Déterminer la dernière année
an <- 2025
```
```{r}
# ---------------------------------------------------------
# Tableau de synthèse ----
# ---------------------------------------------------------
# Pour de l'aide sur comment remplir ce tableau de synthèse lancer la commande suivante dans la console :
# obsindVD::open_tableau_synthese_help()
# Pour afficher l'aide spécifique à une fonction, ajouter '?' avant l'appel de la fonction :
# ?icon_up()
tableau_synthese <- list(
# Premier indicateur... attention à la structure !
list(
titre_indicateur = "Part des bâtiments ayant un certificat énergétique CECB, Vaud <b>[%]</b>", # Par défaut = titre issu de la métadonnée (en-tête du document)
valeur_2025 = "34.0",
obj_2030 = icon_up(type = "obj"), # valeur numérique OU icônes de flèches
obj_2040 = NA,
obj_2050 = icon_up(type = "obj"),
tendance_observée = icon_up(type = "trend", text = paste0("2019-", an)), # icon_up(), icon_flat(), icon_down()
tendance_évaluée = icon_happy() # icon_meh() # icon_happy(), icon_meh(), icon_sad()
)
# ,
# # Second indicateur... Répliquer la même structure autant de fois que d'indicateurs à afficher dans le tableau de synthèse
# list(
# titre_indicateur = "Autre titre d'indicateur [kWh/hab]",
# valeur_2024 = NA,
# obj_2030 = NA, # valeur numérique OU icônes de flèches
# obj_2040 = icon_up(type = "obj"), # On peut modifier 'Cible non chiffrée' en modifiant l'argument text = "" par exemple pour ne rien afficher
# obj_2050 = 500,
# tendance_observée = icon_up(type = "trend", text = "2020-2024"), # text obligatoire pour type = 'trend'
# tendance_évaluée = icon_happy(tooltip = "Exemple d'info-bulle personnalisé") # 'tooltip' modifie l'info-bulle par défaut
# )
)
# Impression du tableau de synthèse
print_tableau_synthese(tableau_synthese) # Le résultat peut être customisé comme un objet {gt}
```
# Description {#sec-description}
Cet indicateur informe sur le nombre de bâtiments pour lesquels un Certificat énergétique cantonal des bâtiments (CECB) a été effectué, selon l'année de publication du certificat et la période de construction du bâtiment. Il renseigne sur le pourcentage de bâtiments qui disposent d'informations globales sur leur situation énergétique. L’établissement de certificats énergétiques vise à améliorer la transparence sur la performance énergétique des bâtiments anciens et à encourager leur rénovation.
# Cadre de référence {#sec-cadre-reference}
Les objectifs de réduction de la consommation des énergies sont définis dans la Conception cantonale de l’énergie ([CoCEn 2019](https://www.vd.ch/fileadmin/user_upload/themes/environnement/energie/fichiers_pdf/CoCEn_Pub_complete_20190816.pdf)), qui vise notamment à encourager la rénovation du parc immobilier. Ces objectifs s’inscrivent dans le cadre de la [Stratégie énergétique 2050](https://www.bfe.admin.ch/bfe/fr/home/politique/strategie-energetique-2050.html/) et des [Objectifs climatiques de la Confédération](https://www.bafu.admin.ch/fr/strategie-climatique-2050), lesquels prévoient une réduction durable de la consommation d’énergie ainsi que des émissions de CO2 du parc immobilier suisse.
# Graphique {#sec-graphique}
```{r}
# Lecture des DONNEES BRUTES
#-------------------------------------------------------------
# 1 - CECB
#-------------------------------------------------------------
# Lecture des dernières données CECB (année correspondant à "an" ci-dessus)
tryCatch(
expr = {
# Chemin du dossier
dossier <- glue("P:/DIREN/02 PILOTAGE DIREN/02.11 Bases de donnees/CECB/04_extractions_traitees")
# Lister tous les fichiers qui commencent par "CECB-Batiments_certifies_2010-" et contiennent "an" (défini dans le chunk ci-dessus)
fichiers <- list.files(
path = dossier,
pattern = glue("^CECB_traitement_versions_{an}.*\\.xlsx$"),
full.names = TRUE
)
# Extraire la date finale du nom de fichier et garder le plus récent
fichier_sel <- fichiers |>
tibble::enframe(name = NULL, value = "fichier") |>
mutate(
# extraire la date sous forme YYYY-MM-DD
date_fin = str_extract_all(fichier, "\\d{4}-\\d{2}-\\d{2}") |>
purrr::map_chr(~ tail(.x, 1)) |>
as.Date()
) |>
ungroup() |>
arrange(desc(date_fin)) |> # trier par date décroissante
slice(1) |> # garder le premier (plus récent)
pull(fichier) # extraire le chemin complet
cecb_read <- read_xlsx(fichier_sel, guess_max = 10000)|>
janitor::clean_names(case="screaming_snake")
# Sélection uniquement des CECB effectués jusqu'à la dernière année retenue (an 1 = 2022). Enlever les quelques cas qui concernent la nouvelle année (i.e. 2023)
cecb <- cecb_read |>
mutate(EGID = as.character(EGID)) |>
mutate(CECB_AN = year(DATE_DE_MODIFICATION)) |>
filter(CECB_AN <= an) |>
mutate(CECB_OUI = TRUE) |>
mutate(EGID = as.character(EGID)) |>
select(EGID, DATE_DE_MODIFICATION, EVALUATION_ENV_BATIMENT, CECB_OUI, CECB_AN)
# Export du file dans dossier data
# write_delim(cecb,"./data/cecb.csv", delim = ";")
},
error = function(e) stop(paste("Download failed: Il faut vérifier que le doc soit toujours ok", e$message)),
warning = function(w) stop(paste("Download failed: Il faut vérifier que le doc soit toujours ok", w$message))
)
#-------------------------------------------------------------
# 2 - RegEner
#-------------------------------------------------------------
tryCatch(
expr = {
# regener_read <- read_xlsx(glue("P:/DIREN/02 PILOTAGE DIREN/02.11 Bases de donnees/REGENER/04_extractions_traitees/regener_fixe/RegEner_{an}-12-31.xlsx"),
# guess_max = 1e5)
regener_read <- utilsDIREN::load_regener(etat = glue("{an}-12-31"))
# Ne garder les bâtiments qui sont chauffés (retirer les non chauffés)
regener <- regener_read|>
filter(AFF_SIA_1 != 0)
},
error = function(e) stop(paste("Download failed: Il semble qu'il y ait un problème à lire le RegEner", e$message)),
warning = function(w) stop(paste("Download failed: Il semble qu'il y ait un problème à lire le RegEner", w$message))
)
#-------------------------------------------------------------
# 3 - Appariement CECB - RegEner
#-------------------------------------------------------------
regener_cecb <- regener |>
left_join(cecb, join_by(EGID == EGID))|>
mutate(CONSTR_AN = year(GBAUJ))
#-------------------------------------------------------------
# 4 - Données Bâtiments avec CECB des années précédentes (depuis 2022)
#-------------------------------------------------------------
data_batiments_cecb_read <- readxl::read_excel(("./data/batiments_cecb_cat.xlsx"),
sheet = "data_final")
```
```{r }
#| label: fig-G1
##| fig-cap: "Bâtiments chauffés avec ou sans CECB, selon période de construction, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
#_______________________________________________________
# G1 - Bâtiments chauffés avec ou sans CECB, selon période de construction
#_______________________________________________________
# S'assurer qu'il n'y a qu'une seule ligne par bâtiment (pour ne pas compter à pls reprises un bâtiment pour lequel pls CECB ont été effectués)
regener_cecb <- regener_cecb |>
arrange(EGID, desc(CECB_AN)) |>
distinct(EGID, .keep_all = T)
# Il s'agit de calculer pour la nouvelle année (à partir de regener_cecb) et d'y ajouter les données des années précédentes (data_batiments_cecb_read)
bat_cecb <- regener_cecb |>
mutate(BAT_CECB_CAT = case_when(
CONSTR_AN >= 2001 & CECB_OUI == TRUE & CECB_AN <= an ~ "Batiments construits APRES 2000 AVEC CECB",
CONSTR_AN >= 2001 & (is.na(CECB_OUI) | (CECB_OUI == TRUE & CECB_AN > an)) ~ "Batiments construits APRES 2000 SANS CECB",
CONSTR_AN < 2001 & CONSTR_AN >= 1986 & CECB_OUI == TRUE & CECB_AN <= an ~ "Batiments construits 1986-2000 AVEC CECB",
CONSTR_AN < 2001 & CONSTR_AN >= 1986 & (is.na(CECB_OUI) | (CECB_OUI == TRUE & CECB_AN > an)) ~ "Batiments construits 1986-2000 SANS CECB",
CONSTR_AN < 1986 & CECB_OUI == TRUE & CECB_AN <= an ~ "Batiments construits AVANT 1986 AVEC CECB",
# Tous les autres (vieux bats sans CECB et ceux sans année de construction )
TRUE ~ "Batiments construits AVANT 1986 SANS CECB",
)) |>
group_by(BAT_CECB_CAT) |>
summarise(N_BAT = n()) |>
rename(VARIABLES = BAT_CECB_CAT) |>
rename(!!glue::glue("{an}") := N_BAT) # !! pour savoir qu'on veut la colonne et := pour un nom dynamique
bat_cecb_tot <- data_batiments_cecb_read |>
left_join(bat_cecb, by = "VARIABLES")
# QUESTION: écraser l'ancien document 2022-2024 avec ces données 2022-2025?
# Faire un pivot_long
bat_cecb_long <- bat_cecb_tot |>
pivot_longer(
cols = -1,
names_to = "ANNEE",
values_to = "VALEUR"
)
cecb_levels <- c(
"Batiments construits AVANT 1986 SANS CECB",
"Batiments construits 1986-2000 SANS CECB",
"Batiments construits APRES 2000 SANS CECB",
"Batiments construits AVANT 1986 AVEC CECB",
"Batiments construits 1986-2000 AVEC CECB",
"Batiments construits APRES 2000 AVEC CECB"
)
# Pour avoir les totaux sous le graphique entre parenthèses
totaux <- bat_cecb_long |>
group_by(ANNEE) |>
summarise(TOTAL = sum(VALEUR, na.rm = TRUE)) |>
mutate(
label = case_when(
ANNEE == "2022" ~ paste0("N = ", format(TOTAL, big.mark = "'", scientific = FALSE)),
ANNEE == "2023" ~ paste0("N = ", format(TOTAL, big.mark = "'", scientific = FALSE)),
ANNEE == "2024" ~ paste0("N = ", format(TOTAL, big.mark = "'", scientific = FALSE)),
ANNEE == "2025" ~ paste0("N = ", format(TOTAL, big.mark = "'", scientific = FALSE)),
TRUE ~ format(TOTAL)
)
)
labels_x <- setNames(
paste0(totaux$ANNEE, "\n(", totaux$label, ")"),
totaux$ANNEE
)
g1_data <- bat_cecb_long |>
group_by(ANNEE) |>
mutate(POURCENTAGE = VALEUR / sum(VALEUR) * 100) |>
ungroup() |>
mutate(VARIABLES = factor(VARIABLES, levels = cecb_levels))
g1_plot <- ggplot() +
geom_col_interactive(
data = g1_data,
aes(
x = ANNEE,
y = POURCENTAGE,
fill = VARIABLES,
tooltip =paste0(as.character(VARIABLES), " : ", as.character(ANNEE), " ", round(POURCENTAGE, 1), "%"),
data_id = paste0(as.character(ANNEE), as.character(VARIABLES))),
width = 0.7,
position = "stack",
color = NA
) +
scale_fill_manual(
values = c(
"Batiments construits AVANT 1986 SANS CECB" ="#E6550D" ,
"Batiments construits 1986-2000 SANS CECB" ="gold3",
"Batiments construits APRES 2000 SANS CECB" ="yellow2",
"Batiments construits AVANT 1986 AVEC CECB" ="darkolivegreen",
"Batiments construits 1986-2000 AVEC CECB" ="darkolivegreen3",
"Batiments construits APRES 2000 AVEC CECB" ="darkolivegreen1"
),
labels = c(
"Construits avant 1986 SANS CECB" ,
"Construits 1986-2000 SANS CECB" ,
"Construits après 2000 SANS CECB" ,
"Construits avant 1986 AVEC CECB" ,
"Construits 1986-2000 AVEC CECB" ,
"Construits après 2000 AVEC CECB"
),
# breaks = tous_les_types,
name = NULL
) +
# ajout des totaux entre parenthèses sous légendes des histogrammes
scale_x_discrete(labels = labels_x)+
# guides afin d'avoir les légendes en colonne sous le graphique (il faut mettre également "bottom" sous theme/legend.position)
guides(
fill = guide_legend(
ncol = 1, # légende en colonne (verticale)
byrow = TRUE # empilement propre
)
) +
# Titles and caption
labs(
title = str_wrap("Bâtiments chauffés avec ou sans certificat énergétique, selon la période de construction, Vaud",
width = 67),
x = NULL,
y = "Bâtiments en %",
caption = "Source: CECB / DGE-DIREN \nEtat au 31.12.2025"
) +
labs(
title = str_wrap("**Bâtiments chauffés avec ou sans certificat énergétique, selon la période de construction, Vaud**", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
y = "Bâtiments en %",
caption = "Source: StatVD / DGE-DIREN<br>Etat au 31.12.2025"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_markdown(face = "bold", size = 12),
plot.subtitle = element_markdown(size = 10),
plot.caption = element_markdown(hjust = 0, size = 9, margin = margin(t = 5), face = "italic"), # !! MWR: rajout italic
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.position = "right",
legend.box = "vertical",
legend.text = element_text(size = 8),
legend.title = element_text(size = 12),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g1_plot,
# !!MWR : modification du comportement de surlignage : on ajoute de la transparence aux éléments non-survolés !
options = list(
opts_hover_inv(css = "opacity:0.5;"),
opts_hover(css = "opacity:1;"),
# Ajout du nom du PNG téléchargé + remplacement de 'download' par 'télécharger' (survol icône)
opts_toolbar(
position = "topright",
hidden = c("zoom", "selection"),
pngname = paste0(selected_metadata[['Identifiant thématique']], "_G1"),
tooltips = list(
saveaspng = "Télécharger"
)
)
)
)
ggsave(glue("./images/g1_Batiments_avec-sans_CECB_par_Periode-Construction_2022-{an}.png"), width = 8, height = 6, dpi = 300)
```
```{r}
############################################################
# @QUESTION voir comment recréer le document batiments_cecb_cat avec nouvelle année, uniquement si nouvelle année n'existait pas encore
# ############################################
```
```{r}
#| label: fig-G2
##| fig-cap: "Bâtiments chauffés avec certificat énergétique, selon l'année du CECB et la période de construction, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
#_______________________________________________________
# G2 - Bâtiments chauffés avec certificat énergétique, selon l'année du CECB et la période de construction, Vaud
#_______________________________________________________
bat_levels <- c(
"Batiments construits APRES 2000 AVEC CECB",
"Batiments construits 1986-2000 AVEC CECB",
"Batiments construits AVANT 1986 AVEC CECB"
)
bats_avec_cecb <- regener_cecb |>
filter(CECB_OUI == TRUE) |>
mutate(BAT_CECB_CAT = case_when(
CONSTR_AN >= 2001 & CECB_AN <= an ~ "Batiments construits APRES 2000 AVEC CECB",
CONSTR_AN < 2001 & CONSTR_AN >= 1986 & CECB_AN <= an ~ "Batiments construits 1986-2000 AVEC CECB",
# CONSTR_AN < 1986 & CECB_AN <= an ~ "Batiments construits AVANT 1986 AVEC CECB",
# Tous les autres (vieux bats sans CECB et ceux sans année de construction )
TRUE ~ "Batiments construits AVANT 1986 AVEC CECB"
)) |>
mutate(BESOINS_TOT = BESOINS_CH + BESOINS_ECS) |>
select(CECB_AN, CONSTR_AN, BAT_CECB_CAT, EVALUATION_ENV_BATIMENT, GEBF, BESOINS_TOT, CECB_OUI)
g2_data <- bats_avec_cecb |>
# group_by(CECB_AN, BAT_CECB_CAT) |>
count(CECB_AN, BAT_CECB_CAT, name = "NOMBRE") |> # pour bar chart ne pas passer par group_by et mutate
# ungroup() |>
mutate(BAT_CECB_CAT = factor(BAT_CECB_CAT, levels = bat_levels))
g2_plot <- ggplot(g2_data) +
geom_col_interactive(
# data = g2_data,
aes(
x = CECB_AN,
y = NOMBRE,
fill = BAT_CECB_CAT,
tooltip =paste0(as.character(BAT_CECB_CAT), " en ", as.character(CECB_AN)," : ", label_number(big.mark = "'")(NOMBRE), " bâtiments"),
data_id = paste0(as.character(CECB_AN), as.character(BAT_CECB_CAT))),
width = 0.7,
position = "stack",
color = NA
) +
scale_fill_manual(
values = c(
"Batiments construits APRES 2000 AVEC CECB" ="darkolivegreen1",
"Batiments construits 1986-2000 AVEC CECB" ="darkolivegreen3",
"Batiments construits AVANT 1986 AVEC CECB" ="darkolivegreen"
),
breaks = bat_levels,
labels = c(
"Batiments construits APRES 2000 AVEC CECB" = "Construits après 2000",
"Batiments construits 1986-2000 AVEC CECB" = "Construits 1986-2000",
"Batiments construits AVANT 1986 AVEC CECB" = "Construits avant 1986"
),
name = NULL
) +
# # guides afin d'avoir les légendes en colonne dessous (il faut mettre également "bottom" sous theme/legend.position)
guides(
fill = guide_legend(
reverse = TRUE,
nrow = 1, # légende en colonne (verticale)
byrow = TRUE # empilement propre
)
) +
# Titles and caption
labs(
title = str_wrap("**Bâtiments chauffés avec certificat énergétique, selon l'année du CECB et la période de construction, Vaud**",
width = 80) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
y = "Nombre de bâtiments",
caption = "Source: CECB / DGE-DIREN<br>Etat au 31.12.2025"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_markdown(face = "bold", size = 12),
plot.subtitle = element_markdown(size = 10),
plot.caption = element_markdown(hjust = 0, size = 9, margin = margin(t = 5), face = "italic"), # !! MWR: rajout italic
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.position = "bottom",
legend.box = "vertical",
legend.text = element_text(size = 10),
legend.title = element_text(size = 12),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g2_plot,
# modification du comportement de surlignage : on ajoute de la transparence aux éléments non-survolés !
options = list(
opts_hover_inv(css = "opacity:0.5;"),
opts_hover(css = "opacity:1;"),
# Ajout du nom du PNG téléchargé + remplacement de 'download' par 'télécharger' (survol icône)
opts_toolbar(
position = "topright",
hidden = c("zoom", "selection"),
pngname = paste0(selected_metadata[['Identifiant thématique']], "_G2"),
tooltips = list(
saveaspng = "Télécharger"
)
)
)
)
ggsave(glue("./images/g2_Batiments_avec_CECB_2010-{an}.png"), width = 8, height = 6, dpi = 300)
```
```{r}
#| label: fig-G3
##| fig-cap: "Nombre, surface énergétique et consommation théorique de bâtiments chauffés avec certificat énergétique, selon l'étiquette-énergie de leur enveloppe, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
#_______________________________________________________
# G3 - Nombre, surface énergétique et consommation théorique de bâtiments chauffés avec certificat énergétique, selon l'étiquette-énergie de leur enveloppe, Vaud
#_______________________________________________________
etiquettes <- regener_cecb |>
filter(CECB_OUI == TRUE) |>
mutate(BESOINS_TOT = BESOINS_CH, # + BESOINS_ECS, # On ne garde que les besoins pour le chauffage
NOMBRE = 1) |>
select(EVALUATION_ENV_BATIMENT, NOMBRE, BESOINS_TOT, GEBF)
etiquettes_longer <- etiquettes |>
pivot_longer(
cols = c("NOMBRE", "BESOINS_TOT", "GEBF"),
names_to = "VARIABLE",
values_to = "VALEUR"
)
etiquettes_gp <- etiquettes_longer |>
group_by(VARIABLE, EVALUATION_ENV_BATIMENT) |>
summarise(TOTAL = sum(VALEUR, na.rm = T), .groups = "drop") |>
group_by(VARIABLE) |>
mutate(POURCENTAGE = TOTAL / sum(TOTAL) * 100)
g3_data <- etiquettes_gp |>
mutate(VARIABLE = case_when(
VARIABLE == "NOMBRE" ~ "Nombre",
VARIABLE == "GEBF" ~ "Surface énergétique",
VARIABLE == "BESOINS_TOT" ~ "Besoins théoriques",
TRUE ~ VARIABLE # garde la valeur si non prévue
),
VARIABLE = factor(VARIABLE, levels = c(
"Nombre",
"Surface énergétique",
"Besoins théoriques"
))
)
# Pour avoir les totaux sous le graphique
totaux <- g3_data |>
group_by(VARIABLE) |>
summarise(total = sum(TOTAL, na.rm = TRUE)) |>
mutate(
label = case_when(
VARIABLE == "Nombre" ~ paste0("N = ", format(total, big.mark = "'", scientific = FALSE)),
VARIABLE == "Surface énergétique" ~ paste0(round(total/1e6, 1), " Mio m²"),
VARIABLE == "Besoins théoriques" ~ paste0(format(round(total/1e6, 0), big.mark = "'", scientific = FALSE), " GWh"),
TRUE ~ format(total)
)
)
labels_x <- setNames(
paste0(totaux$VARIABLE, "\n(", totaux$label, ")"),
totaux$VARIABLE
)
g3_plot <- ggplot() +
geom_col_interactive(
data = g3_data,
aes(
x = VARIABLE,
y = POURCENTAGE,
fill = EVALUATION_ENV_BATIMENT,
tooltip =paste0("Etiquette-énergie ", EVALUATION_ENV_BATIMENT, " : ", round(POURCENTAGE, 1), " %"),
data_id = EVALUATION_ENV_BATIMENT),
width = 0.7
# ,
# position = "stack",
# color = NA
) +
# # version 1: Palette classique
# scale_fill_manual(
# values = c(
# "A" = "#00A651",
# "B" = "#39B54A",
# "C" = "#8DC63F",
# "D" = "#FFF200",
# "E" = "#F7941D",
# "F" = "#F15A24",
# "G" = "#ED1C24"
# ),
# name = NULL
# ) +
# # version 2: Couleurs plus douces
scale_fill_manual(
values = c(
"A" = "#1B9E77",
"B" = "#4CAF50",
"C" = "#A6D96A",
"D" = "#FFF200",
"E" = "#FDAE61",
"F" = "#F46D43",
"G" = "#D73027"
),
name = NULL
) +
# # version 3: Pour daltoniens
# scale_fill_manual(
# values = c(
# "A" = "#1A9850",
# "B" = "#66BD63",
# "C" = "#A6D96A",
# "D" = "#FFFFBF",
# "E" = "#FDAE61",
# "F" = "#F46D43",
# "G" = "#D73027"
# ),
# name = NULL
# ) +
scale_x_discrete(labels = labels_x)+
# Titles and caption
labs(
title = str_wrap("Nombre, surface énergétique et besoins théoriques pour le chauffage de bâtiments avec certificat énergétique selon l'étiquette-énergie de leur enveloppe, Vaud",
width = 67),
x = NULL,
y = "En %",
caption = "Source: CECB / DGE-DIREN \nEtat au 31.12.2025"
) +
theme_minimal(base_size = 13) +
labs(
title = str_wrap("**Nombre, surface énergétique et besoins théoriques pour le chauffage de bâtiments avec certificat énergétique selon l'étiquette-énergie de leur enveloppe, Vaud**", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
y = "En %",
caption = "Source: CECB / DGE-DIREN <br>Etat au 31.12.2025"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_markdown(face = "bold", size = 12),
plot.subtitle = element_markdown(size = 10),
plot.caption = element_markdown(hjust = 0, size = 9, margin = margin(t = 5), face = "italic"), # !! MWR: rajout italic
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.position = "right",
legend.box = "vertical",
legend.text = element_text(size = 10),
legend.title = element_text(size = 12),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g3_plot,
# !!MWR : modification du comportement de surlignage : on ajoute de la transparence aux éléments non-survolés !
options = list(
opts_hover_inv(css = "opacity:0.5;"),
opts_hover(css = "opacity:1;"),
# Ajout du nom du PNG téléchargé + remplacement de 'download' par 'télécharger' (survol icône)
opts_toolbar(
position = "topright",
hidden = c("zoom", "selection"),
pngname = paste0(selected_metadata[['Identifiant thématique']], "_G3"),
tooltips = list(
saveaspng = "Télécharger"
)
)
)
)
# plot.title = element_text(face = "bold", size = 12),
# # plot.subtitle = element_text(size = 10),
# legend.position = "right",
# legend.box.margin = margin(t = 10),
# legend.spacing.y = unit(4, "pt"),
# legend.box = "horizontal",
# legend.text = element_text(size = 10),
# legend.title = element_text(size = 12),
#
# plot.caption = element_text(hjust = 0, size = 9, margin = margin(t = 15)),
# plot.caption.position = "plot",
# plot.margin = margin(10, 10, 30, 10),
#
# axis.text = element_text(size = 10),
# axis.title = element_text(size = 12)
# )
#
# obsindVD::girafe_light(g3_plot)
ggsave(glue("./images/g3_Etiquettes_CECB_Mombre_SRE_Besoins_{an}.png"), width = 8, height = 6, dpi = 300)
```
# Analyse {#sec-analyse}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
## Description statistique {#sec-analyse-description}
Parmi les 148’808 bâtiments chauffés du canton de Vaud recensés fin 2025, 34% (50’668) disposent d'un certificat énergétique CECB (19% en 2022).
Toutefois, un peu plus de la moitié (51%) de l’ensemble des bâtiments construits avant 2000 ne disposent d'aucune information sur leur qualité énergétique.
Le nombre de CECB effectués est en constante hausse depuis 2020. Plus de 9'000 de ces certificats ont été réalisés en 2025.
Sur l’ensemble des bâtiments disposant d’un certificat énergétique, près d’un tiers obtient une évaluation de l’efficacité de l’enveloppe inférieure à E (11% F ; 21% G). La surface de référence énergétique de ces bâtiments F ou G correspond à 34% de l’ensemble des surfaces chauffées (13% F ; 21% G) et leur consommation théorique pour le chauffage à 39% (14% F ; 25% G).
## Interprétation {#sec-analyse-interpretation}
Afin de stimuler la rénovation des bâtiments, il est nécessaire que les propriétaires connaissent la qualité énergétique de leurs bâtiments. Le taux de rénovation annuel dans le canton de Vaud est actuellement estimé à 0,8%. Un taux d’au moins 1,5% sur plusieurs décennies serait nécessaire afin d’atteindre les objectifs d’économies d’énergie fixés par la Confédération. La part des bâtiments qui ne disposent pas de certificat CECB est par conséquent toujours considérée comme trop élevée.
## Périmètre et limites {#sec-analyse-perimetre}
Depuis 2017, le Certificat énergétique cantonal des bâtiments (CECB) est obligatoire lors de la vente d’un bâtiment d’habitation, qu’il soit individuel ou collectif, ainsi qu’en cas de remplacement d’un système de chauffage par une nouvelle installation fonctionnant aux énergies fossiles (mazout ou gaz). Avec l’entrée en vigueur de la nouvelle loi sur l’énergie au 1er janvier 2027, cette obligation sera étendue à l’ensemble des bâtiments construits avant 1986. Les propriétaires concernés disposeront d’un délai jusqu’au 31 décembre 2032 pour faire établir un CECB.
Certains CECB effectués n'ont pas pu être attribués à un bâtiment identifié (<1%). Il s’agit en principe de bâtiments qui ont été démolis depuis la réalisation du CECB ou dont leur identifiant unique (EGID) a changé pour des raisons administratives.
Il convient par ailleurs de noter que les données relatives aux dernières années sont susceptibles d’évoluer légèrement à chaque mise à jour de cette fiche indicateurs, notamment en raison des modifications apportées aux certificats énergétiques CECB (par exemple en cas de révision du certificat après des travaux) et aux données du registre énergétique RegEner (par exemple en cas d’amélioration de la qualité des données par de nouvelles données secondaires).
# Tableaux {#sec-tableaux}
```{r}
#| label: tbl-T1
#| tbl-cap: "Bâtiments avec CECB selon la période de construction et l'année du certificat énergétique, Vaud"
# Ajout colonne TOTAL (somme par BAT_CECB_CAT)
t1_long_temp <- bats_avec_cecb |>
group_by(BAT_CECB_CAT, CECB_AN) |>
summarise(NOMBRE = n())
t1_total <- bats_avec_cecb |>
group_by(CECB_AN) |>
summarise(NOMBRE = n(), .groups = "drop") |>
mutate(BAT_CECB_CAT = "TOTAL")
t1_long <- bind_rows(t1_long_temp, t1_total)
# Transformer en wider et rajouter Total sur l'ensemble des années
t1_wide_temp <- t1_long |>
pivot_wider(names_from = BAT_CECB_CAT, values_from = NOMBRE) |>
select(CECB_AN, TOTAL ,"Batiments construits AVANT 1986 AVEC CECB" , "Batiments construits 1986-2000 AVEC CECB", "Batiments construits APRES 2000 AVEC CECB" ) |>
mutate(CECB_AN = as.character(CECB_AN))
t1_wide_total <- t1_wide_temp |>
summarise(
CECB_AN = "TOTAL",
TOTAL = sum(TOTAL, na.rm = TRUE),
`Batiments construits AVANT 1986 AVEC CECB` = sum(`Batiments construits AVANT 1986 AVEC CECB`, na.rm = TRUE),
`Batiments construits 1986-2000 AVEC CECB` = sum(`Batiments construits 1986-2000 AVEC CECB`, na.rm = TRUE),
`Batiments construits APRES 2000 AVEC CECB` = sum(`Batiments construits APRES 2000 AVEC CECB`, na.rm = TRUE)
)
df <- t1_wide_total |>
bind_rows(t1_wide_temp)
t1 <- df |>
gt() |>
tab_header(title = md("**Bâtiments avec CECB selon la période de construction et l'année du certificat énergétique, Vaud**")) |>
fmt_number(columns = -CECB_AN, sep_mark = "'", decimals = 0) |>
cols_label(
CECB_AN = "Année",
TOTAL = "Total",
"Batiments construits AVANT 1986 AVEC CECB" = "Bâtiments construits avant 1986",
"Batiments construits 1986-2000 AVEC CECB" = "Bâtiments construits 1986-2000",
"Batiments construits APRES 2000 AVEC CECB" = "Bâtiments construits après 2000"
) |>
# Regrouper les colonnes avec u seul titre
tab_spanner(label = "Selon la période de construction",
columns = c("Batiments construits AVANT 1986 AVEC CECB", "Batiments construits 1986-2000 AVEC CECB", "Batiments construits APRES 2000 AVEC CECB"), level = 1) |>
cols_width(everything() ~ pct(100 / ncol(df))) |>
tab_style(style = cell_text(weight = "bold"),
locations = list(cells_body(columns = c("CECB_AN", "TOTAL")),
cells_column_labels(columns = c("CECB_AN", "TOTAL")))) |>
tab_style(
style = cell_text(align = "center"),
locations = cells_column_labels()
) |>
tab_style(
style = cell_text(align = "left"),
locations = cells_footnotes()
) |>
tab_style(
style = cell_text(align = "left"),
locations = cells_source_notes()
) |>
tab_style(
style = cell_text(weight = "bold"),
locations = list(cells_column_spanners(), cells_column_labels())) |>
cols_align(align = "center", columns = CECB_AN) |>
cols_label_with(
columns = -c(CECB_AN),
fn = \(col) md(paste0(col, "\n\n[nbre]"))
) |>
tab_style(style = cell_borders(sides = "all"),
locations = list(cells_column_labels(), cells_column_spanners())) |>
tab_style(style = cell_borders(sides = c("left", "right")),
locations = list(cells_body())) |>
tab_options(column_labels.border.bottom.color = "black") |>
fmt_missing(columns = everything(), missing_text = "") |>
opt_table_outline(style = "solid", width = px(2), color = "lightgrey") |>
tab_source_note(
source_note = md("*Sources : CECB / DGE-DIREN<br>Etat au 31.12.2025*")
)
t1
gtsave(t1, glue("./images/t1_Batiments_CECB_2010-{an}.html"))
```
```{r}
#| label: tbl-T2
#| tbl-cap: "Bâtiments avec CECB selon la période de construction et l'étiquette-énergie, Vaud"
# T2 : Nombre bâtiments par étiquette-énergie et BAT_CECB_CAT
# Ajout colonne TOTAL (somme par BAT_CECB_CAT)
t2_long_temp <- bats_avec_cecb |>
group_by(BAT_CECB_CAT, EVALUATION_ENV_BATIMENT) |>
summarise(NOMBRE = n())
t2_total <- bats_avec_cecb |>
group_by(EVALUATION_ENV_BATIMENT) |>
summarise(NOMBRE = n(), .groups = "drop") |>
mutate(BAT_CECB_CAT = "TOTAL")
t2_long <- bind_rows(t2_long_temp, t2_total)
# Transformer en wider et rajouter Total sur l'ensemble des années
t2_wide_temp <- t2_long |>
pivot_wider(names_from = BAT_CECB_CAT, values_from = NOMBRE) |>
select(EVALUATION_ENV_BATIMENT, TOTAL ,"Batiments construits AVANT 1986 AVEC CECB" , "Batiments construits 1986-2000 AVEC CECB", "Batiments construits APRES 2000 AVEC CECB" )
# |>
# mutate(CECB_AN = as.character(CECB_AN))
t2_wide_total <- t2_wide_temp |>
summarise(
EVALUATION_ENV_BATIMENT = "TOTAL",
TOTAL = sum(TOTAL, na.rm = TRUE),
`Batiments construits AVANT 1986 AVEC CECB` = sum(`Batiments construits AVANT 1986 AVEC CECB`, na.rm = TRUE),
`Batiments construits 1986-2000 AVEC CECB` = sum(`Batiments construits 1986-2000 AVEC CECB`, na.rm = TRUE),
`Batiments construits APRES 2000 AVEC CECB` = sum(`Batiments construits APRES 2000 AVEC CECB`, na.rm = TRUE)
)
df_t2 <- t2_wide_total |>
bind_rows(t2_wide_temp)
t2 <- df_t2 |>
gt() |>
tab_header(title = md("**Bâtiments avec CECB selon la période de construction et l'étiquette-énergie, Vaud++")) |>
fmt_number(columns = -EVALUATION_ENV_BATIMENT, sep_mark = "'", decimals = 0) |>
cols_label(
EVALUATION_ENV_BATIMENT = "Etiquette-énergie",
TOTAL = "Total",
"Batiments construits AVANT 1986 AVEC CECB" = "Bâtiments construits avant 1986",
"Batiments construits 1986-2000 AVEC CECB" = "Bâtiments construits 1986-2000",
"Batiments construits APRES 2000 AVEC CECB" = "Bâtiments construits après 2000"
) |>
# Regrouper les colonnes avec u seul titre
tab_spanner(label = "Selon la période de construction",
columns = c("Batiments construits AVANT 1986 AVEC CECB", "Batiments construits 1986-2000 AVEC CECB", "Batiments construits APRES 2000 AVEC CECB"), level = 1) |>
tab_style(
style = cell_text(weight = "bold"),
locations = list(cells_column_spanners(), cells_column_labels())) |>
cols_width(everything() ~ pct(100 / ncol(df))) |>
tab_style(style = cell_text(weight = "bold"),
locations = list(cells_body(columns = c("EVALUATION_ENV_BATIMENT", "TOTAL")),
cells_column_labels(columns = c("EVALUATION_ENV_BATIMENT", "TOTAL")))) |>
tab_style(
style = cell_text(align = "center"),
locations = cells_column_labels()
) |>
tab_style(
style = cell_text(align = "left"),
locations = cells_footnotes()
) |>
tab_style(
style = cell_text(align = "left"),
locations = cells_source_notes()
) |>
cols_align(align = "center", columns = EVALUATION_ENV_BATIMENT) |>
cols_label_with(
columns = -c(EVALUATION_ENV_BATIMENT),
fn = \(col) md(paste0(col, "\n\n[nbre]"))
) |>
tab_style(style = cell_borders(sides = "all"),
locations = list(cells_column_labels(), cells_column_spanners())) |>
tab_style(style = cell_borders(sides = c("left", "right")),
locations = list(cells_body())) |>
tab_footnote(footnote = "Etiquette-énergie de la classification des publications CECB concernant l'efficacité de l'enveloppe du bâtiment.",
locations = cells_title(groups = "title"),
placement = "right") |>
tab_options(column_labels.border.bottom.color = "black") |>
fmt_missing(columns = everything(), missing_text = "") |>
opt_table_outline(style = "solid", width = px(2), color = "lightgrey") |>
tab_source_note(
source_note = md("*Sources : CECB / DGE-DIREN<br>Etat au 31.12.2025*")
)
t2
gtsave(t2, glue("./images/t2_CECB_etiquette-energie_{an}.html"))
```
# Méthode {#sec-methode}
Les informations proviennent de la base de données CECB et du registre énergétique des bâtiments (RegEner) du Canton (pour les périodes de construction des bâtiments).
L’année d’un certificat énergétique CECB correspond à l’année de la dernière actualisation effectuée du certificat énergétique d’un certain bâtiment. Si plusieurs CECB ont été effectués pour un même bâtiment, seul le dernier est retenu.
# Comparaison {#sec-comparaison}
Les données des autres cantons n’étant pas disponibles, une comparaison entre cantons n’est par conséquent pas possible. Les seules statistiques disponibles sont celles publiées au niveau fédéral par l’[association CECB](https://www.cecb.ch/le-cecb/statistiques/). Fin 2023, 164'251 bâtiments au total avaient un certificat énergétique CECB en Suisse, dont 36'622 (22,3% du total) dans le canton de Vaud.
En termes d’efficacité de l’enveloppe des bâtiments, 10% des CECB effectués entre 2020 et 2024 en Suisse indiquaient une note A ou B, 31% une note C ou D, et 59% une note E, F ou G. Parmi l’ensemble des CECB établis dans le canton de Vaud entre 2009 et 2024, ces taux étaient respectivement de 10%, 39% et 51%. Les plus grandes différences sont observées pour le pourcentage de note G, qui est de 29% pour l’ensemble de la Suisse et de 22% pour le canton de Vaud.
# Références {#sec-ref}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
## Fiches associées {#sec-ref-fiches}
**Fiches Indicateur** :
* [IND_08.05.03.06 : Subventions pour l'établissement d'un audit énergétique CECB+, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.05.03.06_Subventions_CECB_Plus.html)
## Autres références {#sec-ref-autres}
* [DGE-DIREN - Conception cantonale de l’énergie (CoCEn 2019)](https://www.vd.ch/fileadmin/user_upload/themes/environnement/energie/fichiers_pdf/CoCEn_Pub_complete_20190816.pdf)
* [Statistiques CECB](https://www.cecb.ch/le-cecb/statistiques/)
# Glossaire {#sec-glossaire}
```{r}
# ---------------------------------------------------------
# Bloc pour lecture du file BRUT où se trouvent toutes les définition pour le glossaire et création du data.frame "definition" ----
# ---------------------------------------------------------
tryCatch(
expr = {readxl::read_excel("P:/DIREN/11 POLITIQUE ENERG/11.08 Indicateurs et stat/1 Indicateurs DIREN/3-Fiches IND MET OBJ/Liste Definitions.xlsx",
skip = 2) |>
janitor::clean_names(case="screaming_snake") |>
select(TERME, DEFINITION) |>
readr::write_csv2("./data/definitions.csv")
},
error = function(e) message("Attention: la table définition n'a pas pu être réactualisée avec les données brutes du P:/ ", e$message),
warning = function(w) message("Attention: la table définition n'a pas pu être réactualisée avec les données brutes du P:/ ", w$message)
)
```
```{r}
# ---------------------------------------------------------
# Bloc pour sélectionner les définitions à apparaître dans le glossaire ----
# ---------------------------------------------------------
# Lecture du file
def_tot <- readr::read_delim(file = "./data/definitions.csv",
delim = ";",
show_col_types = FALSE) |>
# Mettre les premières lettres de chaque définition en majuscule
dplyr::mutate(DEFINITION = stringr::str_replace(DEFINITION,"^\\p{L}",stringr::str_to_upper))
# Sélection des définitions
definitions <- def_tot |>
filter(TERME %in% c(
"Gigawattheure (GWh)",
"CECB",
"Besoins théoriques",
"Etiquette énergétique",
"Surface de référence énergétique (SRE)"
))
# Print de la table avec modification des columns
definitions |>
gt_table_ind() |>
gt::cols_label(TERME = "", DEFINITION ="Définition") |>
gt::tab_options(table.align = "left")
```
# Annexes {#sec-annexes .unnumbered}
```{r}
##########################################
# Préparation des données pour les annexes
##########################################
# Apparier pour avoir les codes des années de construction
source("P:\\DIREN\\11 POLITIQUE ENERG\\11.08 Indicateurs et stat\\14 Scripts génériques R\\format_variables.R", encoding = "UTF-8")
etiquettes_periode <- regener_cecb |>
filter(CECB_OUI == TRUE) |>
mutate( NOMBRE = 1) |>
left_join(annees, by = c("CONSTR_AN" = "ANNEE")) |>
select(EVALUATION_ENV_BATIMENT, ANNEE_CAT, NOMBRE, BESOINS_CH, BESOINS_ECS, GEBF)
etiquettes_periode_longer <- etiquettes_periode |>
pivot_longer(
cols = c("NOMBRE", "BESOINS_CH", "BESOINS_ECS", "GEBF"),
names_to = "VARIABLE",
values_to = "VALEUR"
)
etiquettes_periode_gp <- etiquettes_periode_longer |>
group_by(VARIABLE, EVALUATION_ENV_BATIMENT, ANNEE_CAT) |>
summarise(TOTAL = sum(VALEUR, na.rm = T), .groups = "drop")
```
## Etiquettes-énergie de l'enveloppe, selon le nombre de bâtiments {.unnumbered}
```{r}
###########################
df_nombre <- etiquettes_periode_gp |>
filter(VARIABLE == "NOMBRE") |>
arrange(EVALUATION_ENV_BATIMENT, ANNEE_CAT) |>
rename("Etiquette-energie" = "EVALUATION_ENV_BATIMENT",
"Periode construction" = "ANNEE_CAT",
"Nombre" = "TOTAL") |>
select(-VARIABLE)
datatable(
df_nombre,
extensions = 'Buttons',
rownames = FALSE,
options = list(
autoWidth = TRUE,
dom = '<"top"fB>rt<"bottom"ip>',
buttons = c('csv'),
filename = paste0(selected_metadata['Identifiant'], "_conso_ae_année_", Sys.Date()),
searching = FALSE,
pageLength = 5,
language = list(url = "https://cdn.datatables.net/plug-ins/1.13.6/i18n/fr-FR.json")
)
) |>
formatRound(
columns = 'Nombre',
digits = 0,
mark = "'",
dec.mark = ","
) |>
htmltools::div(style = "width: 70%; margin-left: 0;")
```
## Etiquettes-énergie de l'enveloppe, selon la surface de référence énergétique (SRE) {.unnumbered}
```{r}
###########################
df_sre <- etiquettes_periode_gp |>
filter(VARIABLE == "GEBF") |>
arrange(EVALUATION_ENV_BATIMENT, ANNEE_CAT) |>
rename("Etiquette-energie" = "EVALUATION_ENV_BATIMENT",
"Periode construction" = "ANNEE_CAT",
"SRE" = "TOTAL") |>
select(-VARIABLE)
datatable(
df_sre,
extensions = 'Buttons',
rownames = FALSE,
options = list(
autoWidth = TRUE,
dom = '<"top"fB>rt<"bottom"ip>',
buttons = c('csv'),
filename = paste0(selected_metadata['Identifiant'], "_conso_ae_année_", Sys.Date()),
searching = FALSE,
pageLength = 5,
language = list(url = "https://cdn.datatables.net/plug-ins/1.13.6/i18n/fr-FR.json")
)
) |>
formatRound(
columns = 'SRE',
digits = 0,
mark = "'",
dec.mark = ","
) |>
htmltools::div(style = "width: 70%; margin-left: 0;")
```
## Etiquettes-énergie de l'enveloppe, selon les besoins théoriques pour la chaleur des bâtiments (chauffage et ECS) {.unnumbered}
```{r}
###########################
df_besoins <- etiquettes_periode_gp |>
filter(VARIABLE %in% c("BESOINS_CH", "BESOINS_ECS")) |>
arrange(EVALUATION_ENV_BATIMENT, ANNEE_CAT) |>
rename("Etiquette-energie" = "EVALUATION_ENV_BATIMENT",
"Periode construction" = "ANNEE_CAT",
"GWH" = "TOTAL",
"Chauffage ou ECS" = "VARIABLE")
# |>
# select(-VARIABLE)
datatable(
df_besoins,
extensions = 'Buttons',
rownames = FALSE,
options = list(
autoWidth = TRUE,
dom = '<"top"fB>rt<"bottom"ip>',
buttons = c('csv'),
filename = paste0(selected_metadata['Identifiant'], "_conso_ae_année_", Sys.Date()),
searching = FALSE,
pageLength = 5,
language = list(url = "https://cdn.datatables.net/plug-ins/1.13.6/i18n/fr-FR.json")
)
) |>
formatRound(
columns = 'GWH',
digits = 0,
mark = "'",
dec.mark = ","
) |>
htmltools::div(style = "width: 70%; margin-left: 0;")
```