[Résolu][Calc] Table de Pilote - Données en colonne

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 !

[Résolu][Calc] Table de Pilote - Données en colonne

Messagepar agraeth » 19 Mars 2015 10:49

Bonjour,

Je cherche à faire par macro ce que l'on fait simplement manuellement (par glisser-déposer), à savoir passer les champs de données en colonne.
Dans l'onglet "test" du fichier joint, vous trouverez 2 tables de pilote :
- la première est générée par la macro (clic sur le bouton "Créer pilote" de l'onglet "Base de données")
- la seconde est le résultat attendu.

Ci dessous le code pour créer la table de pilote :
Code : Tout sélectionner   AgrandirRéduire
Sub tablePilote(oShTable as Object, oCellTable as Object, oTableNom as String, oShSource as Object)
Dim oTables as Object, oTableDescr as Object
Dim derCol as Long, derLg as Long
Dim i as Integer
derCol = LastElement("Colonne",oShSource)    'La fonction LastElement permet de récupérer la dernière ligne ou colonne de la feuille indiquée.
derLg = LastElement("Ligne",oShSource)
oTables = oShTable.getDataPilotTables()
oTableDescr = oTables.createDataPilotDescriptor()
oTableDescr.setSourceRange(oShSource.getCellRangeByPosition(0,4,derCol,derLg).RangeAddress)
For i = 0 to 3
   With oTableDescr.getDataPilotFields().getByIndex(i)
      If i = 0 Then
         .setPropertyValue("Orientation", com.sun.star.sheet.DataPilotFieldOrientation.COLUMN)
      Else
         .setPropertyValue("Orientation", com.sun.star.sheet.DataPilotFieldOrientation.ROW)
      End If
      .setPropertyValue("Function", com.sun.star.sheet.GeneralFunction.NONE)
   End With
Next i
For i = 11 to 14
   With oTableDescr.getDataPilotFields().getByIndex(i)
      If i = 14 Then
         .setPropertyValue("Orientation", com.sun.star.sheet.DataPilotFieldOrientation.PAGE)
         .setPropertyValue("Function", com.sun.star.sheet.GeneralFunction.NONE)
      Else
         .setPropertyValue("Orientation", com.sun.star.sheet.DataPilotFieldOrientation.DATA)
         .setPropertyValue("Function", com.sun.star.sheet.GeneralFunction.SUM)
      End If
   End With
Next i
If oTables.hasByName(oTableNom) then oTables.removeByName(oTableNom)
oTables.insertNewByName(oTableNom, oCellTable.CellAddress, oTableDescr)
End Sub


Par ailleurs, est-il possible de n'avoir en total de colonne que le total du champ "TOTAL" et pas ceux des champs "Total A" et "Montant B" ?

Merci de votre aide !
Pièces jointes
exemple.ods
(22.66 Kio) Téléchargé 62 fois
Dernière édition par agraeth le 05 Fév 2016 15:34, édité 1 fois.
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
agraeth
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 51
Inscrit le : 15 Avr 2014 14:57

Re: [Calc] Table de Pilote - Données en colonne

Messagepar Dude » 07 Mai 2015 13:01

Salut,

Regarde déjà cette extension : Decroise
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 22645
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc] Table de Pilote - Données en colonne

Messagepar agraeth » 05 Fév 2016 12:07

Bonjour Dude,

Désolé pour cette réponse extra tardive...
L'extension ne semble pas adaptée à ce que je veux faire, mais je me suis surement mal exprimé...

Par défaut, lors de la création d'une table de pilote, les champs de données (DataFields) sont affichés en ligne à droite des champs de ligne (RowFields).
Ce que je souhaite, c'est afficher les champs de données (DataFields) en colonne sous les champs de colonne (ColumnFields) (ce qui se fait très facilement manuellement par glisser-déposer)...
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
agraeth
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 51
Inscrit le : 15 Avr 2014 14:57

Re: [Calc] Table de Pilote - Données en colonne

Messagepar Piaf » 05 Fév 2016 14:08

Bonjour
Teste en ajoutant :
Code : Tout sélectionner   AgrandirRéduire
oField = oTableDescr.getDataPilotFields().getByName("Données")
oField.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.COLUMN
Juste après la deuxième boucle dans la procédure TablePilote
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5622
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Calc] Table de Pilote - Données en colonne

Messagepar agraeth » 05 Fév 2016 15:33

:super:

Si simple et pourtant tellement inattendu !

Merci beaucoup Piaf !
LibreOffice 4.3.7.2.lin04 (non modifiable, version officielle employeur - poste fixe) sous Windows 7 Pro
LibreOffice 6.2.7.1.lin1 (non modifiable, version officielle employeur - poste nomade) sous Windows 10 Pro
agraeth
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 51
Inscrit le : 15 Avr 2014 14:57


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 8 invité(s)