Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 matrice ou pas matrice

patricktoulon

XLDnaute Barbatruc
bonjour à tous
j'ai pris la/ les formule(s) d'un autre exercice (formule données pas @Lolote83 et @M12 ) pour adapter a celui ci
j'explique
j'ai un name me fournissant une matrice des noms de feuille du classeur

le name
nom : "mesfeuilles"
refTo: =TRANSPOSE(REMPLACER(LIRE.CLASSEUR(1);1;TROUVE("]";LIRE.CLASSEUR(1));""))

dans un tableau structuré nom : "Listfeuilles"
je met la formule en première ligne =SIERREUR(INDEX(mesfeuilles;LIGNE(A1));"")
j'obtiens ma liste de feuille du classeur

dans un autre tableau nom: "tablistfiltree"
je filtre(avec une formule Matricielle ) le tableau listfeuille par (commence par et termine par) les préfixes et suffixes sont en b2 et b3
=SIERREUR(INDEX($D$3:$D$29;PETITE.VALEUR(SI(GAUCHE($D$3:$D$29;NBCAR($B$2)) & DROITE($D$3:$D$29;NBCAR($B$3))=$B$2&$B$3;LIGNE($D$3:$D$29)-2);LIGNES($2:2)));"")
jusque la tout va bien j'ai ma liste filtrée

j'ai deux autres tableaux dans les quels avec la même formule et même raisonnement j'essaie de filtrer directement la matrice du name
mais ça ne marche pas

des idées ?
je joins un classeur démo
 

Pièces jointes

  • formule lister les feuille d'un classeur.xlsm
    18.7 KB · Affichages: 12
Solution
Bonjour @patricktoulon et à tous les autres,

Je ne me suis intéressé qu'à la formule en H2.
Suivant les versions (d'Excel pas de windows ), il faut valider la formule en matricielle ou non.

La formule :
VB:
=SIERREUR(INDEX(mesfeuilles;PETITE.VALEUR(SI(GAUCHE(mesfeuilles;NBCAR($B$2))&DROITE(mesfeuilles;NBCAR($B$3))=$B$2&$B$3;EQUIV(mesfeuilles;mesfeuilles;0));LIGNE()-LIGNE($H$2)));"")

Lolote83

XLDnaute Barbatruc
Bonjour à tous.
J'avoue ne pas avoir pris le temps de tout lire les informations données par tous les contributeurs mais voilà ce que j'en ressort.
D'après le fichier transmis au post#1, pour la colonne H, voici ma formule :
VB:
=SIERREUR(INDEX(ListeFeuilles[Liste des onglets ê];PETITE.VALEUR(SI(GAUCHE(ListeFeuilles[Liste des onglets ê];NBCAR($B$2)) & DROITE(ListeFeuilles[Liste des onglets ê];NBCAR($B$3))=$B$2&$B$3;LIGNE(ListeFeuilles[Liste des onglets ê])-2);LIGNES($1:1)));"")

Dans la formule de Patrick, j'ai déja remplacé "Mesfeuilles" par le contenu du tableau structuré "Liste des onglets" puis à à la fin, il y avait : LIGNES (au pluriel) puis LIGNE (au singulier) et c'est l'inverse



Voili voilà ma réflexion.
Du coup, je vais lire un peu les autres réponses
@+ Lolote83
 

patricktoulon

XLDnaute Barbatruc
bonsoir @Lolote83 ben justement je veux me passer du tableau structuré intermédiaire
c'est pour ca que je pose la question
mesfeuilles (le name) c'est quoi une matrice ou pas
car la formule qui fonctionne sur le tableau structuré ne fonctionne pas en H avec mefeuilles comme matrice
si equiv(mesfeuille;mesfeuilles;0) c'est ce que je crois j'ai la reponse a ma question
a savoir une re matricialisation a deux dim

mais je suppute
je pense que @mapomme va intervenir et confirmer ou infirmer cela
 

patricktoulon

XLDnaute Barbatruc
re
bon ben c'est clair que ça match bien

en "D" "Liste des Onglets"=SIERREUR(INDEX(mesfeuilles;LIGNE(A1));"")

en"F" c'est l'ancienne formule de @Lolote83 qu'elle m'a donné dans un autre sujet et que j'ai adapter ici
et qui filtre le tableau en" D"

=SIERREUR(INDEX($D$3:$D$29;PETITE.VALEUR(SI(GAUCHE($D$3:$D$29;NBCAR($B$2)) & DROITE($D$3:$D$29;NBCAR($B$3))=$B$2&$B$3;LIGNE($D$3:$D$29)-2);LIGNES($2:2)));"")

en "H" la formule de @mapomme qui filtre directement la matrice mesfeuilles

=SIERREUR(INDEX(mesfeuilles;PETITE.VALEUR(SI(GAUCHE(mesfeuilles;NBCAR($B$2))&DROITE(mesfeuilles;NBCAR($B$3))=$B$2&$B$3;EQUIV(mesfeuilles;mesfeuilles;0));LIGNE()-LIGNE($H$2)));"")
 

mapomme

XLDnaute Barbatruc
Supporter XLD
je pense que @mapomme va intervenir et confirmer ou infirmer cela
Je confirme (sauf que ne vois qu'une seule dimension )

On ne peut pas utiliser LIGNES(mesfeuilles) car mesfeuilles est une matrice mais pas un range ; donc LIGNE(mesfeuilles) n'a pas de signifiaction => ça ne donne rien.

Pour retrouver un ordre dans mesfeuilles, la fonction EQUIV est là. Elle recherche un élément dans une matrice (pas forcément un range). Si cette élément est présent dans la matrice alors EQUIV renvoie la position de cet élément dans la matrice. C'est un "ersatz" pour remplacer LIGNE().

Dans ma formule, la fonction Ligne est présente uniquement pour l'index de la fonction PETITE.VALEUR. La formule n'utilise pas de plage au sens "range" comme dans la formule de @Lolote83 que je salue bien amicalement car on ne rencontre @Lolote83 que trop rarement au détour d'un fil.

C'est à l'occasion de ta question que j'ai découvert que EQUIV pouvait fonctionner avec des matrices issues d'autres choses que de plages de cellules .
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bon ben j'ai bien pigé alors
merci @mapomme

equiv je m'en sert déjà avec min stxt indirect sur des chaines de caractères

en gros j’analyse une chaine comme un tableau de caractères
démo faite dans un sujet récents en plus
https://excel-downloads.com/threads/formule-cellule-avec-chiffre-et-texte.20073933/#post-20565185

je me demande si je met la matricialisation dans le name si ça fonctionnerait encore
histoire de formuler comme une plage la formule ensuite je testerais demain
ps: nickel ton combin
 

Discussions similaires

Réponses
17
Affichages
815
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…