Tri dynamique de texte avec formule matricielle (formule presque au point)

4 réponses
Avatar
La Norme Française c'est pas le FN
Bonjour

Ci-dessous la pièce jointe pour l'exemple (durée de stockage illimitée).
http://www.cjoint.com/c/FJktAQZNex8

J'ai fais le plus gros, mais je bloque sur la formule matricielle pour qu'elle ne m'affiche pas les 0 dans un tri dynamique de texte.
Je peux l'utilise en l'état, mais c'est pas esthétique.

Dans cet exemple, le rang du tri texte est basé sur la formule :
=NB.SI($B$14:$B$24;"<="&B14)
Une colonne Rang affiche un nombre qui correspond à l'ordre de tri. Il peut y avoir plusieurs doublon.
Si pas de texte alors le rang est toujours 0

(Attention, police à chasse fixe)

N° idx Abrev Rang Nom Mer/océan
1 F_OD 6 La Réunion Indien
2 F_OD 6 Wallis Futuna Polynesie
3 F_OG 8 Guadeloupe Caraibe
4 F_OG 8 Martinique Caraibe
5 CUT 3 Cuba Caraibe
6 0
7 ZK 9 Cook Pacifique
8 A3 2 Tonga Pacifique
9 3B 1 Maurice Indien
10 0
11 DQ 4 Fidji Pacifique


Ce que je cherche à avoir :

N° Abrev Rang Nom Mer/océan
1 3B 1 Maurice Indien
2 A3 2 Tonga Pacifique
3 CUT 3 Cuba Caraibe
4 DQ 4 Fidji Pacifique
5 F_OD 6 La Réunion Indien
6 F_OD 6 Wallis Futuna Polynesie
7 F_OG 8 Guadeloupe Caraibe
8 F_OG 8 Martinique Caraibe
9 ZK 9 Cook Pacifique
10
11


La formule matricielle que j'utilise (que j'ai adapté depuis un exemple trouvé sur internet) :
=INDEX($B$14:$E$24;EQUIV(PETITE.VALEUR($C$14:$C$24+LIGNE()/100000;LIGNE()-13);$C$14:$C$24+LIGNE()/100000;0);{1.2.3.4})

A) A quoi sert ce /100000 dans la formule .
B) Comment se passer du -13 dans la formule pour ne plus avoir à corriger qu'en qu'à d'insertion de ligne entre A1 et A13 ?
C) Je souhaitre rempalcer $B$14:$E$24 par des noms de cellules non contigue et concaténé (ex : "Cell"&A1, "Cell"&A2, "Cell"&A3,...).
Je le fais déjà mais cela nécéssite d'utiliser la fonction INDIRECT. Est ce que ça pose un problème pour le rafraichissement en temps réel dans un cas comme le miens ?

Est-ce qu'il y a une matricielle mieux adapté à mon problème ? Avez vous un exemple déjà fonctionnel ?
Pour info, je cherche à garder la colonne rang (=NB.SI($B$14:$B$24;"<="&B14)) Ca évite d'avoir une matricielle à ralonge. Idem si abreviation est différent de "", on peut passer par une colonne bool
et l'utiliser dans la matrice

Les matricielles c'est simple quand on m'explique longtemps...

Merci pour votre aide.

Cordialement.
--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme

4 réponses

Avatar
isabelle
bonjour,
en cellule G14
=SIERREUR(INDEX($B$14:$B$24;EQUIV(PETITE.VALEUR($C$14:$C$24;NB.SI($C$14:$C$24;0)+LIGNE()-EQUIV("Nom";$D:$D;0));$C$14:$C$24;0));"")
à recopier ver le bas
isabelle
Le 2016-10-10 à 16:02, La Norme Française c'est pas le FN a écrit :
Bonjour
Ci-dessous la pièce jointe pour l'exemple (durée de stockage illimitée).
http://www.cjoint.com/c/FJktAQZNex8
J'ai fais le plus gros, mais je bloque sur la formule matricielle pour
qu'elle ne m'affiche pas les 0 dans un tri dynamique de texte. Je peux
l'utilise en l'état, mais c'est pas esthétique.
Dans cet exemple, le rang du tri texte est basé sur la formule :
=NB.SI($B$14:$B$24;"<="&B14) Une colonne Rang affiche un nombre qui
correspond à l'ordre de tri. Il peut y avoir plusieurs doublon. Si pas de
texte alors le rang est toujours 0
(Attention, police à chasse fixe)
N° idx Abrev Rang Nom Mer/océan 1 F_OD 6 La Réunion Indien 2 F_OD 6 Wallis
Futuna Polynesie 3 F_OG 8 Guadeloupe Caraibe 4 F_OG 8 Martinique Caraibe 5
CUT 3 Cuba Caraibe 6 0 7 ZK 9 Cook Pacifique 8 A3 2 Tonga Pacifique 9 3B
1 Maurice Indien 10 0 11 DQ 4 Fidji Pacifique
Ce que je cherche à avoir :
N° Abrev Rang Nom Mer/océan 1 3B 1 Maurice Indien 2 A3 2 Tonga Pacifique 3
CUT 3 Cuba Caraibe 4 DQ 4 Fidji Pacifique 5 F_OD 6 La Réunion Indien 6 F_OD
6 Wallis Futuna Polynesie 7 F_OG 8 Guadeloupe Caraibe 8 F_OG 8 Martinique
Caraibe 9 ZK 9 Cook Pacifique 10 11
La formule matricielle que j'utilise (que j'ai adapté depuis un exemple
trouvé sur internet) :
=INDEX($B$14:$E$24;EQUIV(PETITE.VALEUR($C$14:$C$24+LIGNE()/100000;LIGNE()-13);$C$14:$C$24+LIGNE()/100000;0);{1.2.3.4})
A) A quoi sert ce /100000 dans la formule . B) Comment se passer du -13 dans
la formule pour ne plus avoir à corriger qu'en qu'à d'insertion de ligne
entre A1 et A13 ? C) Je souhaitre rempalcer $B$14:$E$24 par des noms de
cellules non contigue et concaténé (ex : "Cell"&A1, "Cell"&A2,
"Cell"&A3,...). Je le fais déjà mais cela nécéssite d'utiliser la fonction
INDIRECT. Est ce que ça pose un problème pour le rafraichissement en temps
réel dans un cas comme le miens ?
Est-ce qu'il y a une matricielle mieux adapté à mon problème ? Avez vous un
exemple déjà fonctionnel ? Pour info, je cherche à garder la colonne rang
(=NB.SI($B$14:$B$24;"<="&B14)) Ca évite d'avoir une matricielle à ralonge.
Idem si abreviation est différent de "", on peut passer par une colonne bool
et l'utiliser dans la matrice
Les matricielles c'est simple quand on m'explique longtemps...
Merci pour votre aide.
Cordialement.
Avatar
La Norme Française c'est pas le FN
On Mon, 10 Oct 2016 22:00:41 -0400, isabelle wrote:
en cellule G14
=SIERREUR(INDEX($B$14:$B$24;EQUIV(PETITE.VALEUR($C$14:$C$24;NB.SI($C$14:$C$24;0)+LIGNE()-EQUIV("Nom";$D:$D;0));$C$14:$C$24;0));"")
à recopier ver le bas

Bonjour et merci.
Pour info, j'ai résolu mon problème en utilisant le SIERREUR de votre exemple même si votre exemple ne correspond pas exactement à ma demande mais c'est toujours utile.
Je prépare un classeur avec des exemples avec formule matricielle cellule par cellule, par ligne, ou multilignes
Certaines sont insensible au décalage de ligne du dessus.
--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
Avatar
isabelle
bonjour,
à la bonne heure!,
mais jette un oeil à cette partie (premier argument de EQUIV), qui pourrait
s'intégrer à ta formule matricielle
PETITE.VALEUR($C$14:$C$24;NB.SI($C$14:$C$24;0)+LIGNE()-EQUIV("Nom";$D:$D;0)
isabelle
Le 2016-10-11 à 15:20, La Norme Française c'est pas le FN a écrit :
Pour info, j'ai résolu mon problème en utilisant le SIERREUR de votre exemple
même si votre exemple ne correspond pas exactement à ma demande mais c'est
toujours utile.
Avatar
La Norme Française c'est pas le FN
On Tue, 11 Oct 2016 18:22:14 -0400, isabelle wrote:
bonjour,
à la bonne heure!,

http://www.cjoint.com/c/FJol2Dt80S8 (durée stockage illimitée)
J'ai eu du mal à trouver des exemples abordablent pour mon niveau. Donc, je me suis fais un mémo avec des exemples
C'est perfectible, mais j'espère que ça peut aider.
Ton exemple m'a inspiré dans une direction que je n'utilisais jamais.
En général je fais toujours en sorte de contrôler la saisie pour ne pas avoir des #erreur à gérer mais dans ce cas, j'ai provoqué ces erreurs pour utiliser SIERREUR()
--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme