Date: prev next · Thread: first prev next last
2018 Archives by date, by thread · List index


Bonsoir Philippe,

Le 06/11/2018 à 14:20, Philippe BLANCHARD a écrit :
Bonjour à tous,
Comme je n'ai pas trouvé la possibilité d'enregistrer une macro sous
LibreOffice (contrairement à Excel), je voulais savoir si un d'entre
vous avait déjà été confronté à un tri avec 2 critères ?
Merci par avance de votre retour.
Excellent après midi.

Amicalement,

Philippe


Par macro, on peut trier sur autant de critères qu'on veut.
Pour ça il faut deux outils : un descripteur des colonnes à trier (FieldDesc dans l'exemple) et un descripteur de tri (qui va recevoir le premier) (SortDesc dans l'exemple).

FieldDesc permet de donner le n° de la colonne de tri (.Field) et de spécifier le sens du tri (.IsAscending). Le sens du tri est ascendant par défaut, donc pas besoin a priori de mettre
FieldDesc(0).IsAscending = True
si ce n'est par souci de complétude.


L'exemple ci-dessous trie sur UNE seule colonne (col. G, position 6)

8< ----------------------------------------------------

Sub Trier()

Dim oDoc As Object
Dim oSheet As Object
Dim oRange As Object
Dim FieldDesc(0) As New com.sun.star.table.TableSortField
Dim SortDesc(2) As New com.sun.star.beans.PropertyValue

'récupérer la plage à trier
oDoc = ThisComponent
oSheet = oDoc.Sheets.getByName("Feuille1")
oRange = oSheet.getCellRangeByName("A4:G100") 
'on peut aussi mettre un nom défini par ailleurs (ex : "MaPlage")
'oRange = oSheet.getCellRangeByName("MaPlage")        

FieldDesc(0).Field = 6 ' colonne G (on compte à partir de 0)
FieldDesc(0).IsAscending = True

SortDesc(0).name="IsSortColumns"
SortDesc(0).value=False
SortDesc(1).name="SortFields"
SortDesc(1).value=oConfigTri()

oRange.sort(SortDesc())

End Sub

8< ----------------------------------------------------

pour trier sur DEUX colonnes (la colonne C en 2e critère, descendant), il faut déclarer un FieldDesc de plus

Dim FieldDesc(1) As New com.sun.star.table.TableSortField

et ajouter la description pour la 2e colonne, par ex :

FieldDesc(1).Field = 2 ' colonne C
FieldDesc(1).IsAscending = False

etc. pour trier sur plus de lignes.


PS : je vois que tu te plonges dans les macros. C'est un vaste monde qui s'ouvre à toi. Je ne saurais trop te conseiller de te documenter sur ce sujet.

Les sources que je connais/pratique :

-- la Bible (en français) de Marcelly et Godard
https://www.eyrolles.com/Informatique/Livre/programmation-openoffice-org-et-libreoffice-9782212132472
existe en papier et en numérique

-- l'autre Bible (en anglais) par Andrew Pitonyak
http://www.pitonyak.org/OOME_3_0.odt

et plein de forums ou de listes de diffusion ;-)

Note que Ask est une excellente ressource aussi :

-- en anglais
https://ask.libreoffice.org/en/questions/

-- et depuis peu en français
https://ask.libreoffice.org/fr/questions/


Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,
--
Jean-Francois Nifenecker, Bordeaux


--
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour vous désinscrire
Les archives de la liste sont disponibles à https://listarchives.libreoffice.org/fr/users/
Privacy Policy: https://www.documentfoundation.org/privacy

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.