Récupérer l'intersection de plusieurs plages de données

Bonjour à tous,

Je reviens une fois de plus vers vous pour puiser dans votre science.

J'ai un fichier dans lequel j'ai plusieurs séries de plages de données. J'aimerai récupérer l'intersection de ces plages de données. Après avoir fais quelques recherches, je suis tombé des pistes de solutions mais que je n'ai pas réussi à concrétiser.

J'aimerai si possible éviter d'utiliser le VBA, ces plages de données étant destinées à changer très souvent (à chaque changement sur ma feuille de calcul) et j'ai déjà une maccro assez lourde qui tourne ; j'aimerai limiter le temps de calcul au maximum.

Les colonnes sur lesquelles sont mes plages de données sont fixes. En revanche, leurs valeurs changement et les des fois les plages de données sont supprimées, et n'existent donc plus.

Vous trouverez ci-joint un petit fichier résumant mon problème : j'aimerai dans ce fichier exemple récupérer dans la colonne H (en rouge) l'intersection des plages 1 à (colonnes B, C, D, E) . La plage 4 n'existant pas cependant actuellement pas, j'aimerai qu'elle ne soit pas prise en compte dans l'intersection dans ce cas précis (ce qui me rendrait un résultat nul).

EDIT : Autre précision qui peut avoir son importance, mes plages ne sont pas triées.

Je ne sais pas si tout est clair, je l'espère en tout cas.

Par avance merci et j'espère que vous pourrez m'aider à résoudre ce problème.

Bonjour,

Déjà ! Il n'y a aucune intersection entre tes plages ! Ce qui clôt le débat !

Par ailleurs, si une plage manque, sa référence manque et dans une formule cela provoque naturellement une erreur !

Quand je parle d'intersection, je parle de valeurs, je veux donc récupérer ici les valeurs 1, 5 et 6.

Intersection a une signification bien définie dans Excel.

Intersection de valeurs, j'ignore absolument ce que cela peut vouloir dire ?

Désolé je vais double post, j'ai oublié de répondre à ta 2eme remarque : il est envisageable d'avoir une plage de secours qui elle restera fixe, et qui regroupera toutes les valeurs possibles pour palier au fait que ma plage est vide.

Puisque ne pas prendre en compte un ensemble ou faire l'intersection avec un ensemble comprenant tous les éléments donne le même résultat, cela devrai revenir au même.

J'ai rajouté la nouvelle plage au fichier ci-joint.


Cela signifie que je veux récupérer tous les chiffres qui sont présents dans chacune de mes plages.

Dans mon exemple ce sera donc le 1, 5 et 6.

Je pense que c'est quelque chose comme ça que tu recherches :

=SIERREUR(INDEX($B:$B;MIN(SI(NB.SI(plage2;plage1)*NB.SI(plage3;plage1);SI(NB.SI(H$3:H3;plage1)=0;LIGNE(plage1);9^9))));"")

La formule est à flanquer en H4, à valider en matricielle, et à tirer vers le bas : elle te renverra 1, 5, 6, puis plus rien.

Merci beaucoup, c'est un excellent cap que je n'arrivais pas à franchir, me reste à gérer maintenant la prise en compte des plages de données existantes ou non.

Me revoici, toujours avec mon problème de plages.

J'ai cependant avancé : j'ai décidé de vérifié a l'aide d'une maccro si mes plages existent ou non. En fonction de celles qui existent je modifie ma formule (celle qui à été données par Mferrant) dans une variable, avant de l'écrire dans la case souhaitée.

Cela marche, et la formule est bonne. Cependant, comme l'a précisé MFerrant dans sa réponse, il faut que ma formule soit validée en matriciel (avec les accolades). J'ai trouvé la fonction Range.FormulaArray qui semble fonctionner lorsque je la test avec des formules simples tels qu'un SUM. Je n'arrive cependant pas a la faire fonctionner avec ma variable formule.

Vous trouvez ci-joint le fichier dans son état actuel. J'ai 2 variables (formule et formuleTemp) dans lesquelles on trouve deux fois la même formule, une fois en français et une fois en anglais (pour mes tests).

Si je pouvais avoir un dernier coup de pousse sur ce problème je vous en serai reconnaissant, surtout que je touche au but !!

Par avance merci

Bonjour,

Tu n'as pas lu les spécifications de FormulaArray jusqu'au bout !

FormulaArray exige que la formule soit écrite en anglais et en style L1C1.

Ceci dit, pour ma part, travaillant en VBA, je supprimerais toute formule...

Cordialement.

Merci pour ta remarque, est ce que cela signifie que je fois utiliser un Cells(ligne, colonne) au lieu du range?

Pour être franc je n'ai jamais vraiment su me servir des formule L1C1, j'ai du mal à comprendre :/

C'est dans l'écriture de la formule :

exemple H c'est C8, 3 c'est R3, attention, ainsi c'est en références absolues.

On va prendre un exemple :H$3:H3, le premier 3 est en absolu, le 2e en relatif, H ne varie pas et peut donc être considéré en absolu.

On l'écrit en R1C1 : R3C8:RC8

R en relatif parce que 3 est la ligne courante où tu places la formule, sinon tu pourrais avoir : R[-1] pour désigner la ligne au-dessus ou R[+1] pour désigner celle en dessous, etc.

Et attention également : en anglais le séparateur est la virgule et non le point-virgule, tu dois remplacer tous tes point-virgules par des virgules.

Dac, merci pour tes explications je vais essayer de modifié mon code à partir de tes remarque et je reviendrai ensuite donner des nouvelles si j'ai réussi ou non

Dernière question : je dois aussi faire ça pour faire référence à mes plages ou les noms des plages font l'affaire?

Les noms de plage tu les utilises comme dans les formules établies manuellement.

Rechercher des sujets similaires à "recuperer intersection plages donnees"