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

Discussions à propos du tableur Calc.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est uniquement dédiée au tableur Calc. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
pifpaf
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 06 mai 2019 19:56

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

Message 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.
Pièces jointes
Fonction Index.ods
(11.14 Kio) Téléchargé 68 fois
Dernière modification par Oukcha le 08 juil. 2019 15:19, modifié 1 fois.
Raison : Balisage
OpenOffice 4.1.5
Win 7
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 15:31

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

Message 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

=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+
Pièces jointes
Fonction Index_Mod1.ods
(10.17 Kio) Téléchargé 62 fois
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5732
Inscription : 03 janv. 2009 00:56

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

Message 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

=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
Pièces jointes
pifpaf_20190515_JLC01.ods
(16.77 Kio) Téléchargé 65 fois
Dernière modification par Jean-Louis Cadeillan le 17 mai 2019 01:08, modifié 1 fois.
LibO 7.6.5.2 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
pifpaf
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 06 mai 2019 19:56

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

Message 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 :)
OpenOffice 4.1.5
Win 7
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message 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

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.
Pièces jointes
pifpaf.ods
v2, intégrant quelques détails sur les options de la fonction PYSORT
(13.31 Kio) Téléchargé 66 fois
Dernière modification par Hubert Lambert le 17 mai 2019 10:32, modifié 6 fois.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
pifpaf
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 06 mai 2019 19:56

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

Message 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:
OpenOffice 4.1.5
Win 7
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5732
Inscription : 03 janv. 2009 00:56

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

Message 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
Pièces jointes
pifpaf_20190515_JLC02.ods
(29.59 Kio) Téléchargé 63 fois
LibO 7.6.5.2 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
pifpaf
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 06 mai 2019 19:56

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

Message 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 bug 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 !!!!
OpenOffice 4.1.5
Win 7
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

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

Message 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 ?
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 5732
Inscription : 03 janv. 2009 00:56

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

Message 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

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

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
Pièces jointes
pifpaf_20190515_JLC03.ods
(26.89 Kio) Téléchargé 63 fois
Dernière modification par Jean-Louis Cadeillan le 22 mai 2019 06:41, modifié 3 fois.
LibO 7.6.5.2 (x64 avec Java 1.8.0_401) et AOO 4.1.15 (avec Java x32 1.8.0_381), Windows 7 Édition Intégrale 64 SP1
pifpaf
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 06 mai 2019 19:56

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

Message 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 :(
OpenOffice 4.1.5
Win 7
pifpaf
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 06 mai 2019 19:56

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

Message 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 vous 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.

OpenOffice 4.1.5
Win 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25142
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

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

Message 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
pifpaf
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 06 mai 2019 19:56

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

Message 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 !!
OpenOffice 4.1.5
Win 7
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 3929
Inscription : 06 oct. 2008 10:03

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

Message 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.
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
Verrouillé