Boucle avec tri d'une selection ligne par ligne

Bonjour,
Voici mon problème. Je souhaite faire un tri (par ordre croissant) par ligne (De gauche à droite) dans une sélection (colonnes E à I).
Mais voilà cela ne fonctionne pas sur Calc (en tout cas pour moi) Car lorsque je sélectionne la plage de cellules concernée et que je sélectionne
Données/Trier…/Options/Direction → “De gauche à droite (Trier des colonnes)” (toutes les options de tri décochées) il ne se passe rien. Le seul moyen de procéder pour que cela fonction est de renseigner les critères de tri pour chaque ligne (mon fichier fait plus de 1200 lignes…).
J’ai donc tenté une macro avec des boucles.
Mais je bloque …
La première passe de la boucle fonctionne mais à la deuxième passe j’ai le message d’erreur suivant :

Erreur d'exécution BASIC.
			Une exception s'est produite : 
			Type: com.sun.star.lang.IllegalArgumentException
			Message: sequence element is not assignable by given value!.

De plus au moment du tri de la sélection une fenêtre s’ouvre pour demander si l’on veut étendre la sélection ou conserver la sélection active.
Et si en bonus vous pouviez m’indiquer comment faire en sorte que la macro s’exécute jusqu’à la dernière ligne contenant des données (le nombre de ligne de mon fichier n’étant pas fixe) ce serait Noël avant l’heure. :slight_smile:
Je joins un échantillon de test avec la macro (l’intégralité du fichier n’étant pas indispensable)
Je vous remercie par avance pour votre aide.Test_Tri_Quantites.ods

Bonjour

@Belaim a écrit:

lorsque je sélectionne la plage de cellules concernée et que je sélectionne Données/Trier…/Options/Direction → “De gauche à droite (Trier des colonnes)” (toutes les options de tri décochées) il ne se passe rien.

Sans doute parce que tu inclus E1:J1 dans ta sélection.

Le seul moyen de procéder pour que cela fonction est de renseigner les critères de tri pour chaque ligne

De la même manière que pour un tri par ligne (du haut vers le bas) on indique la colonne critère de tri… Pour mieux visualiser ce point tu peux faire un collage spécial pour “transposer” ta plage et tenter un tri “classique”.

J’ai donc tenté une macro avec des boucles…

Le “dispatcher” n’est qu’exceptionnellement plus pratique que le recours à l’API pour programmer. Je te propose la macro suivante (cf. module PYS dans le classeur joint Test_Tri_Quantites.ods)

sub TrierQte

dim oClasseur as Object, oFeuille as Object, oPlage as Object
dim oConfigTri(1) as new com.sun.star.table.TableSortField
dim oDesc(2) As New com.sun.star.beans.PropertyValue 
dim i as long

oClasseur = thisComponent
oFeuille = oClasseur.sheets.getByName("Test_Tri_Quantites")
oConfigTri(0).Field=1
oConfigTri(0).IsAscending=true

oDesc(0).name = "SortFields"
oDesc(0).value = oConfigTri()
oDesc(1).name = "ContainsHeader"
oDesc(1).value = false
oDesc(2).name = "IsSortColumns"
oDesc(2).value = true

for i = 1 to 22
	oPlage = oFeuille.getCellRangeByPosition(4, i, 8, i)
	oPlage.Sort(oDesc())
next i


end sub

Cordialement

Bonjour Pierre-Yves,

Un ENORME MERCI pour ta macro qui fonctionne à merveille !
Code beaucoup plus simple que mon usine à gaz et surtout efficace.
C’est à ça qu’on reconnait les pros :wink:
Encore merci
Cordialement,

Fab

@PYS J’ai un petit problème de vote. J’aurais aimé faire un vote positif pour ta réponse mais je n’y arrive pas :frowning:
Mais le coeur y est !
Dommage, cela pourrait également passer la question en mode résolu…

@Belaim merci pour le “retour”.

Pas d’inquiétude pour le vote… Avoir coché la case ✓ indique déjà que la réponse a été acceptée. Le vote positif se fait en cliquant sur la flèche ^. Aucune importance si cela ne fonctionne pas :slight_smile:

Cordialement