Valeurs uniques entre deux colonnes

Bonjour,

J'utilise un fichier Excel qui permet de comparer deux colonnes afin d'y référencer les valeurs uniques propres à chacune :

Ce fichier compare les colonnes A et B, et en extrait les valeurs uniques ;
Ainsi, la colonne C référence les valeurs uniques à la colonne A, et idem en colonne D pour les valeurs uniques de la colonne B.

Cependant, la formule utilisée dans la colonne C (et D) renvoie une valeur "0" lorsque la colonne A (ou B) contient des cellules vides, et pas moyen de trouver comment le retirer.

D'ailleurs ce "0" est présent dans les deux colonnes C et D alors qu'il serait censé ne pas y être, n'étant pas une valeur unique à une seule colonne.

capture valeurs uniques

La formule utilisée en C2 pour renvoyer les valeurs uniques de la colonne A :

=UNIQUE(TRIER(FILTRE(INDIRECT(F2);NB.SI(INDIRECT(G2);INDIRECT(F2))=0);1;1))

F2 renvoie la plage de cellules contentant des valeurs en colonne A ; G2 fait de même pour la colonne B.

Si vous arrivez à trouver une solution pour retirer ces 0 qui m'embêtent, merci beaucoup !

Bonjour à tous !

Pour une aide adaptée de la communauté, merci de préciser, dans votre profil, la nature de votre Excel ( 2019 ? 2021 ? 365 ? ...)

Votre profil ne semble à jour...

Bonjour JFL,

Oups merci du retour, c'est intégré ! Excel 365 ici

Bonjour à tous de nouveau !

Je vous propose d'ajouter &"" à vos formules.

Pourquoi cette externalisation (F2 et G2) ?

Re,

Où ajouter &"" exactement ? Dans quelle formule et à quel endroit ? Je n'arrive pas à trouver.

D'autre part, j'ai utilisé les cellules F2 et G2 et la fonction INDIRECT qui renvoie vers ces cellules car si je mets tout dans une seule et même cellule fonction, le logiciel met beaucoup de temps à répondre à chaque modification de la feuille (de l'ordre de 1-2 secondes, ce qui est vraiment beaucoup)

Bonjour à tous,

Une proposition en C2 :

=UNIQUE(TRIER((FILTRE(A2:A15;(NB.SI(B2:B15;A2:A15)=0)*(A2:A15<>"")))))

et en D2 :

=UNIQUE(TRIER(FILTRE(B2:B15;(NB.SI(A2:A15;B2:B15)=0)*(B2:B15<>""))))

Bonjour à tous de nouveau !

En complément une version formule unique (et dynamique) pour les deux séries en C2 :

=LET(
    p; A2:B15;
    p_1; DANSCOL(PRENDRE(p; ; 1); 1);
    p_2; DANSCOL(PRENDRE(p; ; -1); 1);
    SIERREUR(
        ASSEMB.H(
            FILTRE(p_1; ESTNUM(BYROW(p_1; LAMBDA(x; EQUIVX(x; UNIQUE(DANSCOL(p; 1); ; 1); 0)))));
            FILTRE(p_2; ESTNUM(BYROW(p_2; LAMBDA(x; EQUIVX(x; UNIQUE(DANSCOL(p; 1); ; 1); 0)))))
        );
        ""
    )
)

Bonjour à tous,

Merci pour les formules, c'est exactement ce qu'il me fallait !

Les deux propositions sont similaires, je vais voir laquelle me convient le mieux pour mon fichier.

Encore merci et bonne journée !

Bonjour à tous !

Bien....

Je vous remercie de ce retour.

Re,

@JFL après test de ta formule complexe, elle ne renvoie rien si les cellules d'une des deux colonnes de la plage A2:B15 sont vides.

Peut-on la modifier facilement ? Ça n'a pas d'impact sur la comparaison de colonnes mais je compte l'utiliser notamment pour les fonctions UNIQUE et TRIER qu'elle contient, afin de ne pas devoir en rajouter.

Si ce n'est pas possible, ce n'est pas grave ! Il y a toujours un autre moyen et le but premier est satisfait

Bonjour à tous de nouveau !

Je ne comprends pas votre remarque.

Retourner des éléments uniques tirés d'une plage vide me semble délicat.....

Lorsque l'on utilise ta formule avec des valeurs dans les colonnes A et B, tout fonctionne :

image

En revanche lorsque l'une des deux colonnes est vide, la formule ne renvoie plus rien (elle doit détecter une erreur et le SIERREUR doit renvoyer du vide) :

image

J'aurais souhaité trouver un moyen de conserver les valeurs uniques de la colonne A même si la colonne B est vide.

Je vais continuer à bidouiller pour voir si une solution est possible, et si jamais ce n'est pas le cas, tant pis ! La formule fait déjà très bien le job

Bonjour à tous de nouveau !

Formule (simplifiée) tenant compte de cette contrainte nouvelle :

=LET(
    p; A2:B15;
    p_1; PRENDRE(p; ; 1);
    p_2; PRENDRE(p; ; -1);
    l_u; UNIQUE(DANSCOL(p; 1); 0; 1);
    SIERREUR(
        ASSEMB.H(
            FILTRE(p_1; ESTNUM(BYROW(p_1; LAMBDA(x; EQUIVX(x; l_u; 0)))); "");
            FILTRE(p_2; ESTNUM(BYROW(p_2; LAMBDA(x; EQUIVX(x; l_u; 0)))); "")
        );
        ""
    )
)

Merci beaucoup, ça répond parfaitement au besoin !

Bonjour à tous de nouveau !

Je vous remercie de ce retour.

Rechercher des sujets similaires à "valeurs uniques entre deux colonnes"