[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 !
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

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

Message par agraeth »

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

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 !
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par agraeth le 05 févr. 2016 14:34, modifié 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
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

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

Message par Dude »

Salut,

Regarde déjà cette extension : Decroise
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

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

Message par agraeth »

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
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

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

Message par Piaf »

Bonjour
Teste en ajoutant :

Code : Tout sélectionner

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
agraeth
Membre OOrganisé
Membre OOrganisé
Messages : 51
Inscription : 15 avr. 2014 13:57

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

Message par agraeth »

: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