🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Paste Values dans Excel — figer des formules en résultats, de la bonne façon

|

VBA Paste Values dans Excel — figer des formules en résultats, de la bonne façon

TL;DR — Coller les valeurs remplace une formule vivante par le nombre qu'elle affiche à cet instant. Ce nombre tient alors tout seul : vous pouvez supprimer les cellules qu'il référençait, le classeur arrête de le recalculer, et les liens externes se taisent. La recette au presse-papiers est .Copy puis PasteSpecial Paste:=xlPasteValues — mais xlPasteValues tout seul laisse tomber le format de nombre, donc les dates reviennent en numéros de série comme 45000. Utilisez xlPasteValuesAndNumberFormats quand l'affichage compte, et pour un simple gel sans aucun presse-papiers, dst.Value = src.Value.

' Figer une plage de formules dans leurs resultats, en gardant l'affichage :
src.Copy
src.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Application.CutCopyMode = False

' L'equivalent sans presse-papiers pour des valeurs seules (perd les formats de nombre) :
dst.Value = src.Value

Une formule est une promesse de recalcul : =Sheet2!A1*1.1 n'est pas un nombre, c'est une instruction qui se ré-exécute chaque fois que Sheet2!A1 change. La plupart du temps, c'est exactement ce que vous voulez. Mais parfois vous avez besoin que la réponse cesse d'être une promesse et devienne un fait — un mois que vous archivez, un instantané que vous envoyez par e-mail, une formule volatile dont vous voulez arrêter le remue-ménage. C'est ce que fait le collage des valeurs. C'est le coin le plus recherché de PasteSpecial, et il cache un piège qu'il vaut mieux connaître avant de s'en servir.

Ce que vous allez apprendre

  • Le modèle mental — coller les valeurs transforme une promesse de recalcul en un simple nombre
  • La règle qui sauve les données — figer avant de supprimer la source, jamais après
  • Le piège de format — xlPasteValues retire le format de nombre et les dates deviennent des séries
  • Les trois vraies utilités — archiver un résultat, arrêter les volatiles, rompre les liens externes
  • Le raccourci sans presse-papiers — dst.Value = src.Value
  • Quand ne pas figer, parce qu'une formule fait son travail

Le modèle mental : un instantané, pas un lien

Une formule relie une cellule à ses entrées. Coller les valeurs coupe ce lien et laisse derrière lui le nombre qui s'affichait au moment où vous l'avez fait — un instantané. Les pixels ont l'air identiques ; le comportement est complètement différent. Avant, la cellule était =A1+A2 et suivait A1 et A2 pour toujours. Après, la cellule est le littéral 350, et A1 et A2 peuvent changer, se déplacer ou disparaître sans qu'elle s'en aperçoive.

Cette seule distinction — lien contre instantané — résume toute la décision. Si vous vous demandez « ce nombre a-t-il encore besoin de suivre ses entrées ? », la réponse vous dit s'il faut laisser la formule ou la figer. Coller les valeurs, c'est vous qui répondez « non, ce résultat est définitif maintenant ».

La règle qui compte le plus : figer avant de supprimer la source

Voici l'erreur qui détruit des données. Vous construisez un rapport avec des formules qui référencent une feuille de données brutes, puis vous supprimez cette feuille pour alléger le fichier — et chaque formule s'effondre en #REF!, parce que les cellules qu'elle visait ont disparu :

dst.Formula = "=RawData!A1 * 1.1"   ' un lien vivant vers une autre feuille
Worksheets("RawData").Delete         ' la source disparait...
' dst affiche maintenant #REF! - le nombre est perdu

Le correctif est une question d'ordre : figez d'abord les résultats en valeurs, puis supprimez la source. Une fois que dst.PasteSpecial Paste:=xlPasteValues s'est exécuté, la cellule contient un vrai nombre qui ne doit plus rien à RawData, donc supprimer la feuille est sans danger. La règle se généralise : chaque fois que vous êtes sur le point de retirer, d'écraser ou de déplacer les cellules dont dépend une formule, collez les valeurs d'abord. Un #REF! ne peut plus être annulé une fois le fichier enregistré et fermé.

Le piège de format : les valeurs seules retirent le format de nombre

Voici la surprise qui ramène les gens vers un moteur de recherche. xlPasteValues copie la valeur — et une valeur, dans Excel, est un nombre nu. Une date est stockée comme un numéro de série (le nombre de jours depuis 1900), la monnaie comme un simple nombre, un pourcentage comme une décimale. Le format de nombre de la formule était ce qui les affichait en 2026-03-15, $1,200 et 35%. Collez seulement les valeurs et cette mise en forme reste en arrière :

src.Copy
src.PasteSpecial Paste:=xlPasteValues                 ' 2026-03-15 devient 46091
src.PasteSpecial Paste:=xlPasteValuesAndNumberFormats ' 2026-03-15 reste 2026-03-15

Le choix par défaut honnête pour tout ce qu'un humain lit est donc xlPasteValuesAndNumberFormats, qui transporte le format d'affichage avec le nombre. Ne prenez xlPasteValues tout seul que lorsque vous voulez précisément les nombres bruts sous-jacents — pour alimenter un calcul, ou exporter vers un système qui remet de toute façon la mise en forme.

Trois utilités réelles du collage de valeurs

Figer des formules n'est pas une seule tâche mais trois, et les nommer vous dit quand agir :

  • Archiver un résultat. Un récapitulatif mensuel calculé à partir des données de ce mois-ci ne devrait pas changer quand les données du mois suivant arrivent. Figez-le et le nombre appartient au mois, définitivement.
  • Arrêter les formules volatiles. NOW(), RAND(), TODAY() et OFFSET() se recalculent à chaque modification, ce qui devient du bruit une fois que vous avez la valeur voulue. Coller les valeurs les fige en place.
  • Rompre les liens externes. Un classeur plein de =[Budget.xlsx]Sheet1!A1 harcèle chaque destinataire d'une invite de mise à jour. Figez ces cellules et le fichier transporte ses nombres sans aucun lien à poursuivre.

Les trois sont la même opération avec une intention différente, et les trois sont dangereuses si vous supprimez la source d'abord — figez, puis retirez.

Le raccourci sans presse-papiers : dst.Value = src.Value

Si tout ce que vous voulez, ce sont des valeurs — pas de formats, pas d'opération, pas de transposition — vous n'avez pas du tout besoin du presse-papiers. Affecter le .Value d'une plage à une autre écrit les nombres directement :

dst.Value = src.Value       ' valeurs seules, instantane, ne touche jamais au presse-papiers

C'est la façon la plus rapide de figer sur place — rng.Value = rng.Value écrase les formules d'une plage par leurs propres résultats en une ligne — et cela évite tous les modes de défaillance du presse-papiers liés à PasteSpecial. Sa seule limite est qu'elle ne déplace que les valeurs : pas de format de nombre, donc utilisez PasteSpecial Paste:=xlPasteValuesAndNumberFormats quand l'affichage doit survivre, et voyez Copy Destination pour la vue d'ensemble de la copie sans presse-papiers.

Quand ne pas figer

Figer est destructeur — vous jetez une formule. Ne le faites pas à une cellule dont le nombre devrait continuer à suivre ses entrées : un total courant, un récapitulatif lié, un modèle dont toute la raison d'être est de se recalculer quand les hypothèses changent. Si vous figez ces cellules-là, le prochain lecteur modifie une entrée et le « total » arrête de bouger en silence, ce qui est pire que n'importe quel délai de recalcul. Figez un résultat qui est définitif ; laissez une formule qui travaille encore. Dans le doute, figez une copie sur une feuille d'instantané et gardez les formules vivantes là où elles sont.

Comment ExcelMaster aide

Coller les valeurs est une idée qui tient en une ligne, avec deux façons de perdre des données : figer après avoir supprimé la source et vous obtenez #REF! ; utiliser xlPasteValues tout seul sur des dates et vous envoyez à quelqu'un par e-mail une colonne de 45000. Les deux compilent, les deux s'exécutent, et les deux ont l'air corrects jusqu'à ce qu'il soit trop tard pour corriger.

ExcelMaster vous laisse dire ce que vous voulez — « fige les chiffres de ce mois-ci », « convertis ces formules en valeurs mais garde les dates », « romps les liens avant que je l'envoie » — et il ordonne les étapes en sécurité (figer d'abord, supprimer ensuite), choisit xlPasteValuesAndNumberFormats quand un humain lira le résultat, et utilise dst.Value = src.Value quand le presse-papiers n'est pas nécessaire. Vous gardez le classeur et le code.

Questions fréquentes

Comment convertir des formules en valeurs en VBA ?

Figez-les sur place : rng.Value = rng.Value écrase chaque formule par le nombre qu'elle produit actuellement, en une ligne et sans presse-papiers. Si vous devez conserver le format d'affichage des dates ou de la monnaie, utilisez plutôt la forme presse-papiers — rng.Copy puis rng.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, suivi de Application.CutCopyMode = False.

Pourquoi mes dates se sont-elles transformées en nombres après un collage de valeurs ?

Parce que xlPasteValues colle la valeur sans le format de nombre, et que la valeur sous-jacente d'une date est un numéro de série comme 45000. C'est le format qui l'affichait comme une date. Utilisez xlPasteValuesAndNumberFormats pour que le format d'affichage traverse aussi, et les dates restent des dates.

Comment arrêter le recalcul d'une formule sans la supprimer ?

Remplacez-la par son résultat — collez les valeurs. Copiez les cellules et faites PasteSpecial Paste:=xlPasteValuesAndNumberFormats, ou utilisez rng.Value = rng.Value. C'est le correctif habituel pour les formules volatiles comme NOW(), RAND() et OFFSET() qui changent à chaque modification : une fois figé, le nombre est fixe.

Le collage de valeurs empêchera-t-il mes formules de casser si je supprime la feuille source ?

Il empêche cette casse — à condition de figer d'abord. Si une formule référence une autre feuille et que vous supprimez cette feuille, la formule devient #REF! et le nombre est perdu. Collez les valeurs avant de supprimer, pour que la cellule contienne un vrai nombre qui ne dépend plus de la source.

Quelle est la différence entre .Value et .Value2 lors d'un gel ?

.Value renvoie les dates et la monnaie sous leurs types mis en forme, tandis que .Value2 renvoie le nombre brut sous-jacent (une date sous son numéro de série). Pour un gel simple, rng.Value = rng.Value convient ; n'utilisez .Value2 que lorsque vous voulez délibérément les numéros de série bruts sans typage monnaie ou date — voyez VBA Value2 pour la distinction.

Testé dans

Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 09/09/2026.

Guides connexes : VBA PasteSpecial · VBA Copy Destination · VBA Copy Paste · VBA Formula · VBA Value2