Page 1 sur 1

[Résolu] incompatibilité fonction INDEX et tri alphabétique

MessagePublié: 15 Mai 2019 18:37
par pifpaf
Bonjour à tous,

Pour des raisons un peu longues à expliquer, j'ai besoin de trier par ordre alphabétique via « données => triées » des données issues de la fonction INDEX. Malheureusement, cela ne semble pas possible (mais assez logique) puisque les données sont « imposées » par la fonction alors que l'ordre alphabétique changerait le contenu de la cellule imposait par la fonction INDEX.
Existe-t-il une fonction pour convertir les données issues d'INDEX en « données brutes » alors triables …. (au besoin en passant par une colonne intermédiaire qui pourrait être masquée).
Je joins un exemple en pièce-jointe à ce post.
D'avance merci à tous.

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 15 Mai 2019 19:38
par OOotremer971
Bonjour,
pifpaf a écrit:Existe-t-il une fonction pour convertir les données issues d'INDEX en « données brutes » alors triables

Là comme ça, je ne vois pas trop à par un copier/collage spécial>>Texte seulement.

Mais si le contexte le permet, tu peux trier par ordre alphabétique par formule (matricielle) , maerci Jean-Louis Cadeillan :super: :
Code : Tout sélectionner   AgrandirRéduire
=INDEX(ville;EQUIV(MIN(SI(NB.SI($C$1:C1;ville)=0;SI(ville<>"";NB.SI(ville;"<"&ville);"")));SI(NB.SI($C$1:C1;ville)=0;SI(ville<>"";NB.SI(ville;"<"&ville);""));0))

Voir colonne C du fichier joint :
A+

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 15 Mai 2019 21:47
par Jean-Louis Cadeillan
Bonsoir,
Si tu n'as pas de doublons dans ta liste réelle (deux fois Lille, par exemple), tu peux utiliser cette variante :
Code : Tout sélectionner   AgrandirRéduire
=SI(LIGNE() > NBVAL(ville);"";INDEX(ville;EQUIV(PETITE.VALEUR(SI(ville<>"";NB.SI(ville;"<="&ville));LIGNE());NB.SI(ville;"<="&ville);0)))
Sinon, comme dit OOotremer971 (que je salue au passage !) le copier/collage spécial peut être une solution mais même si c'est une macro qui le déclenche, il faudra faire quand même le tri derrière... à moins d'incorporer le tri dans la macro, réussir à la déclencher sur la surveillance d'évènement du style « quand la liste est modifiée »... je ne sais pas si le jeu en vaut la chandelle !
Cordialement,
Jean-Louis

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 15 Mai 2019 23:17
par pifpaf
Bonsoir à vous deux,

En cette heure avancée de la nuit, mon message sera bref et me conduit à vous remercier pour les réponses apportées. Malheureusement le temps me manque pour tester dès ce soir vos propositions. En revanche, je vais avoir des doublons dans les listes, ce qui complique ...... car sinon j'avais trouvé une formule assez simple pour arriver à mon but. En plus (sinon ce ne serait pas drôle) je voulais ordonner le tri en croissant sur une première colonne et en deuxième critère une seconde ... d'où l'option assez simpliste du tri via données trier. Je voyais bien une macro faire ça (avec recourt éventuel au copier coller) avec un déclenchement auto à l'activation de l'onglet concerné. Le Pb du copier coller c'est la zone à définir mais bon ... la chose me semble assez compliqué. Je vais continuer à explorer le cas et je vous tiens au courant.

Une nouvelle fois, un grand merci aux contributeurs :)

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 16 Mai 2019 14:55
par Hubert Lambert
Bonjour,

On trouve, sur le forum anglophone, un petite perle qui pourrait t'être utile. Il s'agit d'une mini-extension qui ajoute une fonction matricielle PYSORT, qui renvoie triée (suivant les critères donnés) la plage passée en paramètre.
Pour l'utiliser :
- télécharger le fichier XPySort.zip et le renommer en XPySort.oxt (source : https://forum.openoffice.org/en/forum/v ... 90#p252090);
- double-cliquer sur le fichier XPySort.oxt et accepter l'installation de l'extension;
- redémarrer le programmer et utiliser la fonction. Pour rappel, s'agissant d'une fonction matricielle, il faudra valider par Ctrl+Maj+Entrée.

La signature de la fonction est la suivante :
Code : Tout sélectionner   AgrandirRéduire
PYSORT(inRange, Fields, HasHeaders, ByRows, CollationType)

- inRange = la plage à trier;
- Fields = les paramètres de tri : une matrice pour les colonnes à trier (index de départ à 0), une autre pour les options;
- HasHeaders = en-tête ou pas (défaut);
- ByRows = tri vertical (défaut) ou horizontal;
- CollationType = type de collation pour les chaînes de caractères.
Je reviendrai pour détailler dès que j'ai un peu plus de temps :wink: . (Cf. ajout ci-dessous)

Je joins un exemple très rapide pour illustrer la chose (qui ne marchera évidemment qu'une fois l'extension installée). Dans cet exemple, le tableau est trié en ordre croissant sur la 2e colonne ("1;"") puis décroissant sur la première ("0;"r", "r" pour "reverse", c'est-à-dire "décroissant").

 Ajout : J'ai modifié le fichier joint pour y intégrer quelques précisions sur les différentes options de la formule PYSORT.
Les options de tri sont définies dans un tableau séparé, ce qui permet de les tester plus aisément. 

Cordialement.

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 16 Mai 2019 21:47
par pifpaf
Bonsoir Hubert Lambert,

Merci beaucoup à toi pour ta réponse que je juge assez prometteuse !! :super: Je reviens sur le projet durant le week-end car pour le moment le temps me manque. Je pense que la solution que tu proposes à travers l'extension pourrait intéresser bon nombre de personnes car le sujet du tri alphabétique revient régulièrement mais souvent les solutions sont assez liées à du bricolage. Avec ce que tu proposes cela devrait être beaucoup simple et beaucoup plus fiable.

A suivre et encore merci à toi :bravo: :bravo: :bravo:

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 17 Mai 2019 00:43
par Jean-Louis Cadeillan
Bonsoir,
Ci-joint un autre bricolage qui fait le tri sur deux critères hiérarchisés.
pifpaf a écrit:je vais avoir des doublons dans les listes, ce qui complique
En fait, non ; la formule de mon message précédent ne permettait pas d'éliminer les doublons, or c'est justement ce que tu veux (ne pas éliminer les doublons), puisque tu veux trier sur un second critère.
Cordialement,
Jean-Louis

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 21 Mai 2019 18:16
par pifpaf
Bonjour à tous,

Un peu de retard pour revenir sur le sujet mais le temps me manque en ce moment !! Merci à vous tous pour vos contributions.
Hubert Lambert : je n'ai malheureusement pas réussi à installer l'extension ... un dossier avec plusieurs fichiers mais aucun ne se lance ni reconnu (probablement un bogue de ma part). La formule semble assez aisée à mettre en oeuvre mais je n'ai pas pu tester au regard de l'impossibilité d'installer l'extension.
Jean-Louis Cadeillan : Une nouvelle fois, un problème => une solution !!! lol Je crois que ton "bricolage" correspond parfaitement à ce que je cherche. Malheureusement, en testant pour ajouter une ligne supplémentaire (car les données sont amenées à évoluer) le nombre de lignes reste bloqué à 50 (mais le tri s'actualise bien) donc peut-être un bidouillage de plus et hop ..... :D En revanche, j'ai cherché à comprendre la (heu ... les) ligne de code .... bon ben je dois reprendre ça à tête reposée .....

Dans tous les cas, MERCI à vous !!!!

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 21 Mai 2019 19:22
par Hubert Lambert
pifpaf a écrit:je n'ai malheureusement pas réussi à installer l'extension ... un dossier avec plusieurs fichiers mais aucun ne se lance ni reconnu (probablement un bogue de ma part)

As-tu bien renommé le fichier XPySort.zip en XPySort.oxt, comme expliqué plus haut ?

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 21 Mai 2019 21:59
par Jean-Louis Cadeillan
Bonsoir,
pifpaf a écrit:le nombre de lignes reste bloqué à 50
C'est paramétrable : Insertion > Noms > Définir et change l'étendue des plages pour Code et ville.
Combin est juste une formule nommée qui vaut :
Code : Tout sélectionner   AgrandirRéduire
ville&"²"&Code
² est un caractère choisi pour sa rareté (dans le sens où il ne doit normalement pas être rencontré dans les données elles-mêmes) et qui permet à la fonction TROUVE() de repérer ce qui est avant (la ville) et ce qui est après (l'autre donnée).
Pour recopier une formule matricielle (celle des colonnes bleu-vert de Feuille2) vers le bas :
  • il suffit de positionner la souris dans le coin inférieur droit de la dernière cellule (par exemple C50) : le curseur se transforme en croix (+), puis, il faut cliquer/glisser vers le bastout en appuyant simultanément sur la touche Ctrl ;
  • une autre manière de faire est de copier la cellule initiale (Ctrl+C), puis de sélectionner la plage des cellules qui doivent contenir la même formule, puis de coller (Ctrl+V) .
Si la mise à jour ne se fait pas immédiatement après avoir étendu les plages et les formules, tu peux faire un recalcul forcé par Ctrl+Maj+F9. On pourrait encore faire un bidouillage dans la formule pour éviter cela, mais bon, on va éviter la goutte qui fait déborder le vase...
pifpaf a écrit:j'ai cherché à comprendre la (heu ... les) ligne de code
Je ne sais pas si tu as remarqué, mais toutes les formules comprennent la partie :
Code : Tout sélectionner   AgrandirRéduire
NB.SI(Combin;"<="&Combin)
C'est le cœur de la formule. Considère-la comme matricielle. « <= » compare une chaîne de cette matrice avec toutes les autres chaînes de la matrice ; NB.SI() retourne le nombre de fois où la comparaison est vraie, donc si la chaîne de caractères est en tête de classement alphabétique, NB.SI() retournera une grande valeur, si elle est en queue de classement, NB.SI() retournera une petite valeur. C'est sur ce nombre que va se faire le classement, grâce à la fonction PETITE.VALEUR(). Voilà quelques clés pour défricher la formule...
Ci-joint une version à 100 lignes, considère-là comme un corrigé de ce que tu dois obtenir à partir de celle à 50.
Cordialement,
Jean-Louis

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 21 Mai 2019 22:01
par pifpaf
Re bonsoir Hubert Lambert,

Pour répondre à ta question, je pense que fais ce qu'il faut mais .... peut-être fais-je une erreur. Je télécharge le dossier (un zip auto-extractible) qui contient plusieurs fichiers. Lorsque je le renomme, cela ne change rien il reste en .zip ... je fais via le clic droit renommer mais il se contente de rajouter .oxt sans changer d'icône ou autre ... L'erreur vient probablement de là mais je vois pas comment faire autrement :(

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 21 Mai 2019 22:12
par pifpaf
Bonsoir Jean-Louis

Ma réponse s'intercale avec celle faite à Hubert Lambert. Comme à ce dernier, je t'adresse un GRAND MERCI, pour tout le temps passé à aider ces illustres inconnus toujours à la recherche de solutions à leurs problèmes...... :fou: Une réponse très complète qui mérite un peu de temps pour comprendre cette formule dont tu me donnes les clefs. Je dois avouer que par manque de temps ce ne sera pas aujourd'hui ni demain, mais promis j'y reviens pour essayer de comprendre et avancer dans ma découverte des innombrables possibilités offertes par Calc ....

En attendant MERCI pour tout !!!! :bravo:

La modération a écrit:Merci de ne pas poster plusieurs messages à la suite.
Vous pouvez très bien répondre à plusieurs personnes dans le même message.
Et vous disposez d'un bouton Éditer en haut à droite de chaque message et d'un autre bouton ajout si vous désirez ajouter un complément lorsqu'il n'y a pas de réponse.

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 22 Mai 2019 07:59
par Dude
pifpaf a écrit:je fais via le clic droit renommer mais il se contente de rajouter .oxt sans changer d'icône ou autre ... L'erreur vient probablement de là mais je vois pas comment faire autrement

Forcément si les extensions de fichier sont masquées par Windows, ta procédure ne fonctionnera pas.
no_problemo.gif

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 22 Mai 2019 19:07
par pifpaf
Bonsoir à tous,

Dude tu m'as effectivement donné la solution pour l'extension .... merci à toi.
Hubert Lambert, je vais pouvoir tester la solution proposée à nouveau merci !!

Re: incompatibilité entre fonction INDEX et le tri alphabéti

MessagePublié: 08 Juil 2019 14:18
par Oukcha
Bonjour,

Plus de 30 jours plus tard, sans nouvelle de votre part, on peut en déduire que le problème est résolu ou ne se reproduit plus.

Merci de baliser par vous-même la prochaine fois.

Un remerciement fait aussi plaisir aux bénévoles qui vous ont consacré de leur temps.
La politesse fait également partie de la philosophie du logiciel libre.

En cas d'erreur, contactez l'équipe de modération pour la réouverture du fil.