---
title: "Grands consommateurs d'électricité et de chaleur"
subtitle: "Nombre de sites engagés dans une réduction de la consommation d'énergie, 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: 2 # Valeur numérique : 0=Non-défini/1=Description/2=Orientation/3=Pilotage
nature: 2 # Valeur numérique : 0=Non-défini/1=Actions/2=Effets/3=Impacts
idThematique: 08.05.02.02 # 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: Grand consommateur # Texte libre qui indique le niveau minimal d'agrégation disponible pour l'indicateur (canton, commune, région, installation, véhicule, etc.)
frequenceMAJ: Annuel # Texte libre, idéalement à choisir parmi les codes suivants : mensuel/semestriel/annuel/biannuel/mensuel/tous les x ans/non-défini
moisMAJ: 2 # Valeur numérique : 0=Non-défini/1=Janvier/2=Février, etc.
disponibleDepuis: 2019 # 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: 5836367a-5813-4175-afd2-14c7dacfa36c # !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 = "Part des grands consommateurs engagés dans une démarche de réduction de la consommation d'énergie, Vaud <b>[%]</b>", # Par défaut = titre issu de la métadonnée (en-tête du document)
valeur_2025 = "88.0",
obj_2030 = icon_up(type = "obj"), # valeur numérique OU icônes de flèches
obj_2040 = NA,
obj_2050 = icon_up(type = "obj"),
tendance_observée = icon_up(type = "trend", text = paste0("2019-", an_max)), # icon_up(), icon_flat(), icon_down()
tendance_évaluée = icon_happy() #icon_meh() # icon_happy(), icon_meh(), icon_sad()
)
)
# 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 fournit des informations sur le nombre de sites grands consommateurs (ex : entreprises, établissements publics, infrastructures de transport, …) s'étant engagés à améliorer leur efficacité énergétique et à réduire leur consommation d'électricité et/ou de chaleur. Il démontre les effets de l’application des articles « grand consommateur » de la loi sur l’énergie (LVLEne).
# Cadre de référence {#sec-cadre-reference}
Le canton de Vaud a introduit l’obligation d’engagement pour les grands consommateurs avec la modification de la loi vaudoise sur l’énergie (LVLEne) du 29 octobre 2013, entrée en vigueur le 1er juillet 2014. Cette obligation est reprise du droit fédéral (LEne) qui impose aux cantons de mettre en place les dispositions pour l’engagement des grands consommateurs.
Le programme PEIK de Suisse énergie a permis d’estimer qu’environ 2% des entreprises suisses représentent 60% de la consommation énergétique du secteur. Ce constat a permis de préciser les limites qui définissent un grand consommateur et de justifier la démarche d’engagement des grands consommateurs. Celle-ci vise à les accompagner dans l’amélioration de leur efficacité énergétique et l’intégration des coûts énergétiques dans leurs développements.
# Graphique {#sec-graphique}
```{r }
#| label: fig-G1
##| fig-cap: "Grands consommateurs engagés dans une démarche de réduction de la consommation d'énergie, Vaud"
#| fig.width: 8
#| fig.asp: 0.6
# Lecture des données
#--------------------------------------------------------------------------
# 1 - Données Engagements des grands consommateurs
# Les données du document data_brut.xlsx doit avoir été préparé
data_brut_read <- readxl::read_excel(("./data/data_brut.xlsx"),
sheet = "data_final")
data_long <- data_brut_read |>
pivot_longer(
cols = -1, # toutes les colonnes sauf la 1ère
names_to = "ANNEE",
values_to = "VALEUR"
) |>
mutate(
VARIABLES = factor(
VARIABLES,
levels = c(
"Convention d'objectifs universelle (COU)",
"Convention cantonale (COC)",
"Analyse de la consommation d'énergie (ACE)",
"Aucun engagement"
)
)
)
gc_total <- data_long |>
group_by(ANNEE) |>
summarise(
TOTAL = sum(VALEUR, na.rm = TRUE),
.groups = "drop"
)
g1_plot <- ggplot() +
geom_col_interactive(
data = data_long,
aes(
x = ANNEE,
y = VALEUR,
fill = VARIABLES,
tooltip =paste0(VARIABLES, " ", ANNEE, " : ", round(VALEUR, 1)),
data_id = paste0(as.character(ANNEE), as.character(VARIABLES))),
width = 0.7,
position = position_stack(reverse = TRUE),
color = NA
) +
# ajout des totaux au-dessus des histogrammes
geom_text(
data = gc_total ,
inherit.aes = FALSE,
aes(
x = as.factor(ANNEE),
y = TOTAL,
label = label_number(accuracy = 1, big.mark = "'")(TOTAL)
),
vjust = -0.5,
size = 3
) +
scale_fill_manual(
values = c(
"Convention d'objectifs universelle (COU)" ="#A7C7E7",
"Convention cantonale (COC)" = "#A8E6CF",
"Analyse de la consommation d'énergie (ACE)" = "#FFB7B2" ,
"Aucun engagement" = "#c6c5c7"
),
name = NULL,
breaks = c(
"Aucun engagement",
"Analyse de la consommation d'énergie (ACE)",
"Convention cantonale (COC)",
"Convention d'objectifs universelle (COU)"
)
) +
# Pour mettre les légendes sur pls lignes
guides(
fill = guide_legend(
nrow = 2,
byrow = FALSE
)
)+
# Titles and caption
labs(
title = str_wrap("**Nombre de grands consommateurs selon le type de convention pour une réduction de la consommation d'énergie, Vaud**", width = 73) |>
stringr::str_replace_all("\n", "<br>") ,
x = NULL,
y = "Nombre de grands consommateurs",
caption = "Source: DGE-DIREN<br>Etat au 31.12.2025"
) +
theme_minimal(base_size = 13) +
theme(
plot.title = element_markdown(face = "bold", size = 12),
plot.subtitle = element_markdown(size = 10),
plot.caption = element_markdown(hjust = 0, size = 9, margin = margin(t = 5), face = "italic"), # !! MWR: rajout italic
plot.caption.position = "plot",
plot.margin = margin(10, 10, 30, 10),
legend.position = "bottom",
legend.box = "vertical",
legend.text = element_text(size = 10),
legend.title = element_text(size = 12),
axis.text = element_text(size = 8),
axis.title = element_text(size = 10)
)
obsindVD::girafe_light(g1_plot,
# modification du comportement de surlignage : on ajoute de la transparence aux éléments non-survolés !
options = list(
opts_hover_inv(css = "opacity:0.5;"),
opts_hover(css = "opacity:1;"),
# Ajout du nom du PNG téléchargé + remplacement de 'download' par 'télécharger' (survol icône)
opts_toolbar(
position = "topright",
hidden = c("zoom", "selection"),
pngname = paste0(selected_metadata[['Identifiant thématique']], "_G1"),
tooltips = list(
saveaspng = "Télécharger"
)
)
)
)
ggsave(glue("./images/g1_Conventions_Grands_Consommateurs_2019-{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}
Le nombre total de sites grands consommateurs dans le canton de Vaud est passé de 618 en 2019 à 689 en 2025 (voir @fig-G1). La part des sites grands consommateurs engagés dans une démarche d’efficacité énergétique est en hausse depuis 2019 pour atteindre 88% d’entre eux en 2025. La majorité (67%) a choisi de signer une convention d'objectifs universelle (COU) avec la Confédération, 14% d'effectuer une analyse de la consommation d'énergie (ACE) et 7% de signer une convention cantonale (COC) (voir @tbl-T1).
## Interprétation {#sec-analyse-interpretation}
La démarche « grands consommateurs » lancée en 2015 a atteint un rythme stable ces dernières années. En effet, la plupart des sites concernés sont engagés dans la démarche. Ils représentent la grande majorité des sites grands consommateurs du canton. Les nouveaux sites identifiés proviennent soit de sites existants dont la consommation énergétique augmente et dépasse désormais le seuil, soit de nouveaux sites qui se sont implantés dans le canton. Ces nouveaux sites peuvent résulter d’un déménagement d’une entreprises déjà présente sur le territoire vaudois dans de nouveaux locaux, de la création d’un nouveau site par une entreprise vaudoise ou de l’installation d’une nouvelle entreprise dans le canton. Chaque année la DGE-DIREN identifie ces nouveaux sites et entreprend les démarches prévues par le cadre légal.
## Périmètre et limites {#sec-analyse-perimetre}
La détection des grands consommateurs se fait au travers de relevés de données annuelles de consommation fournis par les gestionnaires de réseaux de distribution (GRD). Cela crée un décalage entre le nombre total de sites et l’année indiquée. Par exemple les 689 sites recensés en 2025 correspondent aux données de consommation de 2024.
# Tableau {#sec-tableaux}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
```{r}
#| label: tbl-T1
##| tbl-cap: "Nombre de grands consommateurs selon le type de convention pour une réduction de la consommation d'énergie, 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é !
# gc <- data_brut_read |>
# rename("Type d'engagement" = VARIABLES)
gc_total_wide <- gc_total |>
mutate(VARIABLES = "Total") |>
pivot_wider(
names_from = ANNEE,
values_from = TOTAL
)
gc <- gc_total_wide |>
bind_rows(data_brut_read)|>
rename("Type d'engagement" = VARIABLES)
t1 <- gc |>
# 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("**Nombre de grands consommateurs selon le type de convention pour une réduction de la consommation d'énergie, Vaud**")) |> # !! ajout du titre en gras avec md() + syntaxe **
fmt_number(columns = -c("Type d'engagement"), sep_mark = "'", decimals = 0) |>
# cols_width(everything() ~ pct(1 / ncol(gc) )) |>
tab_style(style = cell_text(weight = "bold"),
locations = cells_column_labels()) |>
tab_style(style = cell_text(weight = "bold"),
locations = cells_body(
columns = "Type d'engagement",
rows = `Type d'engagement` == "Total"
)) |>
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()
) |>
tab_style(
style = cell_text(align = "left"),
locations = cells_column_labels(
columns = "Type d'engagement"
)
) |>
cols_align(align = "center") |> # !! MWR: on cible toutes les colonnes en retirant , columns = ANNEE) |>
cols_align(align = "left", columns = "Type d'engagement") |>
cols_label_with(
columns = -c("Type d'engagement"),
fn = \(col) md(paste0(col, "\n\n[nbre]"))
) |>
tab_style(style = cell_borders(sides = "all"),
locations = list(cells_column_labels(), cells_column_spanners())) |>
tab_style(style = cell_borders(sides = c("left", "right")),
locations = list(cells_body())) |>
tab_options(column_labels.border.bottom.color = "black") |>
sub_missing(columns = everything(), missing_text = "-") |> # !!MWR: remplacé la gestion des NA par '-' au lieu de ''
# 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 : DGE-DIREN<br>Etat au 31.12.2025*")
)
t1
gtsave(t1, glue("./images/t1_Conventions_Grands_Consommateurs_2019-{an_max}.html"))
```
# Méthode {#sec-methode}
Les données proviennent de la base de données sur les grands consommateurs de la DGE-DIREN.
Les options d’engagement qui sont offertes aux grands consommateurs sont de trois types :
- une convention d’objectifs universelle (COU) avec la Confédération. Elle permet à un grand consommateur d’obtenir certains avantages auprès de la Confédération comme le remboursement de la taxe CO~2~ ou/et du supplément réseau électrique ;
- une convention d’objectifs cantonale (COC). Elle fixe un objectif d’efficacité énergétique à atteindre avec un minimum de 20% de réduction de la consommation ;
- une analyse de la consommation d’énergie (ACE). Celle-ci établit une liste des actions de performance énergétique (APE) qui doivent être mises en place par les entreprises.
Les sites grands consommateurs catégorisés sans engagement sont les sites qui ont été récemment identifiés par le Canton (ex. site qui vient de s’implanter sur le territoire vaudois) et qui ont reçu une décision du service pour se mettre en conformité avec la loi.
# Comparaison {#sec-comparaison}
Une comparaison avec les autres cantons n’est pas possible, étant donné qu’il n’existe pas de base de données unifiée sur le nombre de grands consommateurs pour l’ensemble du territoire helvétique.
Bien que le nombre total de grands consommateurs engagés avec la Confédération soit connu, une comparaison avec la situation dans le canton de Vaud semble peu pertinente. En effet, les données fédérales ne prennent pas en compte les engagements cantonaux, dont la proportion pourrait varier entre les cantons.
L’arrivée d’une nouvelle plateforme développée par l’Office fédéral de l’énergie (OFEN), l’outil COS, devrait permettre à l’avenir de rassembler les différents types d’engagements des grands consommateurs sur une même plateforme et donc d’obtenir des statistiques pour toute la Suisse.
# Références {#sec-ref}
<!-- Aide au remplissage : consulter la section correspondante avec `obsindVD::open_aide_remplissage_help()` -->
## Fiches associées {#sec-ref-fiches}
**Fiche 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.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.02.01 : Consommation finale d'électricité, Vaud](https://stat-climat-vd.ch/fiches-indicateurs/themes/energie/IND_08.01.02.01_Consommation_Elec.html)
## Autres références {#sec-ref-autres}
* [Loi sur l’énergie (LEne ; 730.0)](https://www.lexfind.ch/fe/fr/tol/25262/versions/249699/fr)
* [Ordonnance sur l’énergie (OEne ; 730.01)](https://www.lexfind.ch/fe/fr/tol/25925/versions/251954/fr)
* [Loi sur l'énergie (LVLEne; 730.01)](https://prestations.vd.ch/pub/blv-publication/actes/consolide/730.01?key=1544691327444&id=e7f13ccb-9bc3-4442-876e-c316278b9975)
* [Règlement d'application de la loi du 16 mai 2006 sur l'énergie (RLVLEne; 730.01.1)](https://www.lexfind.ch/fe/fr/tol/18902/versions/239842/fr)
* [Directive cantonale « Modalités d’exécution des dispositions relatives aux grands consommateurs d’énergie »](https://www.vd.ch/fileadmin/user_upload/themes/environnement/energie/fichiers_pdf/GC_Directive_cantonale.pdf)
# 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)",
"Grands consommateurs",
"Site de consommation",
"Consommateur final"
))
# 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()` -->