[Résolu][Calc] Tri d'une ligne seule

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 !
boulauventre
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 06 juin 2016 20:23

[Résolu][Calc] Tri d'une ligne seule

Message par boulauventre »

Bonjour,

Je cherche à trier une ligne et uniquement la ligne voulue ( ligne 10 dans le fichier exemple ) mais le soucis est que lorsque je lance la macro une boite de dialogue me demande si je veux étendre la sélection ou conserver la sélection active.

Or je voudrais toujours conserver la sélection active et que cette macro s’exécute sans action de l'utilisateur.

Auriez vous une idée de comment faire s'il vous plait ?

Merci :super:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par boulauventre le 30 juin 2020 09:34, modifié 1 fois.
libre office 6.4.4 sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Tri d'une ligne seule

Message par Dude »

Salut,

Avec autant de messages à ton compteur, on va encore rappeler qu'il faut publier également le code.
Cela nous évite de télécharger des documents à n'en plus finir.

Code : Tout sélectionner

sub TriRDV
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$10:$I$10"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(9) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = false
args2(1).Name = "HasHeader"
args2(1).Value = false
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "NaturalSort"
args2(3).Value = false
args2(4).Name = "IncludeAttribs"
args2(4).Value = true
args2(5).Name = "UserDefIndex"
args2(5).Value = 0
args2(6).Name = "Col1"
args2(6).Value = 15
args2(7).Name = "Ascending1"
args2(7).Value = true
args2(8).Name = "IncludeComments"
args2(8).Value = false
args2(9).Name = "IncludeImages"
args2(9).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())

end sub
Tu utilises le Dispatcher avec comme argument ByRows. Il est donc logique que cela ne fonctionne pas.

Précise également par une copie écran, le résultat escompté.
boulauventre
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 06 juin 2016 20:23

Re: [Calc] Tri d'une ligne seule

Message par boulauventre »

Bonjour Dude,

Il est vrai que j'aurai du mettre une capture d'écran pour expliquer mon problème. :roll:

En fait le code n'est pas le soucis, il fonctionne.

Mon problème est plutôt d'éviter à l'utilisateur de devoir valider une boite de dialogue a chaque fois que le tri doit se faire. (Sinon je trouve que ça casse tout l'avantage de l'automatisation des macros)

En copie d'écran, On aperçoit la boite de dialogue automatiquement générée. C'est cette boite de dialogue que je souhaiterai ne pas voir apparaître. Car dans mon cas la réponse à cette boite de dialogue sera toujours "Sélection Active".

h**ps://zupimages.net/up/20/27/7wc2.png
La modération vous a écrit: Relisez ENCORE les règles : pas d'image hébergée en dehors de ce forum.

Merci de votre aide :super:

Code : Tout sélectionner

sub TriRDV
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$10:$I$10"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(9) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = false
args2(1).Name = "HasHeader"
args2(1).Value = false
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "NaturalSort"
args2(3).Value = false
args2(4).Name = "IncludeAttribs"
args2(4).Value = true
args2(5).Name = "UserDefIndex"
args2(5).Value = 0
args2(6).Name = "Col1"
args2(6).Value = 15
args2(7).Name = "Ascending1"
args2(7).Value = true
args2(8).Name = "IncludeComments"
args2(8).Value = false
args2(9).Name = "IncludeImages"
args2(9).Value = true

dispatcher.executeDispatch(document, ".uno:DataSort", "", 0, args2())


end sub
libre office 6.4.4 sous Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Tri d'une ligne seule

Message par Dude »

boulauventre a écrit :Mon problème est plutôt d'éviter à l'utilisateur de devoir valider une boite de dialogue a chaque fois que le tri doit se faire.
Dans ce cas, tu ne te sers pas du Dispatcher et tu passes par la méthode Sort sur ta plage de données.

Code : Tout sélectionner

Sub triLigne
	Dim oTriSens(0) as new com.sun.star.util.SortField
	Dim oTriDesc(1) as new com.sun.star.beans.PropertyValue
	oDoc = thisComponent
	oFeuil = oDoc.CurrentController.ActiveSheet
	
	oTriSens(0).Field = 0
	oTriSens(0).SortAscending = True
	oTriDesc(0).Name = "SortFields"
	oTriDesc(0).Value = oTriSens()
	oTriDesc(1).Name = "IsSortColumns"
	oTriDesc(1).Value = True
	
	oZone = oFeuil.getCellRangeByName("B10:I10")
	oZone.Sort(oTriDesc())  
End Sub
boulauventre
Membre OOrganisé
Membre OOrganisé
Messages : 80
Inscription : 06 juin 2016 20:23

Re: [Résolu][Calc] Tri d'une ligne seule

Message par boulauventre »

Merci Dude.

Ca fonctionne parfaitement :D

Je ne connaissais pas la méthode Sort :super:

Merci encore bonne journée :)
libre office 6.4.4 sous Windows 10