[Résolu][Calc] Tri avec liste de tri (UserListIndex )

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 !

[Résolu][Calc] Tri avec liste de tri (UserListIndex )

Messagepar Phane » 17 Déc 2019 16:26

Bonjour

J'espère que mon titre sera suffisamment en adéquation avec ma recherche....

Pour trier une zone de cellules, j'ai crée via les outils/option/calc/Liste de tri une liste classée selon mes souhaits, et je parviens à trier mes données correctement en activant le descripteur IsUserListEnabled et en y associant le numéro du UserListIndex ( 5 en l'occurence)

Cette liste semble être embarquée non pas dans mon fichier mais plutôt restée dans mon LO ( et je la perdrais si je restaure mon profil ? )
Je voudrais donc pouvoir embarquée cette liste, soit directement dans mon bout de code ( via un array ? ), soit dans mon fichier ( une zone nommée ?), mais j'avoue que je sèche un peu ....et ma bible n'est pas très riche sur le sujet.

Merci d'avance pour vos pistes

Code : Tout sélectionner   AgrandirRéduire
Option explicit

'================================================================
'Tri la zone
'================================================================
Sub TrierZone
'----------------------------------------------------------------
Dim osheet As object, oZone As Object
Dim ConfigTri(2) as new com.sun.star.util.SortField
Dim DescrTri(6) as new com.sun.star.beans.PropertyValue
'----------------------------------------------------------
osheet =  ThisComponent.Sheets.getByName("feuille1")
oZone = osheet.getCellRangeByposition(0,0,2,19)
'----------------------------------------------------------------
      ConfigTri(0).Field = 2                           'magasin
      ConfigTri(0).SortAscending = True
      ConfigTri(1).Field = 1                            'Classe
      ConfigTri(1).SortAscending = TRUE
      ConfigTri(2).Field = 0                            'machine
      ConfigTri(2).SortAscending = TRUE
          
      DescrTri(0).Name = "SortFields"
      DescrTri(0).Value = ConfigTri()
       DescrTri(1).Name = "IsSortColumns"
      DescrTri(1).Value = False
       DescrTri(2).Name = "CopyOutputData"
      DescrTri(2).Value = false
       DescrTri(3).Name = "IsUserListEnabled"
      DescrTri(3).Value = true
       DescrTri(4).Name = "UserListIndex"
      DescrTri(4).Value = 5                           'Numéro d'ordre de la liste de tri crée
      DescrTri(5).Name = "BindFormatsToContent"
      DescrTri(5).Value = false
      DescrTri(6).Name = "ContainsHeader"
      DescrTri(6).Value = true     
          
      oZone.Sort(DescrTri())
       
End Sub
Pièces jointes
Test tri.ods
Test tri avec IsUserListEnabled / UserListIndex
(58.25 Kio) Téléchargé 82 fois
Dernière édition par micmac le 18 Déc 2019 10:43, édité 2 fois.
Raison: Ajout de la coche verte
@ home, Libre Office Version: 6.3.3.2 et Xubuntu 18.04.3 LTS/ W7
@ pro fixe, Libre Office 4.3.7.2 et W7 ( Obligation de version )
@ pro portable , Libre Office 5.2.6.2 et W10 ( Obligation de version )
Phane
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 99
Inscrit le : 09 Juin 2014 19:13
Localisation : Foret de brocéliande

Re: [Calc] Tri avec liste de tri (UserListIndex )

Messagepar Dude » 17 Déc 2019 19:08

Salut,

Tu vas devoir créer cette liste si tu veux t'en servir.
Le dialogue Outils > Options est accessible via le service ConfigurationProvider.
La variable à explorer est dans /org.openoffice.Office.Calc/SortList
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22529
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Tri avec liste de tri (UserListIndex )

Messagepar Phane » 18 Déc 2019 09:47

Merci Dude

Je clôture et je creuse ( pas longtemps à mon avis, je vais vite atteindre de la roche trop dure pour moi )
@ home, Libre Office Version: 6.3.3.2 et Xubuntu 18.04.3 LTS/ W7
@ pro fixe, Libre Office 4.3.7.2 et W7 ( Obligation de version )
@ pro portable , Libre Office 5.2.6.2 et W10 ( Obligation de version )
Phane
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 99
Inscrit le : 09 Juin 2014 19:13
Localisation : Foret de brocéliande

Re: [Résolu][Calc] Tri avec liste de tri (UserListIndex )

Messagepar Dude » 18 Déc 2019 17:25

As-tu fait un minimum de recherche avec les mots-clés fournis ?
Je viens de voir que la question est déjà passée : https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=48163
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22529
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Résolu][Calc] Tri avec liste de tri (UserListIndex )

Messagepar Phane » 18 Déc 2019 17:51

Ou j'avais cherché mais surement pas avec les bons mots clés
@ home, Libre Office Version: 6.3.3.2 et Xubuntu 18.04.3 LTS/ W7
@ pro fixe, Libre Office 4.3.7.2 et W7 ( Obligation de version )
@ pro portable , Libre Office 5.2.6.2 et W10 ( Obligation de version )
Phane
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 99
Inscrit le : 09 Juin 2014 19:13
Localisation : Foret de brocéliande

Re: [Résolu][Calc] Tri avec liste de tri (UserListIndex )

Messagepar Phane » 23 Déc 2019 19:31

Je déterre, je sais c'est mal, mais comme j'ai réussi à forcer la création de ma liste de tri , j'en fait profiter.
Rien de miraculeux, je me suis totalement inspiré du code de Piaf cité par Dude :
viewtopic.php?f=8&t=48163#p261720
en parcourant juste les données obtenues pour les comparer à ma liste de tri.
La fonction renvoie le rang de la liste de tri

Code : Tout sélectionner   AgrandirRéduire
'================================================================
'recherche le rang d'une liste de tri existante
'ou crée la liste passée en paramètre
'================================================================
Function CalcSortedList(newliste as string) as long
'-----------------------------------------------------------
Dim oParametre, aConfigProvider
Dim aParam(0) As new com.sun.star.beans.PropertyValue
Dim sProvider$, sAccess$
Dim oList() as String
Dim Change() as Variant
'-----------------------------------------------------------
   sProvider = "com.sun.star.configuration.ConfigurationProvider"
   sAccess = "com.sun.star.configuration.ConfigurationUpdateAccess"
   aConfigProvider = createUnoService(sProvider)
   aParam(0).Name = "nodepath"
   aParam(0).Value = "/org.openoffice.Office.Calc/SortList"
   oParametre = aConfigProvider.createInstanceWithArguments(sAccess, aParam())
   oList = oParametre.getbyname("List")
'recherche de la liste dans les listes existantes
      For i = 0 to Ubound(Olist)
         If olist(i) = Newliste then
        CalcSortedList = i
         exit Function
         End if
   Next
'création de la liste dans les listes existantes
   x = UBound(oList) + 1
   reDim Preserve oList(x)
   oList(x) = newliste
   reDim Change(x)
   For i = 0 To UBound(oList)
      Change(i) = oList(i)
   next i   
   oParametre.replaceByName("List",Change())
   oParametre.commitChanges
   CalcSortedList = i
End Function


Promis je ré-enterre ...
@ home, Libre Office Version: 6.3.3.2 et Xubuntu 18.04.3 LTS/ W7
@ pro fixe, Libre Office 4.3.7.2 et W7 ( Obligation de version )
@ pro portable , Libre Office 5.2.6.2 et W10 ( Obligation de version )
Phane
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 99
Inscrit le : 09 Juin 2014 19:13
Localisation : Foret de brocéliande


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Google [Bot] et 11 invité(s)