Utilisation itérative de la fonction INDEX()

Bonsoir à tous,

je tente de faire un filtre assez simple qui servirait à reporter le contenu
d'une cellule selon une condition à respecter d'une cellule voisine, en
fait, une liste en vrac que je veux ordonner. Si la cellule ne respecte pas
la condition, je veux que le filtre n'inscrive rien, ne saute pas de ligne,
et examine la paire de cellules suivante, jusqu'à la fin des paires de
cellules. Comme je ne suis pas vraiment familier avec la fonction d'index,
je ne sais pas trop comment faire.

Ci-joint un document très simplifié avec des données réelles, et ma
tentative. Dans les colonnes de droite sont ce que je voudrais obtenir.

index1.ods <http://nabble.documentfoundation.org/file/n4070371/index1.ods>

Bonjour cubytus,

Ce serait bien si tu complétais ton abonnement à la liste de discussion
afin de pouvoir poster sans que tes messages arrivent en modération.
Voir : http://fr.libreoffice.org/assistance/
Il faut penser à répondre à la demande de confirmation d'abonnement.

Bonne journée
JBF

Bonjour,

Je te suggère plutôt d'utiliser ce genre de formule, pour le choix conditionnel de C et R par exemple : =SI(A2="C";B2;SI(A2="R";B2;"")), à recopier autant de fois que nécessaire dans les cellules du dessous.

Michel

Bonjour à Jean-Baptiste et Michel,

l'abonnement devrait être confirmé maintenant, et je viens de tester la formule, qui effectivement filtre bien les éléments selon le type (encore qu'on pourrait faire avec un ET() aussi), mais justement... La formule laisse un espace blanc quand le type ne correspond pas. Je voudrais obtenir une liste sans espace blanc.

cubytus

Bonsoir,
Si tu acceptes une macro enregistrée, c'est tout à fait possible.

La macro, affectée à un bouton, recopie ton tableau et, par coller spécial (collage de seulement les textes et nombres), à un autre emplacement. Sur ce nouveau tableau on trie, colonne par colonne, en ordre croissant et les valeurs se retrouvent en début de colonne. En effet, on ne peut trier sur des formules mais seulement sur des nombres et/ou des textes.

Je n'ai pas le temps ce soir ni demain mais si tu patientes jusqu'à lundi je t'adresserais un exemple (à partir du tien).

Il est possible qu'une autre manière existe, plus directe, mais ce n'est pas dans mes compétences.

Michel

Mettons, mais dans tous les cas, 100 devrait être prioritaire sur 1000. D'ailleurs ça disparaît lorsque je met un espace entre le nombre et la lettre. Étrange.

Pour le nombre de valeurs, je me fie au dialoue que LibOo affiche quand on veut supprimer du contenu. Si je sélectionne "texte" seulement, le texte seul disparaît, pas la formule. Je m'attends que NB() compte aussi seulement le contenu, pas la formule, et le but était de vérifier que le tri par macro n'a pas "mangé" une valeur par accident, comme on n'est jamais à l'abri d'une erreur de codage. Une cellule contenant exactement "", donc ni de chaîne, ni de nombre, pour moi n'a pas de valeur.

Mettons, mais dans tous les cas, 100 devrait être prioritaire sur 1000. D'ailleurs ça disparaît lorsque je met un espace entre le nombre et la lettre. Étrange.

Non ! pas étrange. Le code d'espace est 032 et c'est le premier dans la liste des codes.
100 est prioritaire à 1000 quant il s'agit de nombres, pas de texte ! Si tu as 100K et 1000µ à trier ce sera 1000µ qui sera prioritaire (sauf si tu provoques un tri en ordre inverse, mais ça ne sera pas forcément une bonne idée dans une liste comme les tiennes).

Michel

"" n'est pas un espace, c'est du rien! Il y a un code pour le rien, qui va avant l'espace? Puisque ça ne suit pas la logique humaine, comment fait-on pour compter les cellules qui contiennent autre chose que du rien?

Là, je ne te suis pas bien. On fait comme tu as maintenant dû le faire pour ton tableau G15:H23, non ?

Michel

Bonsoir Galahad,

"" n'est pas un espace, c'est du rien! Il y a un code pour le rien, qui va avant l'espace? Puisque ça ne suit pas la logique humaine, comment fait-on pour compter les cellules qui contiennent autre chose que du rien?

Je n'ai pas suivi votre fil et je raccroche juste les wagons, mais ta remarque m'a fait sourire, le "rien" en informatique n'existe pas, si ce n'est pas un espace alors c'est un autre type de caractère qui est forcément codé.

À bientôt
Sophie

Le classement se fait bien, oui, mais je voudrais maintenant compter les valeurs visibles, pas les cellules qui contiennent une formule qui ne retourne pas de valeur.

Ça pourrait aussi s'appliquer au résultat de la fonction ESTVIDE(). S'il n'y a rien d'affiché, ça devrait retourner VRAI.

"Rien c'est rien, mais trois fois rien, c'est pas rien" (Raymond Devos).
Pour être plus sérieux, il n'est pas impossible, comme on te l'as dit, d'avoir un ou des espaces avant, et éventuellement après les textes à trier.
Il n'est pas inutile d'utiliser les fonctions :
SUPPRESPACE() qui élimine les espaces avant et après le texte
mais aussi EPURAGE() qui vire les codes de contrôles indésirables.
Reste le problème de l'éventuel espace insécable...

Bon surf,
Christian

La valeur NULL existe bien pourtant dans tous les langages de programmation.

Enfin, même en utilisant ces deux fonctions, la fonction NBVAL() compte toujours les cases vides de valeur, mais contenant une formule, comme cases remplies.

Pinaillons un peu, cette fonction ne compte pas les valeurs, mais bien la présence d'une valeur OU d'une formule!

Ce qui ne résout pas cet agaçant problème.

Bonjour

Désolé de mon indisponibilité ces temps-ci...
Je n'ai pas suivi le fil mais juste sur ce point:

cubytus wrote

la fonction NBVAL() compte toujours les cases vides de valeur, mais
contenant une formule, comme cases remplies.

si j'ai bien compris le besoin (nbre de cellules affichant quelque chose,
que ce soit calculé ou non), il me semble qu'une fonction du type:

=SOMMEPROD(NBCAR(A1:A10)>0)

devrait donner le résultat attendu (je ne peux tester pour vérifier)
si la plage à compter est A1:A10

Cordialement
Pierre-Yves

En fait non, ça donne 1, ce qui n'est pas le nombre de cellules contenant quelque chose de visible.

Bonjour

cubytus wrote

En fait non, ça donne 1, ce qui n'est pas le nombre de cellules contenant
quelque chose de visible.

=SOMMEPROD(NBCAR(A1:A10)>0)

Surpris, je viens bien sûr de vérifier... Ceci fonctionnait dans OOo
mais plus dans LibreOffice car la gestion des cellules vides
retournées par la matrice A1:A10 est différente entre les deux
logiciels.

Dans OOo NBCAR(A1:A10) renvoie 0 pour les cellules vides.
Dans LibreOffice cela renvoie... 1

Dans les copies d'écran suivantes en A1:A10 la plage de données,
certaines calculées, d'autres non, d'autres vides.

En B la formule (ou N/D), en C le nombre de caractères cellule par
cellule, en D le nombre de caractères pour la matrice.

<http://nabble.documentfoundation.org/file/n4072943/NbCarMatriceOOo.png>
<http://nabble.documentfoundation.org/file/n4072943/NbCarMatriceLibO.png>

Il faut donc compléter la formule, par exemple:
=SOMMEPROD(NBCAR(A1:A10)>0;NON(ESTVIDE(A1:A10)))

NbCellAffichage.ods
<http://nabble.documentfoundation.org/file/n4072943/NbCellAffichage.ods>

Cordialement
Pierre-Yves

Bonjour Pierre-Yves et la liste,

effectivement la formule la plus compliquée avec SOMMEPROD donne le résultat correct, soit les cellules laissant afficher quelque chose, celles que j'appelle "non-vides".

Par contre, une fois reportés dans mon fichier original, NB() et NBVAL() ne donnent pas les mêmes résultats que dans le fichier exemple. Je ne vois pas ce qui cloche.

Bonjour

cubytus wrote

effectivement la formule la plus compliquée avec SOMMEPROD donne le
résultat correct, soit les cellules laissant afficher quelque chose,
celles que j'appelle "non-vides".

Ok :slight_smile:

cubytus wrote

Par contre, une fois reportés dans mon fichier original, NB() et NBVAL()
ne donnent pas les mêmes résultats que dans le fichier exemple. Je ne vois
pas ce qui cloche.

La première idée est que certains nombres (ou date) sont au format texte...

Cordialement
Pierre-Yves

Effectivement, quasiment tous les éléments visibles sont au format texte