---
title: "Consommation finale d'énergie"
subtitle: "Estimation de la consommation finale d'énergie par agent énergétique, Vaud"
author: "DGE-DIREN"
date: last-modified # Renvoie automatiquement la date de génération de la fiche html
params: # ! `open_params_metadata_help()` pour des instructions de remplissage détaillées
fonction: 3 # 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.01.01.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: 12 # Valeur numérique : 0=Non-défini/1=Janvier/2=Février, etc.
disponibleDepuis: 2000 # 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: 72acbe9e-01eb-4f50-9a11-f81abc70262e # !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}
an_max <- 2024
```
```{r tab-synthese}
# ---------------------------------------------------------
# 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 = paste0(selected_metadata["Titre"], " <b>[GWh]</b>"), # Par défaut = titre issu de la métadonnée (en-tête du document)
valeur_2024 = 17838,
obj_2030 = 15256, # valeur numérique OU icônes de flèches
obj_2040 = NA,
obj_2050 = 13116,
tendance_observée = icon_down(type = "trend", text = paste0("2019-", an_max)), # icon_up(), icon_flat(), icon_down()
tendance_évaluée = 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 = "Consommation finale d'énergie par habitant <b>[kWh/hab]</b>",
valeur_2024 = 20961,
obj_2030 = icon_down(type = "obj"), # valeur numérique OU icônes de flèches
obj_2040 = NA, # On peut modifier 'Cible non chiffrée' en modifiant l'argument text = "" par exemple pour ne rien afficher
obj_2050 = icon_down(type = "obj"),
tendance_observée = icon_down(type = "trend", text = paste0("2019-", an_max)), # text obligatoire pour type = 'trend'
tendance_évaluée = icon_happy()
)
)
# 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 l'évolution de la consommation d'énergie annuelle dans le canton de Vaud, qu'elle soit utilisée pour la chaleur des bâtiments, pour la consommation électrique, pour les procédés industriels ou pour la mobilité. L'indicateur présente également l'évolution de la consommation par agent énergétique (produits pétroliers, électricité, gaz, ...) et celle de la consommation totale par habitant.
Il traduit indirectement l'adoption de nouveaux comportements en matière de consommation d'énergie, le recours à de nouvelles technologies et les progrès dans la gestion de la demande d'énergie.
# Cadre de référence {#sec-cadre-reference}
Les objectifs de consommation finale 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)). L’objectif général est d’atteindre une consommation finale annuelle de 15,3 TWh en 2030 et de 13,1 TWh en 2050.
Malgré une forte croissance démographique attendue dans le canton, la stratégie énergétique cantonale vise ainsi une diminution de la consommation d’énergie finale.
# Graphiques {#sec-graphique}
```{r}
# ---------------------------------------------------------
# Préparation des données à partir des données brutes
# ---------------------------------------------------------
# 1 - Données de consommation (lecture du document de StatVD: T08.03.01.xls directement depuis leur site)
url_statvd <- "https://www.vd.ch/fileadmin/user_upload/organisation/dfin/statvd/Dom_08/Tableaux/T08.03.01.xlsx"
tryCatch(
expr = {
download.file(url_statvd, destfile = "./data/T08.03.01.xlsx", mode = "wb",
method = "libcurl",
headers = c("User-Agent" = "Mozilla/5.0"))
conso_tj_read <- readxl::read_excel("./data/T08.03.01.xlsx",
skip = 6) |>
janitor::clean_names(case="screaming_snake")
# Nettoyage des données
conso_tj <- conso_tj_read |>
filter(!is.na(AGENT_ENERGETIQUE )) |>
mutate(across(starts_with("X"), as.character)) |>
rename_with(~ stringr::str_extract(.x, "\\d{4}"), tidyselect::starts_with("X")) |>
mutate(AGENT_ENERGETIQUE = recode(AGENT_ENERGETIQUE,"Combustibles" = "Combustibles pétroliers")) |>
slice(2:10)
# Création du file final avec pivot et changement de TJ en GWh
consommation_finale <- conso_tj |>
pivot_longer(
cols = -AGENT_ENERGETIQUE,
names_to = "ANNEE",
values_to = "TJ"
) |>
mutate(TJ = readr::parse_number(TJ, na = c("…", "...")),
ANNEE = as.numeric(ANNEE),
GWH = TJ /3.6) |>
filter(ANNEE >= 2000) |>
select(AGENT_ENERGETIQUE, ANNEE, GWH)
# Export du file dans dossier data
write_delim(consommation_finale,"./data/consommation_finale.csv", delim = ";")
},
error = function(e) stop("Download failed: Il faut vérifier que le doc de StatVD n'a pas changé", e$message),
warning = function(w) stop("Download failed: Il faut vérifier que le doc de StatVD n'a pas changé", w$message)
)
consommation_finale <- read_delim("./data/consommation_finale.csv", delim = ";")
# ---------------------------------------------------------
# 2 - Données POPULATION (lecture des données de StatVD qui ont été traitées. Voir code sous 02.11 Bases de données >> POPULATION >> 03_scripts_traitement)
# Variables sont : ANNEE et HABITANTS
tryCatch(
expr = {
read_delim("P:/DIREN/02 PILOTAGE DIREN/02.11 Bases de donnees/POPULATION/04_extractions_traitees/population.csv", delim=";") |>
write_delim("./data/population.csv", delim = ";")
},
error = function(e) message("Attention: la table population n'a pas pu être réactualisée avec les données brutes du P:/ ", e$message)
)
population <- read_delim("./data/population.csv", delim = ";")
# ---------------------------------------------------------
# 3 - Objectifs CoCEn
# A créer une fois
# objectifs <- tibble(
# ANNEE = c(2030, 2050),
# GWH_TOT = c(15256, 13116)
# )
# write_delim(objectifs,"./data/objectifs.csv", delim = ";")
objectifs <- read_delim("./data/objectifs.csv", delim = ";")
```
```{r}
#| label: fig-G1
##| fig-cap: "Consommation finale d'énergie: total et par habitant, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
#_______________________________________________________
# G1 - Consommation finale d'énergie: total et par habitant, Vaud
#_______________________________________________________
# Conso_tot (agréger la consommation totale par année)
conso_tot <- consommation_finale |>
group_by(ANNEE) |>
summarise(GWH_TOT = sum(GWH, na.rm = TRUE))
# Conso_hab (obtenir la consommation par habitant)
conso_hab <- conso_tot |>
left_join(population, by = "ANNEE") |>
mutate(KWH_HAB = (GWH_TOT*1000000) / HABITANTS) |>
select(ANNEE, KWH_HAB) |>
rename(GWH_TOT = KWH_HAB)
# Ajouter un trou pour séparer les consommations des objectifs
last_year <- max(conso_tot$ANNEE, na.rm = TRUE)
gap1 <- last_year + 1 # entre dernière année et 2030
gap2 <- 2030 + 1 # entre 2030 et 2050
annees_hist <- sort(unique(conso_tot$ANNEE))
annees_levels <- c(
annees_hist,
gap1,
2030,
gap2,
2050
)
# Ajout les trous à chaque dataset
add_missing_years <- function(df) {
tibble(ANNEE = annees_levels) |>
left_join(df, by = "ANNEE")
}
conso_tot <- add_missing_years(conso_tot)
conso_hab <- add_missing_years(conso_hab)
obj_graf <- add_missing_years(objectifs)
conso_tot <- conso_tot |>
mutate(Serie = "Consommation finale [GWh]")
conso_hab <- conso_hab |>
mutate(Serie = "Consommation par habitant [kWh/hab]")
obj_graf <- obj_graf |>
mutate(Serie = "Objectifs CoCEn 2019")
# Transformer ANNEE en facteur avec ordre
conso_tot <- conso_tot |>
mutate(ANNEE = factor(ANNEE, levels = annees_levels))
conso_hab <- conso_hab |>
mutate(ANNEE = factor(ANNEE, levels = annees_levels))
obj_graf <- obj_graf |>
mutate(ANNEE = factor(ANNEE, levels = annees_levels))
# Coefficient
coef <- 1.4*max(conso_tot$GWH_TOT, na.rm = TRUE) /
max(conso_hab$GWH_TOT, na.rm = TRUE)
g1 <- ggplot() +
# Bars (objectives and consumption)
geom_col_interactive(
data = obj_graf,
aes(x = ANNEE, y = GWH_TOT, fill = Serie,
tooltip = paste("Objectifs CoCEn ", ANNEE, " : ", label_number(accuracy = 1, big.mark = "'")(GWH_TOT), "GWh"),
data_id = ANNEE),
width = 0.7
) +
geom_col_interactive(
data = conso_tot,
aes(x = ANNEE, y = GWH_TOT, fill = Serie,
tooltip = paste(Serie |> str_remove("\\[.*\\]"), ANNEE, ":", label_number(accuracy = 1, big.mark = "'")(GWH_TOT), "GWh"),
data_id = ANNEE),
width = 0.7
) +
# Line (per capita) – use factor + group = 1
geom_line(
data = conso_hab,
aes(x = ANNEE, y = GWH_TOT * coef, color = Serie, group = 1),
linewidth = 0.4,
) +
geom_point_interactive(
data = conso_hab,
aes(
x = ANNEE,
y = GWH_TOT * coef,
color = Serie,
tooltip = paste(Serie |> str_remove("\\[.*\\]"), ANNEE, " : " , label_number(accuracy = 1, big.mark = "'")(GWH_TOT), "kWh/hab"),
data_id = ANNEE
),
size = 2
)+
# Colors
scale_fill_manual(
values = c(
"Consommation finale [GWh]" = "#2C7FB8",
"Objectifs CoCEn 2019" = "grey80"
),
name = NULL
) +
scale_color_manual(
values = c("Consommation par habitant [kWh/hab]" = "#E6550D"),
name = NULL
) +
# Y axis with secondary axis
scale_y_continuous(
name = "Consommation finale (GWh)",
labels = scales::label_number(big.mark = "'", decimal.mark = "."),
sec.axis = sec_axis(~ . / coef,
name = "Consommation par habitant (kWh / hab)",
labels = scales::label_number(big.mark = "'", decimal.mark = "."))
) +
scale_x_discrete(
drop = FALSE,
labels = function(x) {
num_x <- as.numeric(as.character(x))
ifelse(
num_x %in% c(gap1, gap2),
"", # cacher les gaps
ifelse(num_x %% 5 == 0, num_x, "") # afficher seulement tous les 5 ans
)
}
)+
guides(
fill = guide_legend(order = 2, nrow = 1, byrow = TRUE), # légendes sur 3 lignes d'un histogramme
color = guide_legend(order = 1, nrow = 1, byrow = TRUE) # légendes sur 1 lignes d'un graphique en ligne
)+
# Titles and caption
labs(
title = "Consommation finale d'énergie: total et par habitant, Vaud",
x = NULL,
caption = "Source: StatVD \nEtat au 25.11.2025"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", size = 12),
legend.position = "bottom",
legend.box = "vertical",
legend.box.just = "left", # aligne les blocs à gauche
legend.justification = "left", # aligne les textes des légendes à gauche
legend.spacing.y = unit(0, "pt"), # espace entre blocs
legend.text = element_text(size = 10),
plot.caption = element_text(hjust = 0,face = "italic", size = 9, margin = margin(t = 5)),
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.title = element_text(size = 12),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g1,
# 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_Consommation_finale_energie_2000-{an_max}.png"), width = 8, height = 6, dpi = 300)
```
```{r}
#| label: fig-G2
##| fig-cap: "Consommation finale par agent énergétique, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
#_______________________________________________________
# G2 - Consommation finale par agent énergétique, Vaud
#_______________________________________________________
# Lecture des données
g2_long <- consommation_finale
couleurs_agents <- c(
"Combustibles pétroliers" = "#c78a92", # softer pink
"Carburants" = "#8b4d3b", # muted brown
"Electricité" = "#f0d47a", # soft yellow
"Gaz" = "#6a8caf", # muted blue
"Autres renouvelables" = "#b39bc8", # soft purple
"Bois" = "#a3b97c", # muted green
"Chaleur à distance" = "#c7e392", # light green
"Déchets" = "#a0a0a0", # medium grey
"Charbon" = "#4d4d4d" # dark grey instead of black
)
# 1. Identifier la dernière année
derniere_annee <- max(g2_long$ANNEE, na.rm = TRUE)
# 2. Créer l’ordre des agents selon la valeur de la dernière année
ordre_agents <- g2_long |>
filter(ANNEE == derniere_annee) |>
arrange(desc(GWH)) |> # décroissant (du plus grand au plus petit)
pull(AGENT_ENERGETIQUE)
# 3. Appliquer l'ordre des agents ci-dessus
g2_long <- g2_long |>
mutate(AGENT_ENERGETIQUE = factor(AGENT_ENERGETIQUE, levels = ordre_agents))
# 4. Transformer Agent en facteur ordonné
tooltip_year <- g2_long |>
arrange(ANNEE, desc(GWH)) |>
group_by(ANNEE) |>
summarise(
tooltip_year = paste0(
"<b>", first(ANNEE), "</b><br/>",
paste(
paste0(
AGENT_ENERGETIQUE, " : ",
scales::label_number(accuracy = 1, big.mark = "'")(GWH),
"GWh"
),
collapse = "<br/>"
)
),
.groups = "drop"
)
# Préparation des tooltips
# g2_long <- g2_long |>
# left_join(tooltip_year, by = "ANNEE")
# Graphique
g2 <- ggplot(g2_long, aes(x = ANNEE, y = GWH, color = AGENT_ENERGETIQUE)) +
geom_line(linewidth = 0.4) +
# Ajout interactivité
ggiraph::geom_point_interactive(
aes(
tooltip = paste0(
"Consommation ", AGENT_ENERGETIQUE, " ", ANNEE , " : ",
scales::label_number(accuracy = 1, big.mark = "'")(GWH),
"GWh"
),
data_id = paste(AGENT_ENERGETIQUE, ANNEE)
),
size = 2
) +
# Couleurs personnalisées
scale_color_manual(values = couleurs_agents) +
# Titres et labels
labs(
title = "Consommation finale par agent énergétique, Vaud",
y = "Consommation finale (GWh)",
x = NULL,
color = "Agent énergétique",
caption = "Source: StatVD \nEtat au 25.11.2025"
) +
# Thème
theme_minimal(base_size = 13) +
theme(
plot.title = element_text(face = "bold", size=12),
legend.position = "right",
# Activation du rendu HTML pour le caption
plot.caption = element_text(hjust = 0, face = "italic", size = 7, margin = margin(t = 5)), # note sous graphique
plot.caption.position = "plot",
# Marges pour laisser respirer le bas du graphique
plot.margin = margin(10, 20, 20, 20),
legend.title = element_text(size = 11),
legend.text = element_text(size = 9),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g2,
# 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"
)
)
)
)
# obsindVD::girafe_light(g2) |>
# ggiraph::girafe_options(
# ggiraph::opts_tooltip(
# css = "
# background-color: rgba(255, 255, 255, 0.85);
# border: 1px solid #cccccc;
# padding: 8px;
# border-radius: 6px;
# "
# )
# )
ggsave(glue("./images/g2_Consommation_finale_par_agent_energetique_2000-{an_max}.png"), width = 8, height = 6, dpi = 300)
```
# Analyse {#sec-analyse}
<!-- Ne rien documenter dans cette en-tête, utiliser les sous-titres ci-dessous -->
## Description statistique {#sec-analyse-description}
En 2024, la consommation finale d’énergie dans le canton de Vaud s’est élevée à 17’550 GWh, soit une hausse de 2,0% par rapport à 2023. Malgré cette progression annuelle, une tendance générale à la baisse est observée depuis 2019 – année de l’adoption de la Conception cantonale de l’énergie (CoCEn) – avec une diminution moyenne de 1,1% par an (voir @fig-G1).
En tenant compte de l’évolution de la population, une baisse annuelle de 2,2% est observée depuis 2019, ce qui a conduit la consommation à passer sous les 21'000 kWh par habitant en 2024.
Entre 2019 et 2024, les diminutions les plus marquées concernent les énergies fossiles : -24 % pour les combustibles fossiles (notamment le mazout), -13 % pour le gaz et -8 % pour les carburants. Les consommations d’électricité, de bois et de chaleur à distance sont restées relativement stables sur la période. Quant aux autres énergies thermiques renouvelables, elles ont plus que doublé, principalement grâce au développement des pompes à chaleur utilisant la chaleur extraite de l’environnement (voir @fig-G2).
## Interprétation {#sec-analyse-interpretation}
La situation actuelle de la quantité d'énergie consommée est considérée comme insatisfaisante, comme d'ailleurs l’évolution constatée entre 2019 et 2024.
Bien qu’une légère diminution soit observée, il faudrait une baisse beaucoup plus forte pour atteindre les objectifs à moyen terme (2030) établis à 15'256 GWh. Il est toutefois important de souligner que la tendance à la baisse observée intervient alors même que la plupart des facteurs exerçant une pression à long terme sur la consommation énergétique sont en hausse, qu’il s’agisse de la population résidente permanente, du produit intérieur brut, du parc immobilier ou encore du nombre de véhicules à moteur.
## Périmètre et limites {#sec-analyse-perimetre}
Les carburants utilisés pour le travail industriel et la navigation de plaisance (bateaux de loisirs privés), ainsi que l'excédent d'importation de bois de feu et les déboisements hors forêts, ne sont pas inclus.
Avec l'ajout de l'énergie thermique issue de sources renouvelables en 2015, il y a rupture de série entre 2014 et 2015. Cette catégorie comprend l’énergie thermique renouvelable qui n’est pas comprise dans les autres agents énergétiques. Il s’agit de la production nette issue des pompes à chaleur (chaleur extraite de l’environnement) et de l’énergie produite par le solaire thermique, par la géothermie, par la biomasse agricole ainsi que par les déchets méthanisables.
Les données de 2006 à 2023 ont été révisées à la suite d’adaptations méthodologiques intervenues en 2025, dont principalement l’attribution à l’électricité de la quantité d’électricité autoconsommée par l’usine d’incinération et de traitement des déchets TRIDEL. Auparavant la totalité était attribuée aux déchets.
Le mode de calcul de la population selon Statistique Vaud a changé au 1.1.2017. La population a beaucoup augmenté, en partie en raison de la prise en compte des fonctionnaires internationaux et des requérants d’asile présents depuis moins d’un an sur le territoire. Les valeurs de consommation par habitant ont donc baissé en partie « artificiellement ».
# Tableau {#sec-tableaux}
```{r}
#| label: tbl-T1
##| tbl-cap: Consommation finale d'énergie, Vaud
conso_tot_wide <- conso_tot |>
select(ANNEE, GWH_TOT) |>
mutate(ANNEE = as.integer(as.character(ANNEE)))
conso_hab_wide <- conso_hab |>
rename(KWH_HAB = GWH_TOT) |>
select(ANNEE, KWH_HAB) |>
mutate(ANNEE = as.integer(as.character(ANNEE)))
conso_ae_wide <- consommation_finale |>
pivot_wider(names_from = AGENT_ENERGETIQUE, values_from = GWH) |>
mutate(ANNEE = as.integer(ANNEE))
df <- conso_tot_wide |>
bind_rows(objectifs |> mutate(ANNEE = as.integer(ANNEE))) |>
filter(!is.na(GWH_TOT)) |>
left_join(conso_ae_wide, by = "ANNEE") |>
left_join(conso_hab_wide, by = "ANNEE")
t1 <- df |>
mutate(across(everything(), \(col) na_if(col, y = 0))) |> # on change les 0 en NA comme ça sub_missing() ci-après transforme les 0 et les NA en "-" (par exemple)
# Years multiple of 5, OR the 5 latest years
filter(
ANNEE %% 5 == 0 |
ANNEE >= max(consommation_finale$ANNEE) - 4) |>
gt() |>
tab_header(title = md("**Consommation finale d'énergie**"), # ajout du titre en gras avec md() + syntaxe **
subtitle = "Estimation de la consommation finale d'énergie par agent énergétique, Vaud") |>
fmt_number(columns = where(is.double), sep_mark = "'", decimals = 0) |>
cols_label(
ANNEE = "Année",
GWH_TOT = "Total",
KWH_HAB = "Par habitant"
) |>
cols_width(everything() ~ pct(100 / ncol(df))) |>
tab_style(style = cell_text(weight = "bold"),
locations = list(cells_body(columns = c("ANNEE", "GWH_TOT", "KWH_HAB")),
cells_column_labels(columns = c("ANNEE", "GWH_TOT", "KWH_HAB")))) |>
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") |>
cols_label_with(
columns = -c(ANNEE, KWH_HAB),
fn = \(col) md(paste0(col, "\n\n[GWh]"))
) |>
cols_label_with(
columns = KWH_HAB,
fn = \(col) md(paste0(col, "\n\n[kWh / hab]"))
) |>
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") |>
sub_missing(columns = everything(), missing_text = "-") |> # remplacé la gestion des NA par '-' au lieu de ''
#fmt_missing(columns = everything(), missing_text = "") |>
tab_footnote(footnote = "Non compris les carburants utilisés pour le travail industriel et pour la navigation de plaisance (bateaux de loisir privés), ainsi que l'excédent d'importation de bois de feu et les déboisements hors forêts.",
locations = cells_title(groups = "title"),
placement = "right") |>
tab_footnote(footnote = "Rupture de série en 2015 avec l'ajout de l'énergie thermique issue de source renouvelable. Série 2006-2023 révisée en 2025.",
locations = cells_body(columns = ANNEE, rows = ANNEE == 2015),
placement = "right") |>
tab_footnote(footnote = "Objectifs fixés dans la conception cantonale de l'énergie (CoCEn 2019).",
locations = cells_body(columns = ANNEE, rows = ANNEE > year(Sys.Date())),
placement = "right") |>
tab_footnote(footnote = "Comprend la production nette issue des pompes à chaleur (chaleur extraite de l'environnement) et l'énergie produite par le solaire thermique, par la géothermie, par la biomasse agricole ainsi que par les déchets méthanisables.",
locations = cells_column_labels(columns = "Thermique renouvelable"),
placement = "right") |>
tab_style(
style = cell_borders(sides = "top", style = "dashed", color = "lightgrey", weight = px(1)),
locations = cells_body(rows = ANNEE == min(objectifs$ANNEE)) # applies to first row
) |>
opt_table_outline(style = "solid", width = px(2), color = "lightgrey")|>
# tab_options(footnotes.align = "left") |>
tab_source_note(
source_note = md("*Sources : StatVD / CFF / DGE-DIREN<br>Etat au 25.11.2025*")
)
t1
gtsave(t1, glue("./images/t1_Consommation_finale_2015-{an_max}.html"))
```
Pour consulter ou télécharger les données détaillées par année, veuillez vous reporter aux [annexes](#annexes) .
# Méthode {#sec-methode}
La statistique de la consommation finale d’énergie est une statistique de synthèse établie par Statistique Vaud. Elle se fonde sur plusieurs enquêtes relatives à la « consommation finale d'énergie » (combustibles pétroliers, carburants (consommés dans l’agriculture, l’aviation, la navigation et par le trafic routier), électricité, gaz, bois, chaleur à distance, déchets, énergie thermique renouvelable) pour informer sur la consommation d’énergie pour la chaleur des bâtiments, la consommation électrique, les procédés industriels et la mobilité.
Les données se basent si possible sur des données vaudoises. Quand ces dernières ne sont pas disponibles, elles sont estimées à partir de données nationales.
Il est important de préciser que l’électricité et la chaleur à distance ne sont pas des sources d’énergie en soi, mais des vecteurs énergétiques. Elles sont produites à partir de différentes sources primaires, dont il n’est pas toujours possible de déterminer précisément la part dans les statistiques, en particulier pour l’électricité.
Les chiffres relatifs à la population résidante moyenne sont ceux de la statistique de l'état annuel de la population de Statistique Vaud.
La consommation annuelle finale d'énergie (C<sub>a</sub>) correspond à la consommation totale d’énergie livrée aux utilisateurs finaux (ménages, industries, services, transports).
C<sub>a</sub> = C<sub>Combustibles</sub> + C<sub>Carburants</sub> + C<sub>Gaz</sub> + C<sub>Charbon</sub> + C<sub>Bois</sub> + C<sub>Électricité</sub> + C<sub>Chaleur</sub> + C<sub>Déchets</sub>
Une description détaillée des méthodes de calcul pour estimer la consommation finale d’énergie se trouvent dans une fiche méthode spécifique (Voir sous la section « 8. Documents en lien »).
# Comparaison {#sec-comparaison}
Dans le système d'indicateurs de développement durable [MONET](https://www.bfs.admin.ch/bfs/fr/home/statistiques/developpement-durable/monet-2030/indicateurs/consommation-energetique-finale-source-energie.html) de l’OFS, l’indicateur retenu (Consommation finale d'énergie par agent énergétique - Parts en pourcent) montre la part attribuée aux principaux agents énergétiques dans la consommation de l’énergie finale.
Dans une optique de développement durable, la part des énergies fossiles (produits pétroliers, gaz) doit diminuer.
En 2024, les produits pétroliers représentaient 46% de l’énergie finale consommée en Suisse. Dans le canton de Vaud, cette part était de 41%. Pour l’électricité, les parts étaient respectivement de 27% et 25%, pour le gaz de 12% et 19%, et pour le reste 15%, que ce soit pour l’ensemble de la Suisse ou le canton de Vaud.
Cet indicateur se trouve également dans le système d’indicateurs de durabilité pour le canton de Vaud ([OCDC](https://www.vd.ch/themes/environnement/durabilite/les-outils-pratiques-de-durabilite/indicateurs-de-developpement-durable/indicateurs-pour-le-canton-de-vaud/22-energie/221-indicateur)).
# Références {#sec-ref}
<!-- Ne rien documenter dans cette en-tête, utiliser les sous-titres ci-dessous -->
## Fiches associées {#sec-ref-fiches}
**Fiches Méthode** :
* MET_08.01.01.01 : Méthode pour le calcul de la consommation finale d'énergie. Estimation de la consommation finale d’énergie par agent énergétique (*disponible sur demande*)
**Fiches Indicateur** :
* [IND_08.01.02.01 : Consommation finale d'électricité, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.01.02.01_Consommation_Elec.html)
* [IND_08.01.03.02 : Part d'énergies renouvelables pour la chaleur des bâtiments, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.01.03.02_Consommation_Batiments_Renouvelables.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)
- [OFS – MONET 2030 : Consommation finale d’énergie par personne](https://www.bfs.admin.ch/bfs/fr/home/statistiques/developpement-durable/monet-2030/indicateurs/consommation-energetique-finale-source-energie.html)
- [OCDC – Indicateurs de développement durable : Consommation finale d’énergie](https://www.vd.ch/themes/environnement/durabilite/les-outils-pratiques-de-durabilite/indicateurs-de-developpement-durable/indicateurs-pour-le-canton-de-vaud/22-energie/221-indicateur)
# 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(
"1 Gigawatheure (GWh)",
"Energie finale",
"Consommation finale",
"Combustibles pétroliers",
"Carburants"
))
# Ajouter Agents énergétiques
# 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}
<!-- Si on ne souhaite pas que cette section s'affiche, utiliser cette en-tête # Annexes {#sec-annexes .unnumbered .hidden .unlisted} -->
<!-- Optionnel : permet d'y présenter des tableaux, graphiques, ou extraits de texte qui seraient trop longs à insérer dans le texte principal de la fiche indicateur -->
## Consommation finale par agent énergétique et année {.unnumbered .unlisted}
```{r}
# Consommation finale par agent énergétique
datatable(
consommation_finale,
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;")
```
## Population résidante permanente par année {.unnumbered .unlisted .hidden}
```{r}
datatable(
population,
extensions = 'Buttons', # Active l'extension pour les boutons
rownames = FALSE,
options = list(
autoWidth = TRUE,
dom = '<"top"fB>rt<"bottom"ip>', # B = Buttons, t = table, p = pagination
buttons = c('csv'), # Formats de téléchargement
filename = paste0(selected_metadata['Identifiant'], "_pop_par_année_", Sys.Date()), # Nom du fichier
searching = FALSE, # Supprime la case "Search"
pageLength = 5, # Nombre de lignes par défaut
language = list(url = "https://cdn.datatables.net/plug-ins/1.13.6/i18n/fr-FR.json")
)
) |>
formatRound(
columns = 'HABITANTS',
digits = 0,
mark = "'", # Séparateur de milliers
dec.mark = "," # Séparateur de décimales
) |>
htmltools::div(style = "width: 50%; margin-left: 0;")
```