Décortiquer une formule imbriquée......

Le
Albert
Bonjour/Bonsoir

J'essaie de raisonner la structure d'une formule composée de fonctions
imbriquées. Prises individuellement ça va, mais je n'arrive pas à raisonner
l'ensemble.
La formule fonctionne très bien, il s'agit de former des groupes (table) de
huit individus, groupe 1, 2, 3,.20, en partant d'un tableau de
possiblement 160 individus.
La formule est :
=SI(LIGNES($1:1)<=NB.SI(table;$AC$1);INDEX(nom;PETITE.VALEUR(SI(table=$AC$1;LIGNE(INDIRECT("1:"&LIGNES(nom))));LIGNES($1:1)));"")

Quel est le raisonnement lors de la création d'une telle formule ?
Quelle est la formule de départ ?

Merci de m'aider à comprendre.

--
albertri-at-videotron.ca.invalid
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #24059541
bonjour Albert,

à tous hasard est que la formule suivant est plus parlante pour toi ?

=INDIRECT(ADRESSE(MIN(SI(table¬1;LIGNE(nom)));COLONNE(nom)))

matricielle (ctrl+maj+enter)

--
isabelle



Le 2011-12-11 19:20, Albert a écrit :
Bonjour/Bonsoir

J'essaie de raisonner la structure d'une formule composée de fonctions imbriquées.



Prises individuellement ça va, mais je n'arrive pas à raisonner l'ensemble.
La formule fonctionne très bien, il s'agit de former des groupes (table) de huit individus,



groupe 1, 2, 3,....20, en partant d'un tableau de possiblement 160 individus.
La formule est :
=SI(LIGNES($1:1)<=NB.SI(table;$AC$1);INDEX(nom;PETITE.VALEUR(SI(table=$AC$1;LIGNE(INDIRECT("1:"&LIGNES(nom))));LIGNES($1:1)));"")

Quel est le raisonnement lors de la création d'une telle formule ?
Quelle est la formule de départ ?

Merci de m'aider à comprendre.

Albert
Le #24059571
Bonsoir Isabelle

Ci joint le fichier, tous les noms sont fictifs
http://cjoint.com/?ALmet6iBysK

"isabelle" news:jc3orb$geu$
à tous hasard est que la formule suivant est plus parlante pour toi ?

=INDIRECT(ADRESSE(MIN(SI(table¬1;LIGNE(nom)));COLONNE(nom)))
matricielle (ctrl+maj+enter)
isabelle


La formule mentionnée ne fonctionne pas, mais est certainement plus courte
rend #VALEUR!.
J'ai de la difficulté à décortiquer la portion
"(SI(table=$AC$1;LIGNE(INDIRECT("1:"&LIGNES(nom)))"
Je comprend chaque fonction individuellement mais cet ensemble est abstrait.

Merci
--
albertri-at-videotron.ca.invalid
isabelle
Le #24059651
=SI(LIGNES($1:1)<=NB.SI(table;$T$1);INDEX(nom;PETITE.VALEUR(SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom))));LIGNES($1:1)));"")

la partie:

INDEX(nom;PETITE.VALEUR(SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom))));LIGNES($1:1)))

ou

INDEX(nom;la formule qui retourne le bon numéro de ligne)

la formule étant:

PETITE.VALEUR(SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom))));LIGNES($1:1))

les arguments de la fonction PETITE.VALEUR(matrice;k)

la matrice:

SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom))))

k:
LIGNES($1:1)

pour comprendre la matrice,

table=$T$1

est une matrice des valeurs de la plage "table", de FAUX et VRAI (0 1) selon si la valeur est égal à T1

pour l'exemple de la formule en K2 on obtient pour les 15 premières valeurs

001000000001000

pour k le rang de la donnée à renvoyer

LIGNES($1:1)

pourrait être remplacer par le chiffre 1
si on regarde la formule de la cellule K4
SI(LIGNES($1:3)<=NB.SI(table;$T$1);INDEX(nom;PETITE.VALEUR(SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom))));LIGNES($1:3)));"")
on peut remplacer LIGNES($1:3) par 3


voilà, j'espère que ces explications te seront utiles.


--
isabelle
isabelle
Le #24059741
j'avais oublié de décrire cette partie,

SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom))))

pour l'exemple de la formule en K2 on obtient pour les 15 premières valeurs de
table=$T$1

0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 ....

et
INDIRECT("1:"&LIGNES(nom))

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ....

les valeurs retournées sont

4 13 ...

on pourrait aussi écrire cette partie de formule
SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(table))))
étant données que les plages table et nom ont le même nombre de ligne

la formule INDEX(nom;la formule qui retourne le bon numéro de ligne)
détermine la valeur de la plage "nom" qui sera retournée

--
isabelle
isabelle
Le #24059751
correction,

les valeurs retournées sont
3 12 ...

pour t'en convaincre,
sélectionne la plage U1:U8
copie la formule suivante sur la barre de formule
=PETITE.VALEUR(SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom))));LIGNE())
et valide avec crtl+maj+enter
le résultat sera les numéros de lignes pour la Table No 1

--
isabelle
isabelle
Le #24059851
désolé si je me suis emmêlé entre le no. des lignes de la feuille de calcul et ceux des plages nommées,
il est temps pour moi d'aller en position horizontal.

a+
--
isabelle
isabelle
Le #24061461
j'ai refait le calcul d'une façon différente sur un deuxième onglet
pour mieux visualiser la matrice.

http://cjoint.com/?ALmqZCsHwNc



--
isabelle
Albert
Le #24061771
Bonjour Isabelle
Il faut profiter du beau soleil aujourd'hui.
"isabelle" news:jc46u8$geu$

Notez que le fichier peut être trié différemment, trois boutons de macros
en position O43:O50 permettent 3 tris, par Table, Par_nom et par No_de la
colonne C. Donc les valeurs peuvent changer selon le tri.

pour t'en convaincre, sélectionne la plage U1:U8
copie la formule suivante sur la barre de formule
=PETITE.VALEUR(SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom))));LIGNE())
et valide avec crtl+maj+enter
le résultat sera les numéros de lignes pour la Table No 1


Cela fonctionne parfaitement pour la Table 1 $T$1. Un tri par table donne
dans U1:U8, 1,2,3,4,5,6,7,8, et un tri par Nom donne 3,12,22,59,72,73,74,80,
alors que le tri par le No de la colonne C donne 7,9,11,19,20,21,22,61

Mais si je sélectionne la plage U11:U18 et choisi la (table2) $T$2 le
résultat est #NOMBRES!, et pareillement U21:28 pour $T$3.
Mais ca fonctionne bien si je sélectionne U1:U8, V1:V8 ainsi que W1:W8. Il
faut que la plage sélectionnée soit sur les lignes 1 à 8
Quel autre paramètre doit etre modifié pour pouvoir placer la plage ailleurs
sur la feuille ?

Les formules =SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(nom)))) et
=SI(table=$T$1;LIGNE(INDIRECT("1:"&LIGNES(table)))) fonctionne bien partout
sur la feuille, et MERCI cette partie est assez bien comprise, il me reste
à la digérer complètement.

Un gros merci

--
albertri-at-videotron.ca.invalid
Albert
Le #24063241
Bonsoir / Bonjour Isabelle
"isabelle" news:jc58bi$ov3$

j'ai refait le calcul d'une façon différente sur un deuxième onglet
pour mieux visualiser la matrice.
http://cjoint.com/?ALmqZCsHwNc



Je vous remercie pour cette présentation additionnellle, il va me falloir
absorber dans ma tête que la valeur recherchée est dans la matrice et pas
nécessairement apparente.

Mais pourquoi l'affichage se limite aux premières lignes au haut de la page
?

Bonne nuit et bonne journée


--
albertri-at-videotron.ca.invalid
isabelle
Le #24064651
bonjour Albert,

le résultat est défini par k de la fonction PETITE.VALEUR(matrice;k)
sur le 2ème onglet les formules sont mit en K2:K20
et j'ai utilisé Ligne()-1 pour l'argument k
donc en cellule K2, k = 1
en cellule K3, k = 2 etc..


si les résultats devaient être mis en cellule K5: K14
l'argument k devrait être ligne()-4 pour obtenir la première petite valeur de la matrice


--
isabelle



Le 2011-12-12 22:25, Albert a écrit :
Bonsoir / Bonjour Isabelle
"isabelle"

j'ai refait le calcul d'une façon différente sur un deuxième onglet
pour mieux visualiser la matrice.
http://cjoint.com/?ALmqZCsHwNc



Je vous remercie pour cette présentation additionnellle, il va me falloir absorber dans ma tête



que la valeur recherchée est dans la matrice et pas nécessairement apparente.

Mais pourquoi l'affichage se limite aux premières lignes au haut de la page ?

Bonne nuit et bonne journée


Publicité
Poster une réponse
Anonyme