Excel : comparer deux feuilles et indiquer Yes/No (COUNTIF, MATCH, XLOOKUP)

Besoin d’indiquer “Yes/No” selon que chaque valeur de la Feuille B existe dans la Feuille A ? Voici des formules fiables, des correctifs aux “No” inexpliqués et des alternatives modernes (MATCH, XLOOKUP, Power Query) adaptées aux versions récentes d’Excel.

Sommaire

Comparer deux feuilles Excel : indiquer “Yes/No” selon la présence d’une valeur

Vue d’ensemble de la question

  • Feuille A : ~6 000 valeurs en colonne A
  • Feuille B : ~300 valeurs en colonne A
  • Objectif : pour chaque ligne de Feuille B, écrire en colonne B Yes si la valeur de Feuille B!A existe dans Feuille A!A, sinon No.
  • Problème rencontré : à partir d’une certaine ligne, la formule renvoie “No” alors que la valeur existe.

Réponse & solution immédiate

  1. Dans Feuille B, cellule B1, collez l’une des formules suivantes (adaptez le nom de feuille si nécessaire) :

    Excel en anglais=IF(COUNTIF('Worksheet A'!$A:$A, A1)>0, "Yes", "No")Excel en français=SI(NB.SI('Worksheet A'!$A:$A; A1)>0; "Yes"; "No")
  2. Copiez la formule vers le bas jusqu’à la dernière ligne utilisée de Feuille B.

Principe : COUNTIF / NB.SI compte les occurrences de la valeur de A1 dans la colonne A de Feuille A. Un résultat > 0 déclenche "Yes", sinon "No".

Pourquoi une série de “No” peut apparaître à partir d’une certaine ligne

Quand une formule correcte commence à renvoyer “No” au-delà d’une ligne (p. ex. au-delà de la ligne 35), l’origine est presque toujours référentielle (plage mal pointée) ou qualitative (données non nettoyées). Utilisez la checklist ci-dessous.

Checklist de diagnostic rapide

Problème constatéCause probableCorrectif
La formule renvoie “No” au-delà d’une ligne (ex. > 35)Formule saisie ou recopiée dans la mauvaise feuille ; plage source mal référencéeVérifiez que la formule est bien en Feuille B et que le premier argument vise 'Worksheet A'!$A:$A. Verrouillez avec $ : $A:$A.
Valeurs “identiques” non détectéesEspaces ou caractères invisibles (NBSP), différences de casse, tirets, apostrophes typographiquesNettoyez avant comparaison (voir plus bas). Exemple : =TRIM(SUBSTITUTE(A1,CHAR(160)," ")) puis comparez la version nettoyée.
Numéros vs texte (ex. 00123 vs 123)Types hétérogènes : nombres dans une feuille, texte dans l’autreUniformisez : tout texte (formats “00000”) ou tout nombre (=VALUE(A1)). Ne mélangez pas.
Performance lenteCalcul sur toute la colonne d’une feuille largeLimitez la plage : 'Worksheet A'!$A$1:$A$6000 ou créez une plage dynamique (exemples plus bas).
Calcul figéMode de calcul sur “Manuel”Activez “Automatique” (Formules → Options de calcul) et/ou appuyez sur F9.
Nom de feuille avec espacesAbsence d’apostrophes autour du nom de feuilleEncadrez le nom : 'Worksheet A'!A:A.
Plage Table non étendueDes lignes ajoutées ne sont pas inclusesConvertissez en Table Excel (Ctrl + T) pour que la plage s’étende automatiquement.

Nettoyer les données pour des correspondances fiables

Avant toute comparaison, normalisez les chaînes. Voici des recettes prêtes à l’emploi (créez des colonnes d’aide “Nettoyage_A” et “Nettoyage_B” si besoin).

SymptômeFormule de normalisation (anglais)But
Espaces superflus=TRIM(A1)Supprime les espaces en début/fin et compresse les doubles espaces.
Espaces insécables (NBSP, code 160)=TRIM(SUBSTITUTE(A1,CHAR(160)," "))Remplace les NBSP par des espaces normaux, puis TRIM.
Tabulations et retours chariot=TRIM(SUBSTITUTE(SUBSTITUTE(A1,CHAR(9)," "),CHAR(10)," "))Nettoie tab & LF.
Uniformiser majuscules/minuscules=UPPER(TRIM(A1))Compare en ignorant la casse.
Numéros stockés comme texte=VALUE(A1)Convertit en nombre.
Codes avec zéros à gauche=TEXT(A1,"00000")Uniformise sur 5 chiffres (adaptez le masque).

Une fois les colonnes “nettoyées” prêtes dans A et B, comparez les colonnes nettoyées plutôt que les colonnes brutes.

Méthodes alternatives selon la version d’Excel

MéthodeFormule (anglais)Quand l’utiliserPoints forts
COUNTIF / NB.SI=IF(COUNTIF('Worksheet A'!$A:$A,A1)>0,"Yes","No")Toutes versionsSimple et lisible.
MATCH / EQUIV=IF(ISNUMBER(MATCH(A1,'Worksheet A'!$A:$A,0)),"Yes","No")Grandes listesLégèrement plus rapide.
XLOOKUP / RECHERCHEX=IFERROR(XLOOKUP(A1,'Worksheet A'!A:A,"Yes"),"No")Microsoft 365Syntaxe moderne, gère l’erreur en natif.
Comparaison sensible à la casse=IF(SUMPRODUCT(--EXACT(A1,'Worksheet A'!$A:$A))>0,"Yes","No")Données où “ABC” ≠ “abc”Exactitude stricte.
Mise en forme conditionnelleContrôle visuelSurligne doublons sans colonne supplémentaire.
Power Query (Merge)Très grands jeux de données, flux réutilisablesRobuste, traçable, nettoyages intégrés.

Formules prêtes à copier‑coller

Base (colonne entière)

=IF(COUNTIF('Worksheet A'!$A:$A, A1)>0, "Yes", "No")
=SI(NB.SI('Worksheet A'!$A:$A; A1)>0; "Yes"; "No")

Plage limitée (plus rapide)

=IF(COUNTIF('Worksheet A'!$A$1:$A$6000, A1)>0, "Yes", "No")
=SI(NB.SI('Worksheet A'!$A$1:$A$6000; A1)>0; "Yes"; "No")

Avec nettoyage côté B (recommandé)

  1. En B, créez Nettoyage_B en C1 : =TRIM(SUBSTITUTE(A1,CHAR(160)," ")), puis recopiez.
  2. En B1 (colonne résultat Yes/No), utilisez :
    =IF(COUNTIF('Worksheet A'!$A:$A, C1)>0, "Yes", "No")

Version avec MATCH / EQUIV

=IF(ISNUMBER(MATCH(A1,'Worksheet A'!$A:$A,0)),"Yes","No")
=SI(ESTNUM(EQUIV(A1;'Worksheet A'!$A:$A;0));"Yes";"No")

Version case‑sensitive (EXACT)

=IF(SUMPRODUCT(--EXACT(A1,'Worksheet A'!$A:$A))>0,"Yes","No")
=SI(SOMMEPROD(--EXACT(A1;'Worksheet A'!$A:$A))>0;"Yes";"No")

Plage dynamique sans toute-colonne (Microsoft 365)

=LET(src,'Worksheet A'!$A:$A, last, MAX(IF(src<>"",ROW(src))), rng, INDEX(src,1):INDEX(src,last), IF(COUNTIF(rng,A1)>0,"Yes","No"))

Remarque : dans Excel FR, remplacez les virgules par des points‑virgules et ROW par LIGNE.

Tables Excel (références structurées)

Si vos données sont en TableA[ColonneA] et TableB[ColonneA] :

=IF(COUNTIF(TableA[ColonneA], [@ColonneA])>0, "Yes", "No")
=SI(NB.SI(TableA[ColonneA]; [@ColonneA])>0; "Yes"; "No")

Extraire uniquement les présents/absents (analyse rapide)

Microsoft 365 :

Liste des valeurs de B présentes dans A :

=FILTER(B!A:A, COUNTIF(A!A:A, B!A:A)>0)

Liste des valeurs de B absentes de A :

=FILTER(B!A:A, COUNTIF(A!A:A, B!A:A)=0)

FR : FILTRE au lieu de FILTER et séparateurs ;.

Mise en forme conditionnelle pour un contrôle visuel

  1. Sélectionnez Feuille B!A:A.
  2. Accueil → Mise en forme conditionnelleRègles de mise en surbrillance des cellulesValeurs en double.
  3. Dans la boîte, remplacez la plage de comparaison par 'Worksheet A'!$A:$A via “Utiliser une formule pour déterminer…”, et utilisez :
    =COUNTIF('Worksheet A'!$A:$A, A1)>0

Avec Power Query : méthode robuste pour grandes listes

  1. Placez votre curseur dans la liste de Feuille ADonnéesÀ partir d’un tableau/plage → créez TableA.
  2. Répétez pour Feuille B → créez TableB.
  3. Dans l’éditeur Power Query : AccueilFusionner des requêtes.
  4. Source : TableB (colonne A), Table à fusionner : TableA (colonne A).
  5. Type de jointure :
    • Gauche externe (Left Outer) pour marquer les présents : une correspondance non nulle = “Yes”.
    • Gauche anti (Left Anti) pour lister uniquement les absents.
  6. Développez la colonne issue de la fusion (icône “↔”). Ajoutez une colonne personnalisée :
    = if [TableA.ColonneA] = null then "No" else "Yes"
  7. Fermez & chargez. Le rafraîchissement (Ctrl+Alt+F5) mettra à jour le Yes/No.

Exemple concret

Supposons :

Feuille A — Colonne AFeuille B — Colonne AAttendu en B (Yes/No)
AlphaAlphaYes
BetabetaYes (si nettoyage UPPER)
GammaGamma No (si trailing NBSP, sauf nettoyage)
00123123Yes (après harmonisation)
DeltaEpsilonNo

Optimiser les performances et la fiabilité

  • Limiter la plage : préférez $A$1:$A$6000 à $A:$A sur de grands classeurs.
  • Tables Excel : elles s’étendent automatiquement et rendent la formule autoportée (TableA[ColonneA]).
  • Plages dynamiques : INDEX pour borner jusqu’à la dernière ligne non vide sans volatilité (voir formule LET plus haut).
  • Éviter les fonctions volatiles (INDIRECT, OFFSET) si vous pouvez employer INDEX.
  • Nettoyer en amont avec Power Query quand les fichiers sources varient (CSV, exports ERP).
  • Types cohérents : soit tout en texte, soit tout en nombres.
  • Documenter : commentez la cellule B1 (clic droit → Insérer un commentaire) pour expliquer la logique aux collègues.

Variantes utiles

Afficher “Found/Missing” en anglais :

=IF(COUNTIF('Worksheet A'!$A:$A, A1), "Found", "Missing")

Compter le nombre d’occurrences exactes (au lieu de Yes/No) :

=COUNTIF('Worksheet A'!$A:$A, A1)

Signaler les doublons côté A :

=IF(COUNTIF('Worksheet A'!$A:$A, A1)>1, "Duplicate in A", "Unique in A")

Comparer deux colonnes sur plusieurs critères (ex. Colonne A + Colonne B doivent coïncider) :

=IF(COUNTIFS('Worksheet A'!$A:$A, A1, 'Worksheet A'!$B:$B, B1)>0, "Yes", "No")

Procédure pas à pas fiable pour votre cas

  1. Nettoyez les deux listes (au moins TRIM + remplacement du NBSP, voir recettes).
  2. Uniformisez les types : si vous avez des codes numériques avec zéros à gauche, choisissez “tout texte” (format personnalisé 00000) ou “tout nombre”.
  3. Transformez vos listes en Tables (Ctrl + T) et renommez-les TableA et TableB.
  4. En TableB, ajoutez la colonne calculée :
    =IF(COUNTIF(TableA[ColonneA], [@ColonneA])>0, "Yes", "No")
  5. Vérifiez quelques lignes “bord” (début, milieu, fin) pour confirmer l’absence d’artefacts.

Questions fréquentes

La formule est‑elle sensible à la casse ? Non, COUNTIF/NB.SI et MATCH/EQUIV ne font pas la différence entre “ABC” et “abc”. Utilisez la variante EXACT si nécessaire.

Puis‑je comparer des feuilles dans des classeurs différents ? Oui, en préfixant la référence avec le nom du fichier entre crochets : ='[ClasseurA.xlsx]Feuille A'!$A:$A.

Pourquoi des valeurs visiblement identiques restent “No” ? Les espaces insécables, caractères invisibles (tab, retour chariot), apostrophes “courbes” et mélanges nombre/texte sont les causes les plus fréquentes ; appliquez la section Nettoyer les données.

Faut‑il éviter la référence à toute la colonne ? Sur quelques milliers de lignes, c’est acceptable ; au‑delà (feuilles lourdes, formules nombreuses), préférez une plage bornée ou une Table.

Que faire si la liste de A s’agrandit chaque semaine ? Optez pour une Table (s’étend automatiquement) ou un flux Power Query rafraîchissable.

Résumé des meilleures pratiques

  • Références verrouillées ($) et noms de feuilles encadrés d’apostrophes.
  • Données nettoyées avant comparaison.
  • Tables Excel pour des plages auto‑extensibles.
  • Alternatives MATCH/XLOOKUP pour les gros volumes.
  • Power Query dès que le besoin devient récurrent ou volumineux.

Conclusion : pour marquer Yes/No selon la présence d’une valeur de Feuille B dans Feuille A, la solution la plus directe est COUNTIF/NB.SI. Si des “No” inexpliqués apparaissent au‑delà d’une ligne, vérifiez la plage, nettoyez les données (espaces, NBSP, types), et passez à des alternatives (MATCH, XLOOKUP, Power Query) lorsque le volume et la maintenance l’exigent.

Sommaire