[Résolu][Calc] Données, SousTotaux forme Basic des options

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 !
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

[Résolu][Calc] Données, SousTotaux forme Basic des options

Message par bhmb »

Guidé par Spyre le problème ci-dessous me paraît résolu et je joins le fichier DonnéessousTotaux ci-dessous

Bonjour,

J'ai cherché sur le site la formulation en basic de la commande et ses options "Données, Sous-totaux" de Calc

Je pense que cela existe quelque part mais je ne sais pas où ?
Je ne souhaite pas utiliser l'enregistreur de macro
Je connais à peu près la formulation des Tri et des Filtres mais cela ne suffit pas à mon bonheur, j'ai besoin des sous-totaux après tri pour chacune des rubriques identifiées par le tri puis avoir la possibilité de "supprimer" selon la commande pour revenir à la liste originelle.

Merci de votre aide
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par bhmb le 06 févr. 2012 16:51, modifié 8 fois.
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

Bonjour bhmb,

Je ne suis pas certain de comprendre la question, un peu brouillonne.
Mais je devine que tu trouveras une partie des réponses ici : http://user.services.openoffice.org/fr/ ... 969#p10969.
Tu peux compléter celles-ci en faisant une recherche sur le terme createSubTotalDescriptor.
Cordialement.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Merci Spyre,

La solution proposée par Pierre Yves est effectivement assez efficace. Je dois dire que si l'on s'en tient au titre que j'ai donné je devrais déjà indiqué résolu car les 2 problèmes qui me restent ne sont pas mieux résolus par l'enregistreur de macro.

La recherche du subtotaldescriptor sur ce site ne renvoie qu'à ce post et la même recherche sur le forum api ne me conduit ni à un exemple ni à ni à formulation des paramètres de ce "descriptor" poour m'aider à résoudre ces 2 problèmes. Je veux bien faire d'autres recherches mais où ?

Cela étant dit, dans mon projet, je veux organiser les sous-totaux sur la colonne 6 pour des regroupements colonnes 2 ( et jusque là cela fonctionne) mais
a) je voudrais que les différentes lignes soient en même temps triées dans les regroupements par ordre chronologique de la colonne 1
b) certaines cellules de la colonne 6 comportent des formules matricielles qui ne "suivent pas" et se retrouvent ailleurs que là où elles devraient être lors du regroupement.

Concernant le point b: j'ai imaginé de faire une transformation des cellules matricielles en simple valeur le temps de l''exécution du sous-total puis de les restaurer lors du retour au simple mode chronologique. Je me demandais toutefois si ce problème ne venait pas d'une formulation insuffisante du descripteur et dans ce cas laquelle ?

Concernant le point a : avant l'opération de regroupement/sous-totalisation, la feuille est bien triée sur la colonne 1 (chronologie croissante) mais je ne suis pas sûr que cela implique le maintien de cette présentation lors des regroupements et notamment sur une feuille plus remplie ? Donc j'aimerai savoir s'il est possible d'indiquer dans le descripteur cette option pour ce tri complémentaire et comment ?

Merci encore
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

Mmmmh, va falloir inventer l'émoticône avec la tête qui fume :D .
Pourrais-tu joindre un fichier illustrant le problème ? Je pense que ce sera beaucoup plus simple pour tous (toi compris) et ça stimulera les réponses.
Merci.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Merci Spyre,

Voici une feuille du fichier avec la macro originelle.
Les cellules qui apparaissent avec la référence "REF" sont les cellules matricielles. Elles ne suivent pas le regroupement comme cela se voit en appliquant la macro.

En cherchant sur le forum API, je vois que dans les propriétés on trouve "bindformattocontent"
mais j'ignore si cela permettrait de répondre à la question (je ne trouve pas comment l'écrire)?


Bien cordialement
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

bhmb a écrit :a) je voudrais que les différentes lignes soient en même temps triées dans les regroupements par ordre chronologique de la colonne 1
Sauf erreur, ceci est possible de la manière suivante :
- créer un 2e groupe dans le dialogue de sous-total,
- choisir la colonne 1 comme clé de regroupement,
- ne rien cocher comme colonne de calcul.
bhmb a écrit :b) certaines cellules de la colonne 6 comportent des formules matricielles qui ne "suivent pas" et se retrouvent ailleurs que là où elles devraient être lors du regroupement.
Et bien il semblerait en effet qu'une colonne contenant une ou plusieurs formules matricielles ne puisse être triée (l'opération "sous-totaux" implique un tri de la plage) : les cellules contenant ces formules sont verrouillées à leur ligne...
J'ignore si c'est un bogue ou un comportement normal.
Pour reproduire :
- dans un classeur vierge, remplir une colonne avec une vingtaine de valeurs aléatoires,
- valider une de ces valeurs au hasard par CTRL+MAJ+ENTRÉE,
- trier la colonne.
Les valeurs sont toutes triées sauf la cellule matricielle...
 Ajout : J'ai essayé de comprendre tes formules matricielles, mais elles renvoient toutes à Feuille2, qui ne contient aucune valeur.
Néanmoins, il me semble qu'elles pourraient, toutes, être remplacées par une formule SOMMEPROD(), laquelle résoudrait le problème de tri, donc de sous-totaux... 
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Merci Spyre

SOMMEPROD {} est également une formule matricielle (le problème devrait être le même ?) mais je ne sais pas écrire la fonction actuelle assez "chargée" sous la forme SOMMEPROD A la rigueur ce problème peut-être résolu par une sous-macro de copie valeur lors de la sous-totalisation et donc je vois une forme de solution (un pis aller)...

Mais ce que je ne sais pas résoudre c'est le problème du tri en plus sur la colonne 1 : comment rajouter cette condition dans l'exemple de Pierre Yves (sous-total sur la colonne 6 et regroupement colonne 2) ?

PS J'ai regardé le forum API et je n'ai pas trouvé mieux que cet exemple.
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 14:30

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par jjk »

Non, SOMMEPROD n'est pas matricielle. Cette fonction permettrait peut-être d'avancer.
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

bhmb a écrit :ce que je ne sais pas résoudre c'est le problème du tri en plus sur la colonne 1 : comment rajouter cette condition dans l'exemple de Pierre Yves
Tu peux rajouter la ligne suivante juste avant l'instruction applySubTotals :

Code : Tout sélectionner

'Groupement sur 1re colonne sans 'SubTotalColumn' -> équivaut à un sous-tri sur la colonne A
PysSubTotDesc.addNew(array(), 0)
jjk a écrit :Non, SOMMEPROD n'est pas matricielle. Cette fonction permettrait peut-être d'avancer.
En effet. Ou plutôt c'est une formule matricielle qui ne se valide pas par CTRL+MAJ+ENTRÉE. Ce qui fait toute la différence en l'espèce.
Dans un premier temps, vois si un simple remplacement de SOMME par SOMMEPROD (en revalidant par ENTRÉE donc) renvoie le résultat attendu. Sinon, ouvre peut-être un nouveau fil en section Tableur pour chercher un équivalent non matriciel.
Je joins un exemple.

Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Merci

à jjk SOMMEPROD a effectivement permis d'avancer, les cellules suivent le réarrangement : cela se voit sur l'exemple où les lignes CCP ne se retrouvent plus avec des sommes matricielles (cela se voit mieux encore sur l'original)

à SpYre :

a) SOMMEPROD
- j'ai eu l'impression que SOMMEPROD prend plus de mémoire / était plus lourd ?
Connaissez-vous la raison pour laquelle la somme matricielle simple bloque ?

b) tri supplémentaire sur une autre colonne
- Merveilleux cela fonctionne : j'ai choisi la dernière colonne (valeur 6) en complétant les libellés similaires par des lettres a, b,c, d, e affectées dans un ordre différent de celui de la chronologie de la colonne 1. J'ai ensuite demandé le même sous-total que précédemment mais avec un tri sur cette colonne 7 et c'est effectivement dans ce bon ordre alphabétique colonne 7 que sont triés les sous-totaux. Je joins le fichier modifié.


c) Dans le menu Données, Sous-totaux, figure un onglet Options
- par défaut ici le tri et groupement se font par ordre croissant, comment le faire en ordre décroissant ( je ne vois pas une mention type "true" dans la description de l'outil) ?
- comment s'écrit Données, Sous-Totaux, supprimer, commande qui remet la feuille dans son tri précédent ?
- et pour être complet bien que je n'en ai pas l'usage comment libeller les autres options du menu "saut de page entre les groupes" "respecter la casse" "inclure les formats" "ordre de tri personnalisé" J'imagine qu'il s'agit de variables de l'outil subtotal column (dans quel ordre ?) je continue à chercher.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

Heureux que cela fonctionne :wink: .
Pour explorer les propriétés et méthodes d'un objet, Xray est incontournable.
Pour les sous-totaux en particulier, tout est ici : http://www.openoffice.org/api/docs/comm ... iptor.html.

Le pendant de applySubTotals() est removeSubTotals().
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Oui merci encore,

Je vais creuser pour les autres options mais en me rendant sur un des fils recommandés (intervenant carreau), j'ai bien trouvé la commande mais Pysplage.RemoveSubTotals() appliqué en fin de la même macro ne donne rien ? (j'ai simplement repris la macro précédente + cette ligne)
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

bhmb a écrit :(j'ai simplement repris la macro précédente + cette ligne)
Comme son nom l'indique, removeSubTotals() supprime tout sous-total. C'est ce que j'avais compris de ton message précédent :
bhmb a écrit :comment s'écrit Données, Sous-Totaux, supprimer, commande qui remet la feuille dans son tri précédent ?
Si tu fais :

Code : Tout sélectionner

PysPlage.applySubTotals(PysSubTotDesc, true)
PysPlage.removeSubTotals()
tu effectues puis annules l'opération, donc il ne se passe rien en effet...
Dernière modification par spYre le 07 févr. 2012 22:22, modifié 1 fois.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Bonsoir Spyre,

Je pars d'une feuille dont la zone est non sous-totalisée : si j'effectue la macro de sous totalisation puis rajoute la ligne RemaoveSubTotals ne devrais-je pas revenir au point de départ càd en non sous-totalisé ?

Ce que j'ai mentionné n'est qu'une de mes tentatives : d'après Carreau soit on applique à la zone et il faut indiquer le descripteur entre parenthèse soit on applique à la feuille et rien entre les parenthèses. J'ai aussi inversé

Je reste toujours totalisé ?

Je joins le fichier avec la 2ème macro suppression sous-totaux
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

Un exemple donc :
 Ajout : Je constate que la plage nommée s'adaptent mal aux modifications de dimensions.
Ça paraît mieux en la remplaçant par une plage de données (Données-->Définir la plage...). Cela ne change rien au code. 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Merci Spyre :

Chez moi les 2 boutons (ajouter... supprimer) ne fonctionnent pas et donc je les lance directement par le Basic édité.
Je n'ai aucun problème pour sous-totaliser (1ère macro) mais en revanche quand je lance la 2ème rien

Je viens de trouver mon erreur : j'avais mis les 2 macros dans le même module et en les mettant dans 2 modules différents le problème ne se pose plus ! Je pensais que c'était possible d'exécuter directement 2 macros différentes depuis le même module. en cliquant sur la flèche verte une fois le curseur positionné dans la bonne macro ? Bon il faudra que je revoie mes bases ! Pourtant aucune des 2 n'était déclarée comme "main".

J'ai regardé Xray / la page des propriétés mais comment s''écrivent celles-ci : entre parenthèse une énumération séparée par des virgules avec comme valeur O, 1, false true selon les cas ?

Merci beaucoup en tout cas
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

bhmb a écrit :Chez moi les 2 boutons (ajouter... supprimer) ne fonctionnent pas et donc je les lance directement par le Basic édité.
SI ça marche à partir de l'éditeur basic, il n'y a pas de raison que les boutons ne fonctionnent pas. Vérifie à tout hasard que tu n'es pas en mode "ébauche de formulaire"...
bhmb a écrit :Je viens de trouver mon erreur : j'avais mis les 2 macros dans le même module et en les mettant dans 2 modules différents le problème ne se pose plus ! Je pensais que c'était possible d'exécuter directement 2 macros différentes depuis le même module. en cliquant sur la flèche verte une fois le curseur positionné dans la bonne macro ? Bon il faudra que je revoie mes bases ! Pourtant aucune des 2 n'était déclarée comme "main".
On peux bien sûr placer plusieurs routines dans un même module.
La touche F5 lance toujours la première macro du module (dans LibreOffice, elle lance la macro où se trouve le curseur). Pour choisir la macro à lancer, tu peux faire CTRL+F11.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Spyre merci pour tout,

J'ai utilisé Xray et après avoir tâtonné j'ai reconstitué l'outil de sous-totalisation avec ses propriétés. Je l'ai testé avec 3 sous-tri et le mode décroissant. Il fonctionne. Je joins le fichier modifié en tête de ce fil. Je n'ai pas vérifié toutes les propriétés dont je ne vois pas très bien l'usage pour l'instant mais cela doit marcher. C'est donc un optimiste résolu que j'indique ci-dessus.

Concernant le débordement de zone que génère la sous-totalisation et la difficulté qu'il en résulte à utiliser le même nom de zone pour supprimer les sous-totaux, je n'ai pas retenu la solution préconisée par Spyre (trouver la délimitation de la nouvelle zone) mais une astuce définir d'emblée une zone complémentaire s'étendant 1 ligne plus bas que la zone de sous-totalisation et qui sera utilisée pour supprimer les sous-totaux.

Concernant les boutons pour lancer les macros, ils marchaient aujourd'hui ?? mais pas hier (mon vénérable ordinateur peut-être)

Concernant la fonction SOMMEPRODUIT utilisée en remplacement de la somme matricielle directe le problème ne semblait pas se poser lors de la sous-totalisation mais réapparaît lors de la suppression. Comme l'enregistreur ne fait pas mieux je résoudrai ce problème par une copie valeur pour la sous-totalisation et la restoration des formules lors de la suppression des sous-totaux.

A bientôt et merci encore
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 19:02
Localisation : Liège, Belgique

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par spYre »

bhmb a écrit :Concernant le débordement de zone que génère la sous-totalisation et la difficulté qu'il en résulte à utiliser le même nom de zone pour supprimer les sous-totaux, je n'ai pas retenu la solution préconisée par Spyre (trouver la délimitation de la nouvelle zone) [...]
Jamais rien dit de tel. Je me répète donc :
spYre a écrit :Je constate que la plage nommée s'adaptent mal aux modifications de dimensions.
Ça paraît mieux en la remplaçant par une plage de données (Données-->Définir la plage...). Cela ne change rien au code.
:idea:
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Désolé j'ai mal compris mais je retiens une autre solution.
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g
jjk
HédOOniste
HédOOniste
Messages : 1696
Inscription : 27 oct. 2008 14:30

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par jjk »

bhmb a écrit :Désolé j'ai mal compris mais je retiens une autre solution.
Soit, laquelle ? Elle peut intéresser d'autres visiteurs.
OpenOffice 3.1.1 sous XP-SP2 et LibreOffice 3.5.0 sous Win 7
bhmb
Membre OOrganisé
Membre OOrganisé
Messages : 94
Inscription : 14 nov. 2008 21:32

Re: [Calc] Données, Sous-Totaux formulation Basic de ses opt

Message par bhmb »

Comme indique au-dessus

"Concernant le débordement de zone que génère la sous-totalisation et la difficulté qu'il en résulte à utiliser le même nom de zone pour supprimer les sous-totaux,....une astuce : définir d'emblée une zone complémentaire s'étendant 1 ligne plus bas que la zone de sous-totalisation et qui sera utilisée pour supprimer les sous-totaux".

Dans la macro cela correspond à la zone couverte par le nom GLBASE utilisé dans la macro sous-totaliser et à GLBASE2 (GLBASE + 1 ligne plus bas) utilisé dans la macro suppression des totaux.

A bientôt
Aoo 4.15 sous W10 et sous Xu16.04 config 64bits Ram 8g