Excel : vrais vides vs « «  » », fusion des codes, IFS/XLOOKUP et astuces Power Query

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.

Sommaire

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 (utilisez FIND pour une recherche sensible à la casse).
  • Excel 2021 propose XLOOKUP, XMATCH et LET, très utiles pour condenser/structurer vos formules. (Certaines fonctions 365 récentes comme TEXTSPLIT n’existent pas en perpétuel 2021.)

Comprendre « vide réel » vs « chaîne vide »

AspectVide réelChaîne vide ("")
Contenu de celluleAucun contenuFormule ou constante à longueur 0
ISBLANK(A1)TRUEFALSE
Filtre « (Vides) »Affichée comme videPeut apparaître comme vide après conversion en valeurs, voir méthode ci‑dessous
Collage spécial > Ignorer les cellules videsIgnoréePas ignorée
AffichageRienRien (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

  1. Sélectionnez la colonne ou plage à nettoyer.
  2. CopierCollage spécial > Valeurs (fige les "" en constantes texte à longueur 0).
  3. Activez un filtre (Accueil > Trier et filtrer > Filtrer).
  4. Ouvrez la liste déroulante de filtre de la colonne, cochez uniquement (Vides).
  5. Sélectionnez les cellules visibles (cliquez dans la plage puis Ctrl+A si nécessaire).
  6. Appuyez sur Suppr → ces cellules deviennent des vides réels (ClearContents).
  7. 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)

  1. Convertissez votre plage en Tableau (Ctrl + T), puis Données > À partir du Tableau/plage.
  2. Dans Power Query, Remplacer les valeurs : remplacez la chaîne vide par null (laissez « Remplacer par » vide et cochez « Correspondance exacte » si besoin).
  3. 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ère A3.
  • 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&lt;&gt;"")*(COLUMN(v)-MIN(COLUMN(v))+1),
  p, XMATCH(TRUE, isVal&gt;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 par FIND 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

BesoinFormule conseilléeQuand l’utiliserAvantage
Un seul code prioritaireIFS(...) ou table + XLOOKUPLogique claire avec priorité hiérarchiqueLisibilité, maintenance
Concaténer tous les codesTEXTJOIN(", ", TRUE, ...)Reporting multi‑étiquettesIgnore automatiquement les vides
Première non vide (N colonnes)INDEX+MATCH ou XMATCHRemplacer « IF imbriqués »Compact, extensible
Obtenir de vrais videsFiltre « (Vides) » après Coller en valeursPréparer un collage « Ignorer vides »100% compatible Excel 2021
Automatisation durablePower Query & nullFlux récurrents, importsTraç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.
LigneBL (source)BS (source)A : Code HGB : Code BMC : 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
4livraison br 24h«  »BMBMBM
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&lt;&gt;"", 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 directement A1="" ou LEN(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 »

  1. Calculez vos codes dans A et B (et autres) avec IFS ou la table de correspondance ;
  2. Créez la colonne de fusion finale (première non vide ou concaténation) ;
  3. Copiez cette colonne → Collage spécial > Valeurs dans la zone de destination intermédiaire ;
  4. Filtrez « (Vides) » et Suppr pour obtenir de vrais vides si un collage ultérieur l’exige ;
  5. 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é
hgHGPriorité 1 (produit « haute gamme »)
brBMPriorité 2 (branche retail)
jrlJRL
cvhCVH
vicNGV
adAD

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érez IFS pour la lisibilité, ou mieux, une table de correspondance.
  • Tester le vide avec ISBLANK sur des cellules à "" : utilisez LEN(A1)=0 ou A1="" 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 :

  1. Obtenir de vrais vides avant collage : Coller en valeurs → Filtrer « (Vides) » → Suppr.
  2. É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.

Sommaire