---
title: "Consommation finale d'électricité"
subtitle: "Electricité autoconsommée ou soutirée du réseau, Vaud"
lang: fr
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: 1 # 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.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: Commune # 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: 11 # Valeur numérique : 0=Non-défini/1=Janvier/2=Février, etc.
disponibleDepuis: 2015 # 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: 84546523-3176-4de1-83a8-e4d45e650658 # !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']])
```
```{r}
# Préciser quelle est l'année maximale recherchée (permet d'automatiser la recherche du bon dossier et fichier pour les données PRONOVO)
an_max <- 2024
```
::: {.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}
# ---------------------------------------------------------
# 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 = "Consommation finale d'électricité, Vaud <b>[GWh]</b>", # Par défaut = titre issu de la métadonnée (en-tête du document)
valeur_2024 = 4514,
obj_2030 = 4669, # valeur numérique OU icônes de flèches
obj_2040 = NA,
obj_2050 = 4962,
tendance_observée = icon_up(type = "trend", text = paste0("2019-", an_max)), # icon_up(), icon_flat(), icon_down()
tendance_évaluée = "..." # 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'électricité par habitant, Vaud <b>[kWh/hab]</b>",
valeur_2024 = 5301,
obj_2030 = icon_down(type = "obj"), # valeur numérique OU icônes de flèches
obj_2040 = NA, #icon_up(type = "obj"), # 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_flat(type = "trend", text = paste0("2019-", an_max)), # 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 la quantité totale d'électricité consommée annuellement sur le territoire vaudois en se basant sur l'électricité distribuée par les réseaux, la consommation des CFF, ainsi que l’électricité produite localement et autoconsommée. Il traduit indirectement l'adoption de nouveaux comportements en matière de consommation d'électricité, le recours à des appareils d'un meilleur rendement énergétique et les évolutions dans la gestion de la consommation d’électricité.
# 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)). Les valeurs cibles définies en 2019 (4'379 GWh<sub>él</sub> en 2030 et 4'532 GWh<sub>él</sub> en 2050) ne tiennent toutefois pas compte de la hausse attendue de la consommation d’électricité due aux remplacements de chauffages fossiles par des pompes à chaleur (2030 : + 290 GWh<sub>él</sub> ; 2050 : +430 GWh<sub>él</sub>). Les nouvelles valeurs cibles sont par conséquent 4'669 GWh<sub>él</sub> pour 2030 et 4'962 GWh<sub>él</sub> pour 2050. Il est à relever que les chiffres pour l’électromobilité sont en cours de révision. Les chiffres de consommation ci-dessus incluent les données de la CoCEn 2019 pour l’électromobilité.
# Graphique {#sec-graphique}
```{r}
# ---------------------------------------------------------
# Préparation des données à partir des données brutes
# ---------------------------------------------------------
# 1 - Données de consommation finale d'énergie électrique (lecture du document de StatVD: T08.03.02.xls directement depuis leur site)
url_statvd <- "https://www.vd.ch/fileadmin/user_upload/organisation/dfin/statvd/Dom_08/Tableaux/T08.03.02.xlsx"
tryCatch(
expr = {
download.file(url_statvd, destfile = "./data/T08.03.02.xlsx", mode = "wb",
method = "libcurl",
headers = c("User-Agent" = "Mozilla/5.0"))
conso_elec_read <- readxl::read_excel("./data/T08.03.02.xlsx",
skip = 6) |>
janitor::clean_names(case="screaming_snake")
# Nettoyage des données
conso_elec_tot <- conso_elec_read |>
filter(!is.na(ANNEE)) |>
rename(GWH_TOT = EN_G_WH) |>
mutate(ANNEE = str_sub(ANNEE, 1, 4)) |>
# supprimer les lignes qui ne sont pas des années
filter(grepl("^\\d{4}$", ANNEE)) |>
mutate(ANNEE = as.numeric(ANNEE)) |>
filter(ANNEE >= 2015) |>
select(ANNEE, GWH_TOT)
# Export du file dans dossier data
write_delim(conso_elec_tot,"./data/conso_elec_tot.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)
)
conso_elec_tot <- read_delim("./data/conso_elec_tot.csv", delim = ";")
# ---------------------------------------------------------
# 2 - Données auto-consommation (lecture des données traitées (en kWh) sous meta_pronovo_résumé_2015-2022_2023-05-17.xlsx qui se trouve sous: P:\DIREN\02 PILOTAGE DIREN\02.11 Bases de donnees\PRONOVO\04_extractions_traitees))
tryCatch(
expr = {
# Chemin du dossier
dossier <- glue("P:/DIREN/02 PILOTAGE DIREN/02.11 Bases de donnees/PRONOVO/04_extractions_traitees/Resultats_{an_max}")
# Lister tous les fichiers qui commencent par "meta_pronovo_résumé_2015-" et contiennent an_max (défini plus tôt)
fichiers <- list.files(
path = dossier,
pattern = glue("^meta_pronovo_résumé_2015-{an_max}.*\\.xlsx$"),
full.names = TRUE
)
# Extraire la date finale du nom de fichier et garder le plus récent
fichier_sel <- fichiers %>%
tibble(fichier = .) %>%
mutate(
# extraire la date sous forme YYYY-MM-DD
date_fin = str_extract(fichier, "\\d{4}-\\d{2}-\\d{2}"),
date_fin = as.Date(date_fin)
) %>%
arrange(desc(date_fin)) %>% # trier par date décroissante
slice(1) %>% # garder le premier (plus récent)
pull(fichier) # extraire le chemin complet
# Lire le fichier le plus récent
pronovo <- read_xlsx(fichier_sel, sheet = "Autoconsommation")|>
janitor::clean_names(case="screaming_snake")
autoconso_temp <- pronovo |>
filter(CATEGORIE_DIREN == "Solaire") |>
rename_with(~ stringr::str_extract(.x, "\\d{4}"), tidyselect::starts_with("X"))
# en faire un pivot long
autoconso <- autoconso_temp |>
pivot_longer(
cols = -CATEGORIE_DIREN,
names_to = "ANNEE",
values_to = "KWH_AUTOCONSO" ) |>
# Convertir ANNEE en numérique pour pouvoir trier ou filtrer
mutate(ANNEE = as.integer(ANNEE)) |>
# transformer autoconso de kWh en GWh
mutate(GWH_AUTOCONSO = KWH_AUTOCONSO / 1000000) |>
select(-CATEGORIE_DIREN, -KWH_AUTOCONSO)
# Export du file dans dossier data
write_delim(autoconso,"./data/autoconso.csv", delim = ";")
},
error = function(e) stop("Download failed: Il faut vérifier que le doc soittoujours ok", e$message),
warning = function(w) stop("Download failed: Il faut vérifier que le doc soittoujours ok", w$message)
)
autoconso <- read_delim("./data/autoconso.csv", delim = ";")
# ---------------------------------------------------------
# 3 - 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 = ";") |>
filter(ANNEE >= 2015 & ANNEE <= an_max)
# ---------------------------------------------------------
# 4 - Objectifs CoCEn
# A créer une fois
#
# objectifs <- tibble(
# ANNEE = c(2030, 2050),
# GWH_TOT = c(4669, 4962)
# )
# write_delim(objectifs,"./data/objectifs.csv", delim = ";")
objectifs <- read_delim("./data/objectifs.csv", delim = ";")
```
```{r}
#| label: fig-G1
##| fig-cap: Consommation finale d'électricité, Vaud
#| fig.width: 8 # Changement de 12 à 8 pour augmenter la taille relative des textes !
#| fig.asp: 0.6
#_______________________________________________________
# G1 - Consommation finale d'électricité: électricité autoconsommée et soutirée du réseau, Vaud
#_______________________________________________________
# Conso_tot (déduire GWH_RESEAU à partir de GWH_TOT et GWH_AUTOCONSO)
conso_tot <- conso_elec_tot |>
left_join(autoconso, by = "ANNEE") |>
mutate( GWH_AUTOCONSO = replace_na(GWH_AUTOCONSO, 0),
GWH_RESEAU = GWH_TOT - GWH_AUTOCONSO)
# 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)
# en faire un pivot_longer de conso_tot pour avoir tout en un
conso_tot_long <- conso_tot |>
pivot_longer(
cols = c(GWH_AUTOCONSO, GWH_RESEAU),
names_to = "Type",
values_to = "GWH"
)
# 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_long <- add_missing_years(conso_tot_long)
conso_tot_long <- conso_tot_long |>
filter(!is.na(Type))
conso_hab <- add_missing_years(conso_hab)
obj_graf <- add_missing_years(objectifs)
conso_tot_long <- conso_tot_long |>
mutate(Serie = "Consommation finale d'électricité [GWh]")
conso_hab <- conso_hab |>
mutate(Serie = "Consommation par habitant [kWh / hab]")
obj_graf <- obj_graf |>
mutate(Serie = "Objectifs CoCEn")
# Transformer ANNEE en facteur avec ordre
conso_tot_long <- conso_tot_long |>
mutate(ANNEE = factor(ANNEE, levels = annees_levels))
conso_tot_long <- conso_tot_long |>
mutate(Type = factor(Type, levels = c("GWH_RESEAU", "GWH_AUTOCONSO")))
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.3*max(conso_tot$GWH_AUTOCONSO + conso_tot$GWH_RESEAU, na.rm = TRUE) /
max(conso_hab$GWH_TOT, na.rm = TRUE)
conso_tot_long <- conso_tot_long |>
filter(!is.na(Type)) |>
tidyr::complete(
ANNEE,
Type = c("GWH_RESEAU", "GWH_AUTOCONSO"),
fill = list(GWH = 0)
)
conso_tot_long <- conso_tot_long |>
mutate(
Type = recode(Type,
GWH_AUTOCONSO = "Electricité autoconsommée",
GWH_RESEAU = "Electricité soutirée au réseau"
)
)
g1_plot <- ggplot() +
# Bars (objectives )
geom_col_interactive(
data = obj_graf,
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,
position = position_nudge(x = -0.05),
color = NA
) +
# Barres empilées (autoconsommation et réseau)
geom_col_interactive(
data = conso_tot_long,
aes(x = ANNEE, y = GWH,
fill = Type, #était Serie
#color = Type,
tooltip = paste(Type |> str_remove("\\[.*\\]"), " en ", ANNEE, " : ", label_number(accuracy = 1, big.mark = "'")(GWH), "GWh"),
data_id = paste(ANNEE, Type, sep = "_"), # !!MWR : correctif pour que le surlignage se fasse uniquement sur l'objet sélectionné et pas sur tous les objects de l'année
width = 0.7
),
position = "stack", # !! MWR: j'ai sorti position qui était dans aes() --> générait des avertissements
color = NA
) +
# !! MWR: ajout des labels au-dessus des colonnes ( = totaux) avec ce geom_text()
geom_text(
data = conso_tot |> bind_rows(objectifs),
inherit.aes = FALSE,
aes(
x = as.factor(ANNEE),
y = GWH_TOT,
label = label_number(accuracy = 1, big.mark = "'")(GWH_TOT)
),
vjust = -0.5,
size = 3
) +
# Line (per capita) – use factor + group = 1
geom_line(
data = conso_hab,
aes(x = ANNEE, y = GWH_TOT * coef, color = Serie, group = 1),
linewidth = 1.2,
) +
geom_point_interactive(
data = conso_hab,
aes(
x = ANNEE,
y = GWH_TOT * coef,
color = Serie,
tooltip = paste(Serie |> str_remove("\\[.*\\]"), ":", label_number(accuracy = 1, big.mark = "'")(GWH_TOT), "kWh/hab"),
data_id = ANNEE
),
size = 1.5
)+
scale_fill_manual(
values = c(
"Electricité autoconsommée" = "#1b9e77",
"Electricité soutirée au réseau" = "#f0d47a",
"Objectifs CoCEn" = "grey80"
),
name = NULL
) +
# guides(
# fill = guide_legend(nrow = 2, byrow = TRUE),
# color = guide_legend(nrow = 2, byrow = TRUE)
# )+
guides(
fill = guide_legend(order = 2, nrow = 2, byrow = FALSE),
color = guide_legend(order = 1, nrow = 1, byrow = FALSE)
)+
scale_color_manual(
values = c(
"Electricité autoconsommée" = "#1b9e77",
"Electricité soutirée au réseau" = "#f0d47a",
"Objectifs CoCEn" = "grey80",
"Consommation par habitant [kWh / hab]" = "#E6550D"
),
name = NULL
)+
# Y axis with secondary axis
scale_y_continuous(
name = "Consommation finale d'électricité [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 = ".")),
# !! MWR: ajout d'un facteur d'expansion pour éviter que les labels geom_text() soient coupés verticalement
expand = expansion(mult = c(0, 0.1))
) +
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
)
}
)+
# Titles and caption
labs(
title = str_wrap("**Consommation finale d'électricité: total et par habitant**", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
subtitle = str_wrap("Electricité autoconsommée ou soutirée du réseau, Vaud", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
caption = "Source: StatVD / DGE-DIREN<br>Etat au 25.11.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.box.just = "left",
legend.justification = "left",
legend.text = element_text(size = 10),
legend.title = element_text(size = 12),
legend.spacing.y = unit(0, "pt"),
legend.margin = margin(0, 0, 0, 0),
legend.box.margin = margin(0, 0, 0, 0),
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_Consommation_electricite_2015-{an_max}.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}
En 2024, la consommation finale d’électricité dans le canton de Vaud s’est élevée à 4'514 GWh, soit une hausse de 2,8% par rapport à 2023 (voir @fig-G1). Malgré cette progression annuelle, la demande d’électricité est restée relativement stable depuis 2019 - année de l’adoption de la Conception cantonale de l’énergie (CoCEn) - avec une hausse moyenne de 0,5% par an.
En tenant compte de l’évolution de la population, une baisse annuelle de 0,6% est observée depuis 2019, ce qui correspond à une consommation de 5'275 kWh par habitant en 2024.
La part d’électricité autoconsommée, c’est‑à‑dire produite et consommée sur place (notamment grâce au photovoltaïque), est en forte progression depuis 2019 (voir @tbl-T1). Bien qu’elle ne représente encore que 3,5 % de la consommation totale d’électricité, elle atteint néanmoins 160 GWh en 2024.
## Interprétation {#sec-analyse-interpretation}
L’année 2022 correspondait à l’objectif à court terme de la CoCEn 2019. La consommation d’électricité visée pour cette année-là était de 4'479 GWh<sub>él</sub> (4'309 GWh<sub>él</sub> pour les ménages et l’industrie + 170 GWh<sub>él</sub> pour le développement des pompes à chaleur - PAC). Avec 4’514 GWh<sub>él</sub>, la consommation d’électricité en 2024 se situe par conséquent dans les projections de la CoCEn. Ceci alors que la plupart des facteurs exerçant une pression à long terme sur la consommation électrique sont en hausse, qu’il s’agisse de la population résidante permanente, du produit intérieur brut, du parc immobilier, de la flotte de véhicules électriques ou des pompes à chaleur.
Il est à relever que, durant l’hiver 2022-2023, des objectifs d’économie d’électricité (-10%) et de gaz (¬ 15%) avaient été fixés par la Confédération afin de faire face à une éventuelle situation de pénurie. Les objectifs de réduction de la consommation de gaz ont été largement atteints ; ce n’est cependant pas le cas pour l’électricité. L’économie d’électricité mesurée (environ -4%) a été nettement inférieure à ce qui était souhaité. Ceci montre la difficulté de réduire la consommation électrique malgré une hausse de prix très conséquente.
## Périmètre et limites {#sec-analyse-perimetre}
Le mode de calcul de la population selon Statistique Vaud a changé au 1.1.2017. La population a beaucoup augmenté en raison de la prise en compte des fonctionnaires internationaux et des requérants d’asile présents depuis moins d’un an, ce qui n’était pas pris en compte jusqu’alors. Les valeurs de consommation par habitant ont donc baissé en partie « artificiellement ».
# Tableaux {#sec-tableaux}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
```{r}
#| label: tbl-T1
##| tbl-cap: Consommation finale d'électricité, Vaud # !! MWR: il faut commenter/supprimer tbl-cap si on veut juste avoir 'Tableau X' affiché sans le titre. Mettre un string vide n'est pas supporté !
conso_tot <- conso_tot |>
mutate(ANNEE = as.integer(ANNEE))
# Changer nom de variable chez conso_hab
conso_hab_temp <- conso_hab |>
mutate(KWH_HAB = GWH_TOT,
ANNEE = as.integer(as.character(ANNEE))) |>
select(ANNEE, KWH_HAB)
conso_tot_hab <- conso_tot |>
left_join(conso_hab_temp, by= "ANNEE")
df <- conso_tot_hab |>
bind_rows(objectifs |> mutate(ANNEE = as.integer(ANNEE))) |>
filter(!is.na(GWH_TOT)) |>
select(ANNEE, GWH_TOT, GWH_RESEAU, GWH_AUTOCONSO, KWH_HAB)
t1 <- df |>
mutate(across(everything(), \(col) na_if(col, y = 0))) |> # !! MWR: on change les 0 en NA comme ça sub_missing() ci-après transforme les 0 et les NA en "-" (par exemple)
gt() |>
tab_header(title = md("**Consommation finale d'électricité**"), # !! MWR: ajout du titre en gras avec md() + syntaxe **
subtitle = "Electricité soutirée du réseau ou autoconsommée, Vaud") |>
fmt_number(columns = -ANNEE, sep_mark = "'", decimals = 0) |>
cols_label(
ANNEE = "Année",
GWH_TOT = "Total",
GWH_RESEAU ="Soutirée du réseau",
GWH_AUTOCONSO = "Autoconsommée",
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")), # !! MWR: retiré "GWH_TOT", "KWH_HAB"
cells_column_labels(columns = c("ANNEE", "GWH_TOT", "KWH_HAB")))) |>
tab_style(
style = cell_text(align = "center", v_align = "middle"),
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 = -ANNEE) |> # !! MWR: on cible toutes les colonnes en retirant , columns = ANNEE) |>
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 = "-") |> # !!MWR: remplacé la gestion des NA par '-' au lieu de ''
tab_footnote(footnote = "Consommation totale des ménages, de l'artisanat, de l'agriculture, des services, de l'industrie et des transports. Estimation à partir de l'électricité distribuée par le réseau, à laquelle a été ajouté l'estimation de la quantité d'électricité autoconsommée. Dès 2016, y compris la consommation des CFF.",
locations = cells_title(groups = "title"),
placement = "right") |>
tab_footnote(footnote = "Objectifs de la Conception cantonale de l'énergie (CoCEn 2019) auxquels ont été ajoutés la hausse attendue de la consommation électrique due aux remplacements de chauffages fossiles par des pompes à chaleur.",
locations = cells_body(columns = ANNEE, rows = ANNEE > year(Sys.Date())),
placement = "right") |>
tab_footnote(footnote = "Part de l’électricité produite localement (par exemple par une installation photovoltaïque) qui est consommée sur site, sans injection préalable dans le réseau du distributeur.",
locations = cells_column_labels(columns = "GWH_AUTOCONSO"),
placement = "right") |>
tab_style(
style = cell_borders(sides = "top", style = "dashed", color = "black", 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_source_note(
source_note = md("*Sources : StatVD / CFF / DGE-DIREN<br>Etat au 25.11.2025*")
)
t1
gtsave(t1, glue("./images/t1_Consommation_electricite_2015-{an_max}.html"))
```
# Méthode {#sec-methode}
La statistique de la consommation d’électricité est une statistique de synthèse établie par Statistique Vaud. Elle se fonde sur plusieurs enquêtes relatives à la « consommation finale d’énergie » (électricité, combustibles et carburants). Ces données sont issues de la production périodique de StatVD.
La consommation finale d’électricité comprend la quantité distribuée sur le territoire vaudois (données relevées par la Direction de l’énergie, DGE-DIREN).
A cette quantité s’ajoute l’autoconsommation du secteur de production d’électricité (estimée par la DGE-DIREN) ainsi que la consommation du réseau ferroviaire vaudois des CFF.
La consommation des CFF est évaluée à partir de données suisses pondérées par la longueur du réseau vaudois.
Les méthodes de calcul pour estimer la consommation finale d’énergie se trouvent dans une fiche méthode spécifique (voir @sec-ref-fiches).
# Comparaison {#sec-comparaison}
En comparaison avec la consommation finale d’électricité nationale figurant dans la Statistique suisse de l’électricité 2024 ([OFEN – Statistique suisse de l’électricité](https://www.bfe.admin.ch/bfe/fr/home/approvisionnement/statistiques-et-geodonnees/statistiques-de-lenergie/statistique-de-l-electricite.html/)), la consommation par habitant est inférieure dans le canton de Vaud (5'304 KWh/hab) à celle de la Suisse dans son ensemble (6'386 kWh/hab).
Des comparaisons entre les cantons peuvent être effectuées via la plateforme [ReporterEnergie](https://www.suisseenergie.ch/tools/reporterenergie/), développée dans le cadre du programme SuisseEnergie de l’OFEN.
Il est toutefois important de noter que les méthodes d’estimation utilisées par ReporterEnergie diffèrent significativement de celles appliquées dans la Statistique suisse de l’électricité – et de la statistique cantonale vaudoise - notamment en ce qu’elles n’incluent pas la consommation du réseau ferroviaire national.
# 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 Méthode** :
* MET_08.01.01.01 : Méthode pour le calcul de la consommation finale d’énergie (*disponible sur demande*)
**Fiches Indicateur** :
* [IND_08.01.01.01 : Consommation finale d’énergie, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.01.01.01_Consommation_finale.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)
* [IND_08.02.02.01 : Production électrique de sources renouvelables et non renouvelables, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.02.01_Production_Electrique_Total.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)
* [Reporter Energie - Chiffres-clés par commune/canton](https://www.suisseenergie.ch/tools/reporterenergie/)
* [OFEN – Statistique suisse de l’électricité](https://www.bfe.admin.ch/bfe/fr/home/approvisionnement/statistiques-et-geodonnees/statistiques-de-lenergie/statistique-de-l-electricite.html/)
* [Swissgrid – Aggregierte Energiedaten aus dem Regelblock Schweiz](https://www.swissgrid.ch/de/home/customers/topics/energy-data-ch.html)
# 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)",
"Autoconsommation"
))
# 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}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->