---
title: "Production électrique de sources renouvelables et non renouvelables"
subtitle: "Electricité injectée dans le réseau et autoconsommée, 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: 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.02.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: 7 # 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: d917fbf1-7eb1-49c1-a91d-37d5bcfcdb28 # !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}
# 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 <- 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 = "Production d'électricité, Vaud <b>[GWh]</b>", # Par défaut = titre issu de la métadonnée (en-tête du document)
valeur_2025 = 1717,
obj_2030 = 2834, # valeur numérique OU icônes de flèches
obj_2040 = NA,
obj_2050 = 3804,
tendance_observée = icon_up(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 = "Production d'électricité par habitant <b>[kWh/hab]</b>",
valeur_2025 = 1987,
obj_2030 = icon_up(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_up(type = "obj"),
tendance_observée = icon_up(type = "trend", text = paste0("2019-", an_max)), # text obligatoire pour type = 'trend'
tendance_évaluée = icon_happy() #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é d'électricité issue annuellement de sources renouvelables et non renouvelables, produite sur le territoire vaudois, qu’elle soit auto-consommée par les producteurs ou injectée dans le réseau. Les informations sont présentées par source de production. Il traduit l’évolution de la production locale d’électricité de source renouvelable.
# Cadre de référence {#sec-cadre-reference}
Les objectifs de la production électrique de sources renouvelables 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 production annuelle de 2,8 TWh en 2030 et de 3,8 TWh en 2050. Pour les objectifs par source renouvelable, voir @tbl-T1.
# Graphique {#sec-graphique}
```{r}
# ---------------------------------------------------------
# Préparation des données à partir des données brutes
# ---------------------------------------------------------
# 1 - Données de production électrique (lecture des données traitées (en kWh) sous meta_pronovo_résumé_2015-2022_2023-05-17.xlsx onglet 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 = "Production")|>
janitor::clean_names(case="screaming_snake")
production_temp <- pronovo |>
rename_with(~ stringr::str_extract(.x, "\\d{4}"), tidyselect::starts_with("X"))
# en faire un pivot long
production <- production_temp |>
pivot_longer(
cols = -CATEGORIE_DIREN,
names_to = "ANNEE",
values_to = "KWH" ) |>
# Convertir ANNEE en numérique pour pouvoir trier ou filtrer
mutate(ANNEE = as.integer(ANNEE)) |>
# transformer production de kWh en GWh
mutate(GWH = KWH / 1000000) |>
select(-KWH)
# Export du file dans dossier data
write_delim(production,"./data/production.csv", delim = ";")
},
error = function(e) stop("Download failed: Il faut vérifier que le doc soit toujours ok", e$message),
warning = function(w) stop("Download failed: Il faut vérifier que le doc soit toujours ok", w$message)
)
production <- read_delim("./data/production.csv", delim = ";")
# Créer variables finales pour différenciation entre renouvealbles et non renouvelables
# créer la catégorie Non-renouvelable
non_renouvelable <- production |>
filter(CATEGORIE_DIREN %in% c("Déchets incinérables", "Thermique fossile")) |>
mutate(GWH = case_when(
CATEGORIE_DIREN == "Déchets incinérables" ~ GWH * 0.5,
TRUE ~ GWH)) |>
group_by(ANNEE) |>
summarise(GWH = sum(GWH, na.rm = TRUE)) |>
mutate(CATEGORIE_DIREN = "Non-renouvelable")
# créer la catégorie Déchets incinérables
incinerable <- production |>
filter(CATEGORIE_DIREN %in% c("Déchets incinérables")) |>
mutate(GWH = GWH * 0.5) |>
mutate(CATEGORIE_DIREN = "Déchets incinérables")
renouvelable_temp <- production |>
filter(!CATEGORIE_DIREN %in% c("Déchets incinérables", "Thermique fossile"))
production_final <- renouvelable_temp |>
bind_rows(non_renouvelable, incinerable)
# ---------------------------------------------------------
# 2 - Objectifs CoCEn
# A créer une fois
#
# objectifs <- tibble(
# ANNEE = c(2030, 2050),
# TOTAL = c(2834, 3804),
# "Hydroélectricité" = c(1180,1230),
# "Solaire" = c(900,1600),
# "Eolien" = c(600,750),
# "Biomasse agricole" = c(16,22),
# "Bois-énergie" = c(70,100),
# "Géothermie" = c(10,40),
# "Déchets incinérables" = c(30,30),
# "Déchets méthanisables" = c(14,17),
# "STEP" = c(14,15)
# )
# write_delim(objectifs,"./data/objectifs.csv", delim = ";")
objectifs_all <- read_delim("./data/objectifs.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)
```
```{r}
#| label: fig-G1
##| fig-cap: "Production électrique de sources renouvelables et non renouvelables, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
# prod_tot (obtenir total par année)
prod_tot <- production_final |>
group_by(ANNEE, CATEGORIE_DIREN) |>
summarise(GWH = sum(GWH, na.rm = TRUE), .groups = "drop")
prod_tot <- prod_tot |>
rename(Type = CATEGORIE_DIREN)
# Ajouter un trou pour séparer les consommations des objectifs
last_year <- max(prod_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(prod_tot$ANNEE))
annees_levels <- c(
annees_hist,
gap1,
2030,
gap2,
2050
)
# Ajout les trous à chaque dataset
add_missing_years_prod <- function(df) {
df |>
tidyr::complete(
ANNEE = annees_levels,
Type
)
}
add_missing_years_simple <- function(df) {
df |>
tidyr::complete(
ANNEE = annees_levels
)
}
prod_tot_long <- add_missing_years_prod(prod_tot) |>
mutate(GWH = tidyr::replace_na(GWH, 0))
objectifs <- objectifs_all |>
mutate(GWH = TOTAL) |>
select(ANNEE, GWH)
obj_graf <- add_missing_years_simple(objectifs)
ordre_type <- prod_tot |>
filter(ANNEE == last_year) |>
filter(Type != "Non-renouvelable") |> # On enlève le non-renouvelable temporairement du tri
arrange(GWH) |>
pull(Type)
tous_les_types <- c("Non-renouvelable", ordre_type, "Objectifs CoCEn")
annees_labels <- as.character(annees_levels)
prod_tot_long <- prod_tot_long |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
Type = factor(as.character(Type), levels = tous_les_types),
GWH = as.numeric(tidyr::replace_na(GWH, 0))
)
obj_graf <- obj_graf |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
Type = factor("Objectifs CoCEn", levels = tous_les_types),
GWH = as.numeric(tidyr::replace_na(GWH, 0))
)
# Créer total production (somme par ressources)
prod_tot_annuel <- prod_tot |>
group_by(ANNEE) |>
summarise(GWH = sum(GWH, na.rm = TRUE))
# Combiner total avec objectifs
col_tot <- bind_rows(prod_tot_annuel, objectifs) |>
arrange(ANNEE) |>
rename(TOTAL = GWH)
# Prod_hab (obtenir la production par habitant)
prod_hab <- prod_tot_annuel |>
left_join(population, by = "ANNEE") |>
mutate(KWH_HAB = (GWH*1000000) / HABITANTS) |>
select(ANNEE, KWH_HAB) |>
rename(GWH = KWH_HAB) |>
mutate(
ANNEE = factor(as.character(ANNEE), levels = annees_labels),
Serie = "Production par habitant"
)
# Coefficient
coef <- 2*max(prod_tot$GWH, na.rm = TRUE) /
max(prod_hab$GWH, na.rm = TRUE)
g1_plot <- ggplot() +
# Bars (objectives )
geom_col_interactive(
data = obj_graf,
aes(x = ANNEE, y = GWH, fill = Type,
tooltip = paste0(Type, " " , ANNEE, " : ", round(GWH, 0), " GWh"),
data_id = as.character(ANNEE)),
width = 0.7,
color = NA
) +
# ajout des totaux au-dessus des histogrammes
geom_text(
data = col_tot ,
inherit.aes = FALSE,
aes(
x = as.factor(ANNEE),
y = TOTAL,
label = label_number(accuracy = 1, big.mark = "'")(TOTAL)
),
vjust = -0.5,
size = 2
) +
geom_col_interactive(
data = prod_tot_long,
aes(
x = ANNEE,
y = GWH,
fill = Type,
tooltip =paste0(as.character(Type), " ", ANNEE, " : ", round(GWH, 0), " GWh"),
data_id = paste0(as.character(ANNEE), as.character(Type))),
width = 0.7,
position = "stack",
color = NA
) +
# Line (per capita)
geom_line(
data = prod_hab,
aes(x = ANNEE, y = GWH * coef, color = Serie, group = 1),
linewidth = 1.2
) +
geom_point_interactive(
data = prod_hab,
aes(
x = ANNEE,
y = GWH * coef,
color = Serie,
tooltip = paste("Production électrique par habitant ", ANNEE, " : ", label_number(accuracy = 1, big.mark = "'")(GWH), "kWh/hab"),
data_id = ANNEE
),
size = 1.5,
)+
scale_color_manual(
values = c(
"Production par habitant" = "red3"
),
name = NULL
)+
scale_fill_manual(
values = c(
"Objectifs CoCEn" = "grey80",
"Hydroélectricité" = "#6a8caf",
"Solaire" = "yellow2",
"Eolien" = "cadetblue1",
"Biomasse agricole" = "gold3",
"Bois-énergie" = "green4",
"Géothermie" = "#EE2C2C",
"Déchets incinérables" = "#E6550D",
"Déchets méthanisables" = "darkolivegreen3",
"STEP" = "goldenrod4",
"Non-renouvelable" = "black"
),
breaks = tous_les_types,
name = NULL
) +
scale_y_continuous(
name = "Production électrique [GWh]",
labels = scales::label_number(big.mark = "'", decimal.mark = "."),
sec.axis = sec_axis(
~ . / coef,
name = "Production 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(
color = guide_legend(order = 1, nrow = 1), # légendes sur 1 lignes d'un graphique en ligne
fill = guide_legend(order = 2, nrow = 4, byrow = FALSE) # légendes sur 3 lignes d'un histogramme
)+
# Titles and caption
labs(
title = str_wrap("**Production électrique de sources renouvelables et non renouvelables**", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
subtitle = str_wrap("Electricité injectée dans le réseau et autoconsommée, Vaud", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
caption = "Source: Pronovo / 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"), # rajout italic
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.position = "bottom", # "top" "left" "right" "none"
legend.box = "vertical", #"horizontal"
legend.box.just = "left", # aligne les blocs à gauche
legend.justification = "left",
legend.text = element_markdown(size = 10),
legend.title = element_markdown(size = 12),
legend.spacing.y = unit(0.1, "cm"), # espace entre blocs
legend.margin = margin(t = 0, b = 0), # supprime marge globale
legend.box.spacing = unit(0.1, "cm"), # espace bloc-légende vs reste du plot
axis.text = element_text(size = 8),
axis.title = element_markdown(size = 10)
)
obsindVD::girafe_light(g1_plot,
# Ajout 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_Production_electricite_total_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}
La production indigène d'électricité était de 1’717 GWh<sub>él</sub> en 2025, en légère baisse par rapport à 2024 (1'898 GWh<sub>él</sub>; voir @fig-G1). L’électricité d’origine renouvelable représente 98% de l'électricité produite sur sol vaudois (voir @tbl-T1). La production d’électricité de sources renouvelables a augmenté en moyenne de 3.7% par an entre 2019 et 2025. L’objectif de la Conception cantonale de l’énergie (CoCEn) est d’atteindre une production indigène de 2'800 GWh<sub>él</sub> en 2030 et de 3’800 GWh<sub>él</sub> en 2050.
La majeure partie de l’électricité produite sur sol vaudois est d’origine hydraulique (2025 : 909 GWh<sub>él</sub>).
L’augmentation de la production hydroélectrique entre 2015 et 2018 est notamment due à la mise en fonction de l’usine des Farettes en 2016, ainsi que celle de la nouvelle centrale des Forces Motrices Hongrin-Léman (FMHL) en 2017. Etant donné que le potentiel de production hydraulique est presque totalement exploité dans le canton, aucune hausse significative n’est attendue. Les baisses observées en 2017 et en 2022 sont principalement dues aux conditions hydrologiques moins favorables ces années que les autres années.
La part du solaire photovoltaïque correspond à 37 % de la production vaudoise d’électricité en 2025. La quantité d’électricité photovoltaïque produite est en augmentation constante depuis 2015 et a atteint 638 GWh<sub>él</sub> en 2025. Le déploiement des panneaux solaires photovoltaïques devrait permettre de produire 1600 GWh<sub>él</sub> d’origine solaire en 2050, ce qui représenterait plus de 40% de la totalité d’électricité produite dans le canton de Vaud.
La production électrique vaudoise, dominée par les énergies hydroélectriques et photovoltaïques, n'est pas constante au cours de l'année et est marquée par une production plus importante durant le semestre d'été que celui d'hiver. La production estivale représente ainsi environ 70% de la production photovoltaïque et 55% de la production hydroélectrique ; en revanche la consommation est plus importante en période hivernale.
2025 est la seconde année où de l’électricité a été produite grâce à l’éolien (20 GWh<sub>él</sub> en 2025). L’objectif de la CoCEn est d’en produire 750 GWh<sub>él</sub> en 2050.
## Interprétation {#sec-analyse-interpretation}
L’évolution de la production d'électricité est qualifiée d’insuffisante. Bien que l'évolution observée entre 2019 (1'439 GWh<sub>él</sub>) et 2025 (1'717 GWh<sub>él</sub>) aille dans la direction souhaitée, si elle est maintenue, les valeurs cibles fixées pour 2030 ne devraient pas être atteintes.
## Périmètre et limites {#sec-analyse-perimetre}
La méthode utilisée pour recenser la production **hydroélectrique** vaudoise est celle de la territorialité. Est considérée comme vaudoise toute électricité produite par des installations se trouvant sur sol vaudois. La pratique fédérale suit une répartition selon les droits d’eaux (exemple de Lavey où 58% des droits d’eaux sont attribués au canton du Valais). Quatre installations de production hydroélectrique situées sur sol vaudois sont concernées par cette problématique. Avec la méthode de répartition selon les droits d’eaux, la production d’énergie hydroélectrique vaudoise diminuerait. La production hydroélectrique connaît également des variations importantes d’une année à l’autre, étant fortement dépendante des conditions hydrologiques et de la saisonnalité.
La production d’électricité d’origine **solaire photovoltaïque** est légèrement sous-évaluée du fait que les données ne recensent que les installations annoncées à Pronovo qui injectent de l’électricité dans le réseau, et que certaines installations sont enregistrées avec un délai de quelques mois pour des raisons administratives. Cette production est variable aussi bien au fil des jours que des saisons et peut varier d’une année à l’autre même sans changement du parc d’installations photovoltaïques.
# Tableaux {#sec-tableaux}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
```{r}
#| label: tbl-T1
##| tbl-cap: "Production électrique de sources renouvelables et non renouvelables, Vaud"
# préparer les données par ressources (pivot_wider)
ressources_wide <- prod_tot |>
pivot_wider(names_from = Type, values_from = GWH) |>
select (ANNEE, "Hydroélectricité", "Solaire", "Déchets incinérables", "Biomasse agricole", "Bois-énergie", "Eolien",
"Déchets méthanisables", "STEP", "Non-renouvelable")
# col_tot_temp: les lignes objectifs avant de faire le bind_rows à l'étape suivante
col_tot_temp <- col_tot |>
filter(ANNEE <= an_max)
# convertir ANNEE en non factor
prod_hab_tab <- prod_hab |>
mutate(ANNEE = as.integer(as.character(ANNEE))) |>
rename("Par habitant" = "GWH") |>
select(-c("Serie"))
# Combiner le total (et objectifs) avec les ressources
df <- col_tot_temp |>
left_join(ressources_wide, by = "ANNEE") |>
left_join(prod_hab_tab, by = "ANNEE") |>
bind_rows(objectifs_all) |>
select( ANNEE, TOTAL, "Hydroélectricité" , "Solaire", "Eolien", "Biomasse agricole", "Bois-énergie", "Déchets incinérables", "Déchets méthanisables", "STEP", "Géothermie", "Non-renouvelable", "Par habitant")
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)
gt() |>
tab_header(title = md("**Production électrique de sources renouvelables et non renouvelables**"),
subtitle = "Electricité injectée dans le réseau et autoconsommée, Vaud") |>
# Gestion des NA : remplace les cases vides par un tiret
sub_missing(columns = -ANNEE, missing_text = "—" ) |>
fmt_number(columns = -ANNEE, sep_mark = "'", decimals = 0) |>
cols_label(
ANNEE = "Année",
"TOTAL" = "Total",
"Solaire" = "Solaire PV",
"Non-renouvelable" = "Sources non renouvelables"
) |>
cols_width(everything() ~ pct(100 / ncol(df))) |>
tab_style(style = cell_text(weight = "bold"),
locations = list(cells_column_labels(columns = c("ANNEE", "TOTAL", "Par habitant")),
cells_body(columns = c("ANNEE", "TOTAL", "Par habitant")))) |>
tab_style(
style = cell_text(align = "center"),
locations = cells_column_labels()
) |>
tab_style(
style = cell_text(align = "left"),
locations = cells_column_labels(columns = ANNEE)
) |>
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_borders(sides = "top", style = "dashed", color = "lightgrey", weight = px(1)),
locations = cells_body(rows = ANNEE == min(objectifs$ANNEE)) # applies to first row
) |>
cols_align(align = "center", columns = -ANNEE) |>
cols_align(align = "left", columns = ANNEE) |>
cols_label_with(
columns = -c(ANNEE, "Par habitant"),
fn = \(col) md(paste0(col, "\n\n[GWh]"))
) |>
cols_label_with(
columns = c("Par habitant"),
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 ''
# fmt_missing(columns = everything(), missing_text = "") |>
tab_footnote(footnote = "Objectifs définis dans la conception cantonale de l'énergie (CoCEn 2019).",
locations = cells_body(columns = ANNEE, rows = ANNEE > year(Sys.Date())),
placement = "right") |>
tab_footnote(footnote = "Est considérée comme production non renouvelable l'ensemble de la production à partir de sources fossiles (mazout et gaz) et la moitié de la production à partir de déchets incinérables.",
locations = cells_column_labels(columns = "Non-renouvelable"),
placement = "right") |>
opt_table_outline(style = "solid", width = px(2), color = "lightgrey") |>
tab_source_note(
source_note = md("*Sources : Pronovo / DGE-DIREN<br>Etat au 31.12.2025*")
)
t1
gtsave(t1, glue("./images/t1_Production_electricite_total_2015-{an_max}.html"))
```
# Méthode {#sec-methode}
Les quantités d’électricité produites selon les différentes sources et injectées dans le réseau électrique sont recueillies et transmises par Pronovo.
La quantité d’électricité d’origine solaire photovoltaïque auto-consommée est pour l’essentiel estimée à partir des informations de puissance installée. Des informations plus détaillées se trouvent dans la fiche méthode spécifique (voir @sec-ref-fiches).
# Comparaison {#sec-comparaison}
La situation étant très différente entre les cantons (barrages hydrauliques, centrales nucléaires, …), une comparaison entre les cantons est par conséquent délicate. L’indicateur choisi par l’OFEN pour leur plateforme [ReporterEnergie](https://www.suisseenergie.ch/tools/reporterenergie/) est la production par habitant d’électricité de sources renouvelables. D’après cette plateforme, en Suisse la production électrique de sources renouvelables correspondait à 4'900 kWh par habitant en 2023, contre 1'930 kWh/hab pour les vaudois (2'002 kWh/hab avec la méthode utilisée par la DGE-DIREN, voir @tbl-T1).
# 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.02.02.02 : Méthode pour le calcul de la production d’électricité (*disponible sur demande*)
**Fiches Indicateur** :
* [IND_08.02.05.11 : Production électrique de source solaire, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.05.11_Production_Solaire_Electrique.html)
* [IND_08.02.05.31 : Production électrique de source hydraulique, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.05.31_Production_Hydraulique_Electrique.html)
* [IND_08.02.05.40 : Production énergétique de source bois-énergie, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.05.40_Production_Bois_Energie.html)
* [IND_08.02.05.71 : Production énergétique à partir de biomasse agricole, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.05.71_Production_Biomasse_Energie.html)
* [IND_08.02.05.72 : Production énergétique par déchets incinérables, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.05.72_Production_Dechets-incinerables_Energie.html)
* [IND_08.02.05.73 : Production énergétique par déchets méthanisables, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.02.05.73_Production_Dechets-methanisables_Energie.html)
* [IND_08.04.02.01 : Taux de couverture électrique, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.04.02.01_Ratio_Electrique.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/)
# 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)",
"Energies renouvelables"
))
# 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()` -->