TL;DR —
ActiveWindow.FreezePanes = Trueverrouille tout ce qui se trouve au-dessus et à gauche de la cellule active pour que cela reste en place pendant que le reste défile. Deux choses surprennent : le figeage se fait relativement à la cellule sélectionnée, vous devez donc placer la cellule active d'abord (sélectionnezA2pour figer la ligne 1,B2pour figer la ligne 1 et la colonne A) ; et il vit sur la fenêtre, pas sur la feuille, ce qui explique pourquoi c'estActiveWindow.FreezePaneset pourquoi une deuxième fenêtre sur le même fichier a son propre figeage. Désactivez-le avec= False, et défigez avant de re-figer ailleurs.
' FreezePanes fige tout ce qui est au-dessus et a gauche de la cellule ACTIVE.
Application.Goto Range("A2"), Scroll:=True ' figer la ligne du haut : placer la cellule active EN DESSOUS
ActiveWindow.FreezePanes = True
' Figer la ligne du haut ET la premiere colonne : cellule active en B2
Worksheets("Report").Activate
Range("B2").Select
ActiveWindow.FreezePanes = True
' Defiger :
ActiveWindow.FreezePanes = False
FreezePanes est la version en code de Affichage > Figer les volets — le réglage qui garde votre
ligne d'en-tête à l'écran quand vous descendez de mille lignes de données. C'est le seul ajustement
d'affichage qui mérite d'être scripté dans chaque macro de rapport, parce qu'il transforme un mur de
chiffres en quelque chose de réellement lisible. C'est aussi l'une des rares propriétés VBA où vous devez
légitimement toucher à la cellule active et à la fenêtre active, ce qui explique précisément pourquoi
elle se comporte d'une manière qui prend les gens au dépourvu.
Ce que vous allez apprendre
- Le modèle mental — le figeage verrouille un coin de la vue, et vit sur la fenêtre
- La seule règle qui compte — il fige relativement à la cellule active, placez-la donc d'abord
- Pourquoi c'est
ActiveWindow.FreezePaneset pourquoi chaque Nouvelle fenêtre a son propre figeage - Le désactiver, et pourquoi vous devez défiger avant de re-figer
FreezePanesface àSplit, et une voie sans sélection viaSplitRow- Où le figeage a sa place dans une macro de rapport — en dernier, sur la feuille que vous venez de construire
Le modèle mental : verrouiller un coin de la vue
Figer les volets ne change ni les données, ni la feuille, ni la moindre cellule — cela change la
fenêtre à travers laquelle vous regardez. Imaginez la grille découpée en quatre quadrants par une ligne
horizontale et une ligne verticale. Le quadrant en haut à gauche est épinglé ; les trois autres défilent
en dessous. FreezePanes trace ces lignes et épingle le coin. C'est toute l'idée, et elle emporte deux
conséquences qui expliquent tout le reste : la césure doit être positionnée quelque part, et elle
appartient à la fenêtre, parce que c'est la fenêtre qui fait défiler.
Retenez « c'est un réglage d'affichage sur la fenêtre », et les deux surprises classiques — figer les mauvaises lignes et le figeage qui ne tient pas — cessent d'être des mystères.
La règle qui compte le plus : il fige à la cellule active
Voici l'erreur derrière presque tous les bugs « il a figé les mauvaises lignes ». FreezePanes ne prend
ni numéro de ligne ni plage. Il fige tout ce qui se trouve au-dessus et à gauche de la cellule qui est
active au moment où vous le définissez. La cellule active est donc la commande, et si vous ne la placez
pas, vous figez là où le curseur se trouvait par hasard :
ActiveWindow.FreezePanes = True ' fige a la selection actuelle - ou qu'elle se trouve
La règle est de placer la cellule active juste en dessous et à droite de ce que vous voulez figer, puis de définir la propriété :
- Figer la ligne du haut → sélectionnez
A2(tout ce qui est au-dessus de la ligne 2 est figé). - Figer la première colonne → sélectionnez
B1. - Figer à la fois la ligne du haut et la première colonne → sélectionnez
B2.
C'est pourquoi la macro enregistrée montre toujours un Range(...).Select juste avant
ActiveWindow.FreezePanes = True. Le figeage est l'un des rares cas où sélectionner une cellule n'est pas
un défaut de style — la sélection est l'argument. Réglez correctement la cellule active et le figeage
atterrit exactement où vous le voulez.
Il vit sur la fenêtre, pas sur la feuille
Remarquez l'objet : ActiveWindow.FreezePanes, jamais Worksheet.FreezePanes. Le figeage est une
propriété de la fenêtre à travers laquelle vous voyez une feuille — et une feuille peut être affichée
dans plusieurs fenêtres. Ouvrez Affichage > Nouvelle fenêtre sur le même classeur et vous obtenez une
deuxième fenêtre avec son propre état de figeage ; l'une peut avoir la ligne du haut figée et l'autre
non. C'est pourquoi un figeage peut sembler « ne pas tenir » : vous l'avez défini sur une fenêtre et vous
en regardez une autre.
Pour une macro, la conséquence pratique est que la feuille que vous voulez figer doit être active dans
la fenêtre que vous configurez — vous ne pouvez pas figer de façon fiable les volets d'une feuille que
l'utilisateur ne regarde pas. Cela fait de FreezePanes l'un des rares endroits où recourir à
ActiveWindow et Activate est correct plutôt que paresseux : la fenêtre est réellement ce que vous
configurez. Activez la feuille, placez la cellule active, définissez la propriété.
Le désactiver et re-figer
Défiger est une simple affectation :
ActiveWindow.FreezePanes = False
La subtilité, c'est le re-figeage. Mettre FreezePanes = True alors que les volets sont déjà figés ne
fait rien — Excel ne déplace pas un figeage existant vers la nouvelle cellule active. Pour déplacer un
figeage, vous devez donc l'effacer d'abord, replacer la cellule active, puis le redéfinir :
ActiveWindow.FreezePanes = False ' effacer l'ancien figeage
Range("C3").Select ' repositionner
ActiveWindow.FreezePanes = True ' figer au nouveau coin
Sautez la ligne = False et votre « nouveau » figeage est ignoré tandis que l'ancien reste en silence.
Faites du défigeage la première étape chaque fois qu'une macro réapplique un figeage qu'elle a pu poser
lors d'une exécution précédente.
FreezePanes face à Split, et une voie sans sélection
FreezePanes verrouille les volets solidement. ActiveWindow.Split (avec SplitRow et SplitColumn)
crée à la place des barres de fractionnement déplaçables — les volets sont séparés mais l'utilisateur
peut les redimensionner, et ils ne se verrouillent pas. La plupart des macros de rapport veulent un
figeage, pas un fractionnement. Mais les propriétés de fractionnement vous donnent une façon nette de
figer sans sélectionner de cellule, ce que certains préfèrent pour la lisibilité :
ActiveWindow.SplitRow = 1 ' fractionner sous la ligne 1
ActiveWindow.SplitColumn = 1 ' fractionner apres la colonne A
ActiveWindow.FreezePanes = True ' transformer le fractionnement en figeage - aucun Select requis
Définir SplitRow/SplitColumn puis FreezePanes = True fige à la position de fractionnement, si bien
que vous ne touchez jamais à la cellule active. Les deux styles conviennent ; utilisez celui qui vous
paraît le plus clair. La version sans sélection évite de laisser l'utilisateur sur une cellule inattendue
après l'exécution de la macro.
Où le figeage a sa place dans une macro de rapport
Le figeage est une touche finale, il vient donc en dernier — après avoir écrit les données, appliqué les
formats de nombre et lancé l'AutoFit. Figer tôt puis insérer ou supprimer des
lignes peut déplacer l'endroit où atterrit le figeage. Le motif fiable est : construisez la feuille,
dimensionnez-la, activez la feuille que vous avez construite, placez la cellule active (ou définissez le
fractionnement), puis ActiveWindow.FreezePanes = True. Ne vous fiez pas au Range("A2").Select codé en
dur qu'un enregistreur a écrit sur une autre disposition de feuille — décidez le coin de figeage à partir
du rapport que vous avez réellement généré, et placez-y la cellule active délibérément.
Comment ExcelMaster aide
Figer les volets est le réglage qui rend un rapport généré utilisable d'un coup d'œil, et aussi celui qui fige discrètement de la ligne 1 à la ligne 40 parce que la cellule active était à un endroit inattendu, ou qui semble ne pas fonctionner parce qu'il a été défini sur la mauvaise fenêtre, ou qui refuse de bouger parce que l'ancien figeage n'a jamais été effacé.
ExcelMaster vous laisse dire ce
que vous voulez garder à l'écran — « fige la ligne d'en-tête », « verrouille les deux premières colonnes
et la ligne du haut » — et il écrit le figeage comme dernière étape de la routine : il active la bonne
feuille, place la cellule active (ou définit SplitRow/SplitColumn pour un figeage sans sélection) pour
que la césure atterrisse exactement où vous l'entendiez, et efface tout ancien figeage avant d'en
appliquer un nouveau. Vous gardez le classeur et le code.
Questions fréquentes
Pourquoi VBA fige-t-il les mauvaises lignes ?
Parce que FreezePanes fige relativement à la cellule active, pas à un numéro de ligne, et que la
cellule active n'était pas là où vous le pensiez. Il verrouille tout ce qui se trouve au-dessus et à
gauche de la sélection. Placez la cellule active d'abord — sélectionnez A2 pour figer la ligne du haut,
B2 pour figer la ligne du haut et la première colonne — puis définissez ActiveWindow.FreezePanes = True.
Comment figer la ligne du haut en VBA ?
Faites de A2 la cellule active (une ligne sous l'en-tête), puis figez : Range("A2").Select suivi de
ActiveWindow.FreezePanes = True. Ou sautez complètement la sélection avec ActiveWindow.SplitRow = 1
puis ActiveWindow.FreezePanes = True. La feuille doit être active dans la fenêtre que vous configurez.
Comment défiger les volets en VBA ?
Mettez la propriété à False : ActiveWindow.FreezePanes = False. Notez que pour déplacer un figeage
vous devez d'abord défiger — mettre FreezePanes = True alors que les volets sont déjà figés ne fait rien,
alors effacez l'ancien figeage, replacez la cellule active, puis redéfinissez-le.
Pourquoi ActiveWindow.FreezePanes ne fonctionne-t-il pas ?
Généralement l'une de ces trois choses. La feuille que vous voulez figer n'est pas active dans la fenêtre
courante — activez-la d'abord. Ou les volets sont déjà figés, si bien que remettre True est ignoré —
mettez False, repositionnez, puis True. Ou vous regardez une fenêtre différente de celle que vous avez
configurée : le figeage est une propriété par fenêtre, et Nouvelle fenêtre crée une deuxième fenêtre
avec son propre état.
FreezePanes est-il sur la feuille de calcul ou sur la fenêtre ?
La fenêtre. C'est ActiveWindow.FreezePanes, pas une propriété de feuille de calcul, parce que le figeage
configure la façon dont une fenêtre défile sur une feuille. La même feuille affichée dans deux fenêtres
(via Affichage > Nouvelle fenêtre) peut avoir des états de figeage différents. C'est aussi pourquoi la
feuille doit être active dans la fenêtre que vous configurez.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 10/09/2026.
Guides connexes : VBA AutoFit · VBA Renvoyer à la ligne · VBA Worksheets · VBA Largeur de colonne · VBA Range
