Dans Excel 2021, les cellules qui renvoient ""
ne sont pas vraiment vides et font échouer « Ignorer les cellules vides ». Ce guide explique comment obtenir de vrais vides, fusionner des codes en une seule colonne et condenser vos tests avec des formules robustes (IFS/XLOOKUP), avec ou sans VBA.
Excel : obtenir de « vraies » cellules vides et fusionner des codes
Vue d’ensemble de la question
Vous disposez de deux colonnes (ou plus) qui retournent un code si un motif est trouvé, sinon elles renvoient une chaîne vide ""
, par exemple :
=IF(ISNUMBER(SEARCH("hg",BL3)),"HG","")
=IF(ISNUMBER(SEARCH("br",BS3)),"BM","")
Objectif : rassembler ces résultats en une seule colonne de codes prête à l’emploi (collage, export, reporting).
Problème : les cellules qui « semblent vides » (""
) ne sont pas des vides réels. ISBLANK
renvoie FALSE
. Et lors d’un Collage spécial > Ignorer les cellules vides, Excel n’ignore pas ces cellules car elles contiennent quand même quelque chose (une formule ou une chaîne de longueur 0).
Question : comment obtenir de vrais vides, ou à défaut, quelle stratégie pour fusionner sans collage ? Peut‑on condenser de multiples tests en une seule formule maintenable ?
Faits essentiels à connaître
""
(chaîne de longueur 0) n’est pas un « vide réel ». La cellule n’est pas vide dès lors qu’elle contient une formule ou une constante, même si sa longueur affichée vaut 0.- Ignorer les cellules vides n’ignore que les cellules strictement vides (aucune formule, aucun texte, aucun espace, aucune valeur).
NULL()
n’existe pas en Excel ; tenter de l’appeler renvoie#NAME?
.SEARCH
est insensible à la casse (utilisezFIND
pour une recherche sensible à la casse).- Excel 2021 propose
XLOOKUP
,XMATCH
etLET
, très utiles pour condenser/structurer vos formules. (Certaines fonctions 365 récentes commeTEXTSPLIT
n’existent pas en perpétuel 2021.)
Comprendre « vide réel » vs « chaîne vide »
Aspect | Vide réel | Chaîne vide ("" ) |
---|---|---|
Contenu de cellule | Aucun contenu | Formule ou constante à longueur 0 |
ISBLANK(A1) | TRUE | FALSE |
Filtre « (Vides) » | Affichée comme vide | Peut apparaître comme vide après conversion en valeurs, voir méthode ci‑dessous |
Collage spécial > Ignorer les cellules vides | Ignorée | Pas ignorée |
Affichage | Rien | Rien (mais la cellule n’est pas vide) |
Méthode 1 – Obtenir de vrais vides à partir de ""
(sans VBA)
Le principe : figer les formules en valeurs, puis supprimer les cellules qui contiennent une chaîne vide. Deux parcours sûrs sont détaillés :
Parcours A : Filtrer les « (Vides) », puis supprimer
- Sélectionnez la colonne ou plage à nettoyer.
- Copier → Collage spécial > Valeurs (fige les
""
en constantes texte à longueur 0). - Activez un filtre (Accueil > Trier et filtrer > Filtrer).
- Ouvrez la liste déroulante de filtre de la colonne, cochez uniquement (Vides).
- Sélectionnez les cellules visibles (cliquez dans la plage puis Ctrl+A si nécessaire).
- Appuyez sur Suppr → ces cellules deviennent des vides réels (ClearContents).
- Retirez le filtre. Désormais, Ignorer les cellules vides fonctionnera.
Pourquoi ça marche ? Après « Coller en valeurs », vos ""
sont des constantes de longueur 0. Le filtre « (Vides) » les regroupe ; Suppr enlève la valeur, il ne laisse rien : la cellule est réellement vide.
Parcours B : Via Power Query (Get & Transform)
- Convertissez votre plage en Tableau (Ctrl + T), puis Données > À partir du Tableau/plage.
- Dans Power Query, Remplacer les valeurs : remplacez la chaîne vide par null (laissez « Remplacer par » vide et cochez « Correspondance exacte » si besoin).
- Fermez & chargez vers une nouvelle feuille. Les null deviennent de vrais vides dans Excel.
Avantages : reproductible, traçable, idéal si la source est rafraîchie régulièrement.
Astuce pro : évitez « Rechercher & remplacer » avec « Rechercher : (vide) »—cela sélectionne souvent trop large. Le duo Coller en valeurs + Filtre (Vides) est beaucoup plus fiable.
Méthode 2 – Éviter le collage : fusionner par formule (recommandé)
Plutôt que de « nettoyer » puis de coller, créez une troisième colonne qui renvoie directement le code souhaité en contournant les faux vides.
Cas simple : prioriser B sur A
=IF(B3="", A3, B3)
- Si
B3
renvoie""
alors on récupèreA3
. - Si les deux sont vides, le résultat est
""
. Au besoin, figez ensuite avec Collage > Valeurs.
Cas « première non vide » sur N colonnes
Pour retourner la première valeur non vide entre A3:C3
(ou plus) :
=IFERROR(INDEX(A3:C3, MATCH(TRUE, A3:C3<>"", 0)), "")
Cette formule exploite MATCH
sur un test booléen (A3:C3<>""
) pour trouver la première colonne non vide, puis INDEX
renvoie cette valeur. Sur Excel 2021 (tableaux dynamiques), l’entrée est directe.
Cas « concaténer plusieurs codes » (ignorer les vides)
Si vous souhaitez additionner les codes identifiés (A, B, C…) en une seule cellule, en ignorant les ""
:
=TEXTJOIN(", ", TRUE, A3, B3, C3, D3)
TEXTJOIN
avec ignore_empty=TRUE
est parfait pour ce scénario : aucun séparateur supplémentaire n’est inséré pour les vides.
Cas « code prioritaire selon un ordre métier »
Quand plusieurs règles peuvent s’appliquer, on impose une priorité :
=LET(
v, A3:C3,
isVal, (v<>"")*(COLUMN(v)-MIN(COLUMN(v))+1),
p, XMATCH(TRUE, isVal>0, 0, 1),
IFERROR(INDEX(v, p), "")
)
Ici, on localise la première position non vide (à gauche) avec XMATCH
, puis on renvoie la valeur correspondante. Ajustez l’ordre des colonnes pour refléter vos priorités.
Condensez plusieurs tests en une seule formule lisible
Option I : IFS
(Excel 2019/2021+)
=IFS(
ISNUMBER(SEARCH("hg",BL3)),"HG",
ISNUMBER(SEARCH("br",BS3)),"BM",
ISNUMBER(SEARCH("jrl",BL3)),"JRL",
ISNUMBER(SEARCH("cvh",BL3)),"CVH",
ISNUMBER(SEARCH("vic",BS3)),"NGV",
ISNUMBER(SEARCH("xxxx",BS3)),"XX",
ISNUMBER(SEARCH("ad",BL3)),"AD",
TRUE,""
)
Points clés :
- La première condition évaluée à
TRUE
arrête l’évaluation (priorité top‑down). SEARCH
est insensible à la casse ; remplacez parFIND
si vos codes sont sensibles à la casse.- Terminez par
TRUE,""
pour renvoyer une chaîne vide si rien n’est trouvé.
Option II : table de correspondance + recherche (maintenable)
Créez un tableau nommé (par ex. TableMotifs) avec deux colonnes : Motif (hg, br, jrl…) et Code (HG, BM, JRL…). Puis utilisez :
=LET(
src, TEXTJOIN(" ", TRUE, BL3, BS3),
pat, TableMotifs[Motif],
code, TableMotifs[Code],
XLOOKUP(TRUE, ISNUMBER(SEARCH(pat, src)), code, "", 0)
)
TEXTJOIN
fusionne les zones à analyser (BL3, BS3, …) en une chaîne unique.XLOOKUP
renvoie le premier motif correspondant ; l’ordre de la table définit la priorité.
Si vous préférez le dernier motif trouvé :
=IFERROR(LOOKUP(2^15, SEARCH(TableMotifs[Motif], src), TableMotifs[Code]), "")
Conseil qualité : centralisez vos motifs/codes dans une table ; vous pourrez y ajouter/modifier des lignes sans ouvrir les formules. C’est plus fiable, plus documenté, et plus rapide à relire.
Stratégies complètes selon votre besoin
Besoin | Formule conseillée | Quand l’utiliser | Avantage |
---|---|---|---|
Un seul code prioritaire | IFS(...) ou table + XLOOKUP | Logique claire avec priorité hiérarchique | Lisibilité, maintenance |
Concaténer tous les codes | TEXTJOIN(", ", TRUE, ...) | Reporting multi‑étiquettes | Ignore automatiquement les vides |
Première non vide (N colonnes) | INDEX+MATCH ou XMATCH | Remplacer « IF imbriqués » | Compact, extensible |
Obtenir de vrais vides | Filtre « (Vides) » après Coller en valeurs | Préparer un collage « Ignorer vides » | 100% compatible Excel 2021 |
Automatisation durable | Power Query & null | Flux récurrents, imports | Traçable, rafraîchissable |
Exemples concrets
Supposons :
- BL : description produits (contient « hg », « jrl », « ad »…)
- BS : notes commerciales (contient « br », « vic »…)
- Colonnes A et B calculent des codes via vos deux formules initiales.
Ligne | BL (source) | BS (source) | A : Code HG | B : Code BM | C : Fusion (première non vide) | D : Concat (tous les codes) |
---|---|---|---|---|---|---|
3 | « promo hg acier » | — | HG | « » | =IF(B3= » »,A3,B3) → HG | =TEXTJOIN(« , « ,TRUE,A3,B3) → HG |
4 | — | livraison br 24h | « » | BM | BM | BM |
5 | « hg jrl » | « vic » | HG | « » | HG (selon priorité) | HG, NGV (si règle « vic→NGV ») |
6 | — | — | « » | « » | « » | « » |
Méthode 3 – Nettoyage avec VBA (sélectif et rapide)
Pour effacer uniquement les cellules qui contiennent une formule renvoyant ""
:
Sub ClearPseudoBlanks()
Dim c As Range
For Each c In Selection
If c.HasFormula Then
If c.Value2 = "" Then c.ClearContents
End If
Next c
End Sub
Sélectionnez la plage à traiter puis exécutez la macro. Résultat : les « faux vides » redeviennent de vrais vides, compatibles avec « Ignorer les cellules vides ».
Sécurité & précaution : travaillez sur une copie ou sauvegardez le classeur avant d’exécuter des macros destructives (effacement). Vous pouvez aussi insérer une étape de confirmation (InputBox) dans la macro si besoin.
Dépannage : pourquoi « Ignorer les cellules vides » m’ignore ?
- Vous collez des formules : si la cellule cible contient une formule, Excel estime qu’il n’y a pas de « vide » à ignorer dans la source. Utilisez plutôt une colonne de fusion par formule (méthode 2) ou convertissez en vides réels (méthode 1).
- Présence d’espaces invisibles :
CHAR(160)
(espace insécable), tabulations, etc. Test rapide :=LEN(TRIM(SUBSTITUTE(A1,CHAR(160),"")))
. Si >0, ce n’est pas vide. - Filtre non rafraîchi : après « Coller en valeurs », réappliquez/actualisez le filtre pour que « (Vides) » reflète le nouvel état.
- Formules volatiles coûteuses : si vous enchaînez de nombreux
SEARCH
sur de grandes plages, le recalcul peut ralentir. Mettez en table de correspondance (Option II) et réduisez le nombre d’appels.
Recettes prêtes à copier
Fusion simple de deux colonnes avec priorité
=IF(B3="", A3, B3)
Première non vide parmi 5 colonnes A:E
=IFERROR(INDEX(A3:E3, MATCH(TRUE, A3:E3<>"", 0)), "")
Concaténer tous les codes A:E (ignorer vides)
=TEXTJOIN(" | ", TRUE, A3, B3, C3, D3, E3)
Condensation avec IFS
(priorité top‑down)
=IFS(
ISNUMBER(SEARCH("hg",BL3)),"HG",
ISNUMBER(SEARCH("br",BS3)),"BM",
TRUE,""
)
Table de correspondance + XLOOKUP
=LET(
src, TEXTJOIN(" ", TRUE, BL3, BS3),
XLOOKUP(TRUE, ISNUMBER(SEARCH(TableMotifs[Motif], src)), TableMotifs[Code], "", 0)
)
Bonnes pratiques & design de formules
- Évitez
ISBLANK
pour tester vos « vides ». Préférez directementA1=""
ouLEN(A1)=0
. - Uniformisez la casse : en tête de chaîne, appliquez
LOWER
aux sources :=SEARCH("hg",LOWER(BL3))
pour un comportement stable. - Priorité explicite : dans
IFS
ou la table de correspondance, ordonnez vos règles par priorité métier, documentez en commentaire (Alt + Entrée dans la barre de formule pour aérer). - Tableaux structurés : convertissez vos plages en tableaux (Ctrl + T) ; utilisez les références structurées (ex.
TableMotifs[Motif]
) pour plus de lisibilité et des formules auto‑étendues. - Figez au bon moment : quand le résultat est correct, figer en valeurs accélère, simplifie et stabilise vos classeurs.
Workflow type (sans VBA) pour « Ignorer les cellules vides »
- Calculez vos codes dans A et B (et autres) avec
IFS
ou la table de correspondance ; - Créez la colonne de fusion finale (première non vide ou concaténation) ;
- Copiez cette colonne → Collage spécial > Valeurs dans la zone de destination intermédiaire ;
- Filtrez « (Vides) » et Suppr pour obtenir de vrais vides si un collage ultérieur l’exige ;
- Effectuez le Collage spécial > Ignorer les cellules vides vers la cible finale.
FAQ
« Peut‑on rendre une cellule vraiment vide depuis une formule ? »
Non. Aucune fonction ne peut supprimer son propre contenu. Une formule renvoie toujours quelque chose (y compris ""
). Pour obtenir un vide réel, il faut effacer le contenu (manuellement, via VBA ClearContents
, ou via un chargement Power Query).
« Mon filtre (Vides) n’attrape pas mes ""
»
Assurez‑vous d’abord d’avoir collé en valeurs. Un ""
issu d’une formule n’est pas pris comme vide par certains outils. Une fois collé en valeurs, réappliquez le filtre.
« Je veux le dernier code trouvé, pas le premier »
Avec une table de motifs : =IFERROR(LOOKUP(2^15, SEARCH(TableMotifs[Motif], src), TableMotifs[Code]), "")
renvoie le dernier motif trouvé dans l’ordre de la chaîne analysée.
« Dois‑je utiliser FIND
ou SEARCH
? »SEARCH
est insensible à la casse et tolère les jokers ; FIND
est sensible à la casse. Choisissez selon vos règles métier.
« Mes textes contiennent des espaces insécables »
Nettoyez avec : =TRIM(SUBSTITUTE(A1,CHAR(160),""))
puis testez LEN()
. Attention, TRIM
n’enlève pas tous les caractères non imprimables ; CLEAN
peut compléter.
Checklist rapide
- Vos « vides » sont‑ils de vrais vides (
ISBLANK
= TRUE) ? - Avez‑vous défini un ordre de priorité clair entre les codes possibles ?
- Vos critères sont‑ils centralisés dans une table de correspondance ?
- Avez‑vous validé l’absence d’espaces/char spéciaux (test
LEN
) ? - Avez‑vous figé en valeurs au bon moment pour gagner en performance ?
Modèle de table de correspondance (à copier)
Motif (à chercher) | Code renvoyé | Commentaire/priorité |
---|---|---|
hg | HG | Priorité 1 (produit « haute gamme ») |
br | BM | Priorité 2 (branche retail) |
jrl | JRL | — |
cvh | CVH | — |
vic | NGV | — |
ad | AD | — |
Formule finale (exemple) :
=LET(
src, TEXTJOIN(" ", TRUE, BL3, BS3),
pat, TableMotifs[Motif],
code, TableMotifs[Code],
XLOOKUP(TRUE, ISNUMBER(SEARCH(pat, src)), code, "", 0)
)
Erreurs fréquentes et comment les éviter
- Empiler des
IF
imbriqués : préférezIFS
pour la lisibilité, ou mieux, une table de correspondance. - Tester le vide avec
ISBLANK
sur des cellules à""
: utilisezLEN(A1)=0
ouA1=""
pour éviter les faux négatifs. - Coller par-dessus des formules existantes : utilisez Collage spécial > Valeurs, ou collez dans une colonne « résultat » dédiée.
- Oublier la priorité : documentez l’ordre dans la table pour éviter des résultats « aléatoires » lorsque plusieurs motifs sont présents.
Conclusion
Le cœur du problème n’est pas Excel « qui n’ignore pas les vides », mais la différence fondamentale entre chaîne vide (""
) et vide réel. Vous avez deux voies fiables :
- Obtenir de vrais vides avant collage : Coller en valeurs → Filtrer « (Vides) » → Suppr.
- Éviter tout collage : fusionner par formule (
IF
/INDEX
+MATCH
/TEXTJOIN
), puis figer en valeurs au moment opportun.
Pour maintenir vos règles à long terme, la table de correspondance couplée à XLOOKUP
/SEARCH
offre une solution robuste, claire et performante.