[Résolu][Calc] Tri des feuilles d'un classeur

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
daru72
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 06 oct. 2012 07:33

[Résolu][Calc] Tri des feuilles d'un classeur

Message par daru72 »

Bonjour,

Je cherche à tirer dans l'ordre croissant puis par ordre alphabétique les feuilles d'un classeurs composé de feuilles. Il s'agirait d'obtenir le tri suivant : 1_Feuille, 2_feuille, 3_Feuille,..., 27_feuille puis une fois que les chiffres sont épuisés : Alpha, Beta

J'ai trouvé un fil de discussion correspondant au classement alphabétique.

Toutefois comme évoqué dans le sujet, il y a un "bug" au niveau du classement par chiffre croissant, 27 se trouve avant 1
Ajout : Le mystère ressemble de plus en plus à un bogue
Vf = ("a10" > "a2") renvoie True: normal
Mais A = "a10": B = "a2" et Vf = (A > B) renvoie False
Y a t'il un moyen de contourner ce problème pour arriver à mes fins ?

Vous remerciant pour vos avis.
Dernière modification par daru72 le 30 mai 2018 07:01, modifié 1 fois.
LibreOffice Version: 5.2.3.3 sous Windows 7
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Tri des feuilles d'un classeur

Message par joel275 »

Bonjour,

dans le message que tu cites, Churay fournit une réponse: en quoi ne te convient-elle pas?

A plus.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Tri des feuilles d'un classeur

Message par Dude »

daru72 a écrit :puis une fois que les chiffres sont épuisés
Je ne savais pas que les chiffres pouvaient s'épuiser. :roll:
daru72
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 06 oct. 2012 07:33

Re: [Calc] Tri des feuilles d'un classeur

Message par daru72 »

joel275 a écrit :Bonjour,

dans le message que tu cites, Churay fournit une réponse: en quoi ne te convient-elle pas?

A plus.
Je viens de reessayer.
Pour moi çà ne fonctionne toujours pas. J'ai Feuille 1 puis Feuille 10, et après Feuille 2
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version: 5.2.3.3 sous Windows 7
Avatar de l’utilisateur
tintin
GourOOu
GourOOu
Messages : 9366
Inscription : 18 juil. 2008 15:29
Localisation : F-Oise + F-Savoie

Re: [Calc] Tri des feuilles d'un classeur

Message par tintin »

Bonjour,

Et si vous nommiez vos feuilles
feuille_01, feuille_02, feuille_03 etc ?
AOO 4.1.15 et LibO stable 7.6.6 / macOS Intel 13.6.6 Ventura
Adoptium-temurinJDK-jre_1.8.0_412 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Calc] Tri des feuilles d'un classeur

Message par joel275 »

Re,
tintin a écrit :Et si vous nommiez vos feuilles
feuille_01, feuille_02, feuille_03 etc ?
il me semble que c'est à peu près ce que fait Churay avec ces lignes:

Code : Tout sélectionner

   For i = 1 TO 250
      sName = Right("00000000" & Cstr(Int(Rnd*314159)), 8)
      oSheets.insertNewByName(sName, oSheets.Count)
   Next i
A plus.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Tri des feuilles d'un classeur

Message par Dude »

Pour trier correctement, il faut extraire le nombre du nom de la feuille :

Code : Tout sélectionner

Sub Trier
	GlobalScope.BasicLibraries.loadLibrary("Tools")
	Dim oSheets As Object, oSheet As Object, i As Integer
	Dim aName() As integer, sName As String, j As Integer
	
	oSheets = thisComponent.Sheets
	oSheet = ThisComponent.Sheets(0)
	ReDim aName(oSheets.Count-1,1)  As integer
	For i = 0 TO oSheets.Count-1
	   aName(i,0) = Mid(oSheets(i).Name,8)
	   aName(i,1) = i
	Next i
	BubbleSortList(aName) 
	oSheet.getCellByPosition(0,2).String = "Move"
	For i = 0 To oSheets.getCount()-1
	   oSheets.moveByName("Feuille" & aName(i,0),i)
	Next i	
End Sub
Et ne pas oublier de le rajouter dans la boucle du déplacement.
daru72
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 06 oct. 2012 07:33

Re: [Calc] Tri des feuilles d'un classeur

Message par daru72 »

Merci Dude

J'ai compris le principe.

Si toutefois mes feuilles ont des noms aléatoires, comment puis je retrouver la partie du nom de l'onglet sans le chiffre ?
L'idée serait dans mon exemple ci joint d'arriver à cet ordre.

4Feuille
5Feuille
7Feuille
11Feuille
Feuille5
Feuille6
ZFeuille7
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice Version: 5.2.3.3 sous Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Tri des feuilles d'un classeur

Message par Dude »

daru72 a écrit :L'idée serait dans mon exemple ci joint d'arriver à cet ordre.
Sachant qu'un tri se fait alphabétiquement ou numériquement, comment expliques-tu la logique de cette suite ?
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc] Tri des feuilles d'un classeur

Message par Hubert Lambert »

Bonjour,

Une version en python, inspirée de cette page :

Code : Tout sélectionner

import re
def natural_sort(event=None):
    doc = XSCRIPTCONTEXT.getDocument()
    feuilles = doc.Sheets
    noms = list(feuilles.ElementNames)
    convert = lambda text: int(text) if text.isdigit() else text.lower()
    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
    noms.sort(key=alphanum_key)
    doc.lockControllers()
    try:
        for pos, nom in enumerate(noms):
            feuilles.moveByName(nom, pos)
    finally:
        doc.unlockControllers()
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
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
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Calc] Tri des feuilles d'un classeur

Message par DLE »

Bonjour,

Un exemple en basic à valider.

Cdlt.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
daru72
NOOuvel adepte
NOOuvel adepte
Messages : 22
Inscription : 06 oct. 2012 07:33

Re: [Calc] Tri des feuilles d'un classeur

Message par daru72 »

Dude a écrit :
daru72 a écrit :L'idée serait dans mon exemple ci joint d'arriver à cet ordre.
Sachant qu'un tri se fait alphabétiquement ou numériquement, comment expliques-tu la logique de cette suite ?
Dude, pas vraiment de logique :o , juste un besoin. J'ai des feuilles plus orientées calcul qui commencent par des chiffres et d'autres de bilans qui commencent par des lettres.

Merci DLE. C'est tout bon.
LibreOffice Version: 5.2.3.3 sous Windows 7