[Résolu] [Calc] retourner à la Matrice de tous les résultats

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 !
calcul
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 04 déc. 2018 12:06

[Résolu] [Calc] retourner à la Matrice de tous les résultats

Message par calcul »

Salutations ,

J'ai trouvé une macro qui renvoie le tableau de tous les résultats d'une recherche avancée dans la feuille de calcul 1 .

juste en dessous de la macro de lien indiquée, a une pièce jointe, a téléchargé le fichier de lien et l’a attaché ici dans mon sujet .

dans la feuille de travail 2, vous verrez le tableau des résultats présentés par la macro de lien actuelle .

sur la feuille de travail 3, est un exemple de la façon dont j'aimerais que les résultats soient présentés . (macro1)

les valeurs de la ligne 1 sont placées à l’avance par moi, puis la macro1 doit renvoyer les résultats sous la ligne 1 .

sur la feuille de travail 4, est un autre exemple de la façon dont j'aimerais que les résultats soient présentés . (macro2)

les valeurs de la colonne "A" sont placées à l’avance par moi, puis la macro2 doit renvoyer la matrice de résultats dans la colonne "B" .

en bref, il me faut deux macros, les macros 1 et 2 , qui renverront tous les résultats sans répétition , comme illustré dans les feuilles de calcul 3 et 4 du fichier joint .
Pièces jointes
matrice de résultats.ods
(11.96 Kio) Téléchargé 112 fois
Dernière modification par calcul le 15 mars 2019 20:01, modifié 1 fois.
LibreOffice 5.4.4.2 et Windows 7
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] retourner à la Matrice de tous les résultats

Message par Hubert Lambert »

Bonjour,

Voici une proposition. Les deux macros sont en python, par commodité vu la nature du problème :

Code : Tout sélectionner

from operator import itemgetter
try:
    from itertools import groupby, izip_longest
except ImportError:
    from itertools import groupby, zip_longest as izip_longest


def tri_1(event=None):
    doc = XSCRIPTCONTEXT.getDocument()
    donnees = doc.NamedRanges.getByName("donnees").ReferredCells.DataArray
    donnees = sorted(donnees, key=itemgetter(0))
    groupes = {}
    for entete, valeurs in groupby(donnees, itemgetter(0)):
        groupes[entete] = sorted(v for k,v in set(valeurs))

    STARTCOL = 1
    STARTROW = 0
    feuille3 = doc.Sheets.getByIndex(2)
    choix = feuille3.getCellRangeByPosition(STARTCOL, STARTROW, STARTCOL+len(groupes)-1, STARTROW)
    lignes = []
    for c in choix.DataArray[0]:
        try:
            lignes.append(groupes[c])
        except KeyError:
            lignes.append([])
    lignes = tuple(izip_longest(*lignes, fillvalue=''))
    feuille3.getCellRangeByPosition(STARTCOL, STARTROW+1, STARTCOL+len(lignes[0])-1, 500).clearContents(31)
    dest = feuille3.getCellRangeByPosition(STARTCOL, STARTROW+1, STARTCOL+len(lignes[0])-1, STARTROW+len(lignes))
    dest.setDataArray(lignes)

def tri_2(event=None):
    doc = XSCRIPTCONTEXT.getDocument()
    donnees = doc.NamedRanges.getByName("donnees").ReferredCells.DataArray
    donnees = sorted(donnees, key=itemgetter(0))
    groupes = {}
    for entete, valeurs in groupby(donnees, itemgetter(0)):
        groupes[entete] = " / ".join('{:g}'.format(v) for k,v in sorted(set(valeurs)))

    STARTCOL = 0
    STARTROW = 1
    feuille4 = doc.Sheets.getByIndex(3)
    choix = feuille4.getCellRangeByPosition(STARTCOL, STARTROW, STARTCOL, STARTROW+len(groupes)-1)
    lignes = []
    for c in choix.DataArray:
        try:
            lignes.append((groupes[c[0]],))
        except KeyError:
            lignes.append(("",))
    feuille4.getCellRangeByPosition(STARTCOL+1, 500, STARTCOL+1, 500)
    dest = feuille4.getCellRangeByPosition(STARTCOL+1, STARTROW, STARTCOL+1, STARTROW+len(lignes)-1)
    dest.setDataArray(tuple(lignes))
Cordialement.
Pièces jointes
calcul.ods
(15.72 Kio) Téléchargé 110 fois
Dernière modification par Hubert Lambert le 15 mars 2019 08:11, modifié 1 fois.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
calcul
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 04 déc. 2018 12:06

Re: [Calc] retourner à la Matrice de tous les résultats

Message par calcul »

salutations sr. Hubert Lambert ,

c'était très bien que vous ayez construit les macros en python, car je voulais depuis un certain temps comprendre la programmation python dans libreoffice .

le problème est que, jusqu'à aujourd'hui, je n'ai toujours pas réussi à faire fonctionner une macro python dans mes tests que j'ai essayé d'exécuter dans libreoffice .

j'ai donc téléchargé le fichier avec les macros python, mais cela n'a pas fonctionné pour moi . :(

est-ce que j’aurai peut-être besoin d’exécuter quelque chose dans mon libreoffice pour que les macros python fonctionnent ?

Je pense que je fais quelque chose de mal ou peut-être que je manque quelque chose que je n'ai pas fait . :fou:

suit deux images des erreurs, lorsque vous essayez d'exécuter les macros des feuilles de calcul 3 et 4, du fichier que vous avez joint .

ami câlin .
Pièces jointes
fiche de travail 3.png
fiche de travail 4.png
LibreOffice 5.4.4.2 et Windows 7
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] retourner à la Matrice de tous les résultats

Message par Hubert Lambert »

En portugais, vraiment ? :roll:
Quoi qu'il en soit, j'étais persuadé d'avoir vu "OpenOffice" dans ta signature, et je n'avais pas testé sous LibreOffice.
J'ai mis à jour le code et le fichier dans mon précédent message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
calcul
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 04 déc. 2018 12:06

Re: [Calc] retourner à la Matrice de tous les résultats

Message par calcul »

bonjour sr. Hubert Lambert ,
merci beaucoup, c'était super, cela a très bien fonctionné, félicitations pour votre programme . :super: :bravo: :bravo:

mais où est le code python stocké dans votre post précédent ? Je n'ai pas trouvé le code python dans le fichier joint, je n'ai trouvé que le code Basic sub Main dans le module1 .

parce que je devrai adapter ce programme à mon fichier d'origine, je pense donc devoir placer votre code python quelque part dans le fichier d'origine, alors où vais-je placer le code python ?

si vous pouvez m'expliquer, je vous en suis très reconnaissant, car j'ai essayé d'exécuter à d'autres occasions d'autres codes python qui ne fonctionnaient pas, car je faisais quelque chose de mal .

Maintenant, avec votre précédent post et vos commentaires, j'ai commencé à mieux comprendre les conditions nécessaires, mais je ne sais toujours pas comment et où mettre le code python dans le fichier d'origine ?


Merci mon ami .
LibreOffice 5.4.4.2 et Windows 7
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 09:26

Re: [Calc] retourner à la Matrice de tous les résultats

Message par Hubert Lambert »

3 choses :
- installe APSO (détails), qui facilite grandement l'accès aux scripts python (il n'y a pas d'éditeur intégré pour les macros en python);
- fais quelques essais à partir des macros de démonstration, situées dans "Macros LibreOffice", et lis ce fil et celui-ci;
- développe tes propres macros dans "Mes macros" et, seulement lorsqu'elles sont au point, embarque-les dans le document (APSO permet aussi de la faire très facilement).
Cordialement.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
calcul
Membre OOrganisé
Membre OOrganisé
Messages : 88
Inscription : 04 déc. 2018 12:06

[Résolu] [Calc] retourner à la Matrice de tous les résultats

Message par calcul »

Merci beaucoup pour les conseils, je vais étudier les liens . :super:

Si vous avez des questions, revenez avec un nouveau sujet .


ami câlin .
LibreOffice 5.4.4.2 et Windows 7
Verrouillé