Fonctionnement de l'opérateur "!" d'intersection de matrices

Bonjour,

Je souhaite utiliser l’opérateur “!” afin de tester l’appartenance de la cellule actuelle à une plage stockée au format texte dans une autre cellule.
Admettons que Feuille1.A1="$Feuille2.$A$1:$A$100"
J’ai essayé Feuille2.A5=SI(CELLULE(“ADRESSE”)!INDIRECT($Feuille1.$A$1);…)
Mais j’ai une erreur 502.

Quelqu’un connaitrait-il la syntaxe à adopter ?
Merci

Cordialement,

gZen0n

EDIT : J’ai trouvé sur le forum ooffice la formule NON(ESTERREUR(LIGNES(cellule!plage))) mais je n’arrive pas à l’appliquer à mon cas… L’erreur est systématique, je crois que le problème vient de la référence à la plage.

Bonjour,

Première remarque : si dans ta cellule (dans ton exemple, Feuille2.A5) tu fais référence à ta propre cellule, tu aura une référence circulaire (erreur 522). Or si tu fais une intersection, c’est bien entre deux références : celle de la cellule et celle de la plage. Pour outrepasser cette référence circulaire il faut autoriser Calc à des itérations : Outils > Options > LibreOffice Calc > Calcul, cocher Itérations. À partir de là, tu peux faire ton test, en mettant, par exemple en A1 de Feuille2 : =SI(ESTREF(INDIRECT($Feuille1.$A$1)!INDIRECT(CELLULE("adresse")));"oui";"non") et en recopiant cette formule matricielle vers le bas. Rappel : validation de la formule par Ctrl+Maj+ Entrée, recopie de la formule par Ctrl+la croix de recopie.
Exemple ci-joint.Intersect.ods

Cordialement,

Merci de cette réponse, cela dit, pourquoi définir la formule en tant que formule matricielle ? Cela fonctionne sans, et je ne comprends pas l’utilité de cette fonctionnalité.

J’avais pris au départ le cas général d’une intersection à plus d’une cellule, qui nécessite la validation matricielle. Ici effectivement, ça ne sert à rien, puisque l’intersection est soit d’1 cellule, soit de zéro (#REF!).
Cordialement,

D’accord, mais ma question est plus générale : A quoi sert cette fonction ? Quelle différence si l’on travaille avec des matrices de plus d’une cellule ?

Elle permet de trouver une plage commune de cellules en fonction de leur localisation. Par exemple =A1:C30!C22:E41retournera la plage C22:C30, ce qui ensuite te permet de travailler sur la matrice résultante uniquement. Par exemple, si tu as des expressions françaises, belges et suisses (en colonnes) portant sur le pain, le vin et le beurre (en ligne), en utilisant EQUIV(), en construisant tes références avec, puis avec INDIRECT() et !, tu isoles assez vite les expressions portant, par exemple sur le beurre suisse ! Mais bon, les fonctions DECALER(), INDEX() de base de données permettent aussi de faire plein de choses dans ce domaine…

Désolé pour cette réponse tardive.Je me suis mal exprimé. Je voulais dire : à quoi sert la fonctionnalité de formule matricielle (Ctrl+Maj+Entrée) ? Pourquoi l’utiliser ?

Bonjour

Autre solution qui ne nécessite pas l’activation des itérations… mais qui est aussi beaucoup plus complexe…

=SINA(EQUIV(ADRESSE(LIGNE();COLONNE();1;;STXT(CELLULE("FILENAME");CHERCHE("$";CELLULE("FILENAME");1)+1;256));$Feuille1.$A$3&"."&ADRESSE(LIGNE(INDIRECT($Feuille1.$A$4));1);0);"non")

Voir Intersection.ods

Cordialement

Merci ! L’activation des itérations peut poser problème ?

Oui, tu ne seras plus en mesure, pour ce classeur, de repérer des erreurs de référence circulaire…