hello,
voilà je cherche à optimiser le code d'une macro python LibreOffice que j'ai fabriquée pour trier des nombres dans des cellules de LibreOffice Calc(je suis Newbie Python donc pas au top au niveau optimisation). Plutôt qu'un long discours voici une copie d'écran de ce que je veux réaliser avec la macro :

Nom : trie_colonnes.PNG
Affichages : 1820
Taille : 63,1 Ko

A gauche les données de départ, A droite ce que je veux obtenir ( tri des nombres Résultat par colonne et pas de doublon)

Voici le code qui me permet d'y arriver :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def test_tableau():
    desktop = XSCRIPTCONTEXT.getDesktop()
    calc = desktop.getCurrentComponent()
    sheet = calc.getSheets().getByIndex(0)
    a = sheet.getCellRangeByName("A1:G10")
	# on récupere les data en une seule fois
    plage = a.getDataArray()
	# on crée une liste à une dimension à partir de la plage
    listeNombre = [item for sublist in plage for item in sublist]
	# on classe par ordre croissant les nombres et on enlève les doublons
    matrice = sorted(set(listeNombre))
	# on recrée la plage à partir de la liste triée sans doublon
	# en inversant les lignes et les colonnes
    totallist = []
    for i in range(0,10,1):
        rowlist = []
        for j in range(0,7,1):
            try:
                rowlist.append(matrice[j*7 +i])
	# si matrice[x] n'existe pas on met un élément vide
            except:
                rowlist.append('')
        totallist.append(tuple(rowlist) )  
    # on définit la plage ou on va écrire
    b = sheet.getCellRangeByName("I1:O10")
    # on écrit en une fois la plage résultat
    b.setDataArray(tuple(totallist))	
g_exportedScripts = test_tableau,
La question est : n'y a-t-il pas moyen d'optimiser la partie tri et génération de la plage de sortie ?

Ami calmant, J.P