TL;DR — Il n'existe pas de « effacer une cellule » unique.
.ClearContentsefface la valeur et la formule mais garde la mise en forme — celle que vous voulez quatre-vingt-dix pour cent du temps..Clearefface tout, formats et bordures compris, réservez-le donc à la remise d'une cellule à l'état vierge d'usine..ClearFormatsefface la mise en forme et garde les valeurs. Affectercell.Value = ""n'est pas vide — cela laisse une chaîne de longueur nulle queISBLANKlit comme non vide. Et.Clearn'est pas.Delete: Clear vide la cellule sur place, Delete la retire et décale ses voisines.
Range("A2:Z1000").ClearContents ' donnees effacees, modele (bordures/couleurs/formats) garde
Range("A2:Z1000").Clear ' TOUT efface - vous devez maintenant refaire la mise en forme
Range("A2:Z1000").ClearFormats ' mise en forme effacee, valeurs gardees
Range("A2").Value = "" ' PAS vide - une chaine vide ; ISBLANK vaut False
Range("A2").ClearContents ' vraiment vide
Tout le monde apprend d'abord .ClearContents, puis se demande pourquoi .Clear « a supprimé mes
bordures », pourquoi une cellule « vide » fait quand même trébucher un COUNTA, ou pourquoi effacer une
plage a cassé des formules trois colonnes plus loin. Tout cela vient d'une seule idée à retenir : une
cellule est un empilement de couches indépendantes, et effacer, c'est choisir quelles couches
supprimer. Choisissez la gomme qui correspond à la couche que vous visez, et les surprises
disparaissent.
Ce que vous allez apprendre
- Le modèle mental — une cellule est faite de couches, et effacer choisit quelles couches supprimer
.ClearContentscontre.Clearcontre.ClearFormats- Pourquoi
cell.Value = ""est un faux vide, et ce qui vide vraiment une cellule - Pourquoi
.Clearet.Deletesont des opérations différentes, pas des synonymes - Effacer toute une feuille ou une used range en un seul appel rapide
Le modèle mental : une cellule est faite de couches, effacer choisit lesquelles supprimer
Une cellule n'est pas une chose unique. Elle contient une valeur ou formule, un format de nombre, une police et un remplissage, des bordures, une mise en forme conditionnelle, une validation de données et des commentaires — des couches indépendantes empilées dans la même cellule. Il n'existe aucune méthode nommée « clear » ; il existe une famille de méthodes, chacune retirant un sous-ensemble choisi :
Range("A1").ClearContents ' retire : valeur/formule garde : tout le reste
Range("A1").ClearFormats ' retire : format de nombre, police, remplissage, bordures garde : valeur
Range("A1").Clear ' retire : TOUT ce qui precede
Une fois que vous voyez les couches, les noms de méthode disent exactement ce qu'ils font. La question n'est jamais « comment effacer cette cellule » — c'est « quelles couches je veux voir disparaître », et la réponse choisit la méthode.
ClearContents contre Clear contre ClearFormats
.ClearContents est le cheval de trait : effacer les données, garder le modèle. Elle retire les
valeurs et les formules et laisse intacts les bordures, les couleurs, les formats de nombre et la
validation — c'est exactement ce que signifie « effacer les chiffres du mois dernier pour saisir ceux de
ce mois-ci » :
Range("B2:B50").ClearContents ' chiffres effaces, le tableau mis en forme ressemble toujours a un tableau
.Clear est la masse : elle retire le contenu et toutes les couches de mise en forme — bordures,
remplissages, mise en forme conditionnelle, validation de données, commentaires. C'est le dégât
accidentel numéro un en VBA : recourir à .Clear pour « vider » une plage mise en forme et découvrir que
les bordures et les couleurs que vous aviez bâties ont disparu elles aussi.
Range("B2:B50").Clear ' maintenant B2:B50 est vide ET sans mise en forme - tout a refaire
N'utilisez .Clear que lorsque vous voulez vraiment dire « remettre ces cellules à un état neuf, sans
mise en forme ». .ClearFormats est l'outil chirurgical inverse — retirer la mise en forme, garder les
valeurs — et il a des cousins ciblés pour une seule couche : .ClearComments, .ClearHyperlinks,
.ClearNotes, .ClearOutline. Choisissez la couche, choisissez la méthode.
Le piège de la chaîne vide : elle n'est pas vide
C'est le piège silencieux. Affecter une chaîne vide ne vide pas une cellule — cela stocke une chaîne de longueur nulle, qui est une valeur, pas une absence de valeur :
Range("A1").Value = "" ' A1 contient maintenant une CHAINE de longueur nulle
' ISBLANK(A1) vaut False ; COUNTA compte A1 ; IsEmpty(Range("A1")) vaut False
Range("A1").ClearContents ' A1 est maintenant reellement vide
' ISBLANK(A1) vaut True ; COUNTA ignore A1 ; IsEmpty(Range("A1")) vaut True
Une cellule mise à "" paraît vide à l'écran mais se comporte comme remplie : COUNTA la compte,
ISBLANK et IsEmpty la signalent comme non vide, Range.End(xlUp) s'arrête dessus, et les graphiques
comme les tableaux croisés dynamiques la traitent comme une donnée. Cela produit ces bugs exaspérants du
genre « la cellule est vide mais Excel n'est pas d'accord ». Pour vider une cellule, utilisez
.ClearContents (ou affectez Empty : Range("A1").Value = Empty), jamais = "". La distinction entre
une cellule réellement vide et une chaîne vide est l'une des choses les plus utiles à intégrer ; voir
VBA Cell Value pour la façon dont les valeurs se relisent.
Clear n'est pas Delete : le décalage qui casse les adresses
.Clear et .Delete sonnent comme des synonymes, et n'en sont pas. .Clear vide la cellule mais la
laisse là où elle est. .Delete retire entièrement la cellule et décale ses voisines vers le haut
ou vers la gauche pour combler le trou — si bien que chaque adresse en dessous ou à droite de la
suppression change, et les formules pointant vers les cellules déplacées peuvent se casser ou renvoyer
#REF!.
Range("A5").ClearContents ' A5 est vide ; A6, A7, ... restent en place
Range("A5").Delete Shift:=xlUp ' A5 a DISPARU ; A6 devient A5, A7 devient A6, les adresses se decalent
Si votre but est « rendre cette cellule vide », c'est toujours .ClearContents — jamais .Delete. Ne
recourez à .Delete que lorsque vous voulez réellement faire disparaître la cellule, la ligne ou la
colonne et que le décalage est le but recherché, comme supprimer des lignes vides. Faire une suppression
de lignes en toute sécurité (boucler de bas en haut, utiliser EntireRow) est un sujet à part entière ;
voir VBA Delete Rows. Confondre les deux, c'est ainsi qu'une macro de
« nettoyage » brouille une feuille en silence.
Effacer toute une feuille ou une used range en un seul appel
Effacer est une opération de plage, alors faites-le en un seul appel, pas dans une boucle cellule par cellule. Une boucle franchit la frontière de VBA vers Excel à chaque cellule et rame sur les grandes plages ; un seul appel sur toute la plage est une opération unique (le même principe d'aller-retour que pour la lecture des valeurs — voir VBA Cell Value) :
ws.UsedRange.ClearContents ' efface toutes les donnees de la feuille, garde les formats
ws.Cells.Clear ' efface toute la feuille, contenu et formats
Range("A2", Range("A2").End(xlDown)).ClearContents ' efface une colonne de donnees sous un en-tete
UsedRange et CurrentRegion visent « tout ce qui contient des données » sans coder en dur une hauteur
de plage ; voir VBA UsedRange. Ma règle empirique : prenez .ClearContents
par défaut. .Clear est une remise à l'état d'usine, pas une gomme ; .Delete est de la chirurgie
structurelle, pas une gomme ; = "" est un bug de faux vide. Neuf fois sur dix, le verbe que vous voulez
est .ClearContents, et la dixième, c'est .ClearFormats.
Comment ExcelMaster aide
Les erreurs d'effacement qui coûtent vraiment du temps sont discrètes : le .Clear qui a emporté les
bordures du modèle avec lui, le « vide » de = "" qu'un COUNTA en aval a continué de compter, le
.Delete qui a décalé une colonne et cassé des formules deux feuilles plus loin. Chacune fait quelque
chose — juste pas ce que vous vouliez.
ExcelMaster saisit la gomme qui
correspond à votre intention. Demandez-lui d'« effacer les données mais garder la disposition » et il
utilise .ClearContents sur la used range ; demandez-lui de « réinitialiser complètement cette feuille »
et il utilise .Clear. Il vide les cellules avec .ClearContents plutôt qu'avec = "", pour que vos
vides soient réellement vides, et il réserve .Delete aux moments où vous voulez vraiment retirer des
lignes — de bas en haut pour que rien ne se décale en dessous. Vous dites ce qui doit disparaître ; il
choisit la méthode qui laisse le reste de la cellule intact.
Questions fréquentes
Quelle est la différence entre Clear et ClearContents en VBA ?
.ClearContents ne retire que les valeurs et les formules, en gardant la mise en forme, les bordures, les
formats de nombre et la validation. .Clear retire tout — le contenu et toutes les couches de mise en
forme. Utilisez .ClearContents pour effacer les données tout en gardant un modèle intact, et .Clear
uniquement quand vous voulez remettre les cellules à un état complètement vide et sans mise en forme.
Comment effacer le contenu d'une cellule mais garder la mise en forme en VBA ?
Utilisez .ClearContents : Range("B2:B50").ClearContents retire les valeurs et les formules tout en
laissant en place les bordures, les couleurs, les formats de nombre et la validation de données. Évitez
.Clear, qui retire aussi toute cette mise en forme, et évitez = "", qui laisse une chaîne de longueur
nulle plutôt qu'une cellule réellement vide.
Affecter une chaîne vide à une cellule revient-il à l'effacer en VBA ?
Non. Range("A1").Value = "" stocke une chaîne de longueur nulle, qui est une valeur : ISBLANK renvoie
False, COUNTA compte la cellule, et IsEmpty la signale comme non vide. Pour rendre une cellule
réellement vide, utilisez Range("A1").ClearContents ou Range("A1").Value = Empty. La cellule à chaîne
vide paraît vide mais se comporte comme remplie.
Quelle est la différence entre Clear et Delete en VBA ?
.Clear (et .ClearContents) vide une cellule mais la laisse en place, si bien que les adresses
environnantes ne changent pas. .Delete retire entièrement la cellule et décale les cellules voisines
vers le haut ou vers la gauche pour combler le vide, ce qui change chaque adresse en dessous ou à droite
et peut casser des formules avec #REF!. Utilisez .ClearContents pour vider une cellule et .Delete
uniquement quand vous voulez la faire disparaître.
Comment effacer une feuille entière ou une used range en VBA ?
Pour effacer toutes les données mais garder la mise en forme, utilisez ws.UsedRange.ClearContents. Pour
effacer toute la feuille, formats compris, utilisez ws.Cells.Clear. Les deux agissent en un seul appel,
ce qui est bien plus rapide qu'une boucle cellule par cellule, et UsedRange vise exactement la région
qui contient des données sans coder en dur une taille de plage.
Testé dans
Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 01/09/2026.
Guides connexes : VBA Cell Value · VBA Delete Rows · VBA Copy Paste · VBA UsedRange · VBA Number Format
