Macro Calc pour table dynamique : grouper des résultats numériques

Bonjour,

j’utilise LibreOffice 6 sous ubuntu 18.04.

Dans une macro créant une table dynamique je dois grouper des dates et des valeurs numériques.
Pour les dates cela fonctionne correctement avec ce code :

Dim oGroupe(0 To 1) As New com.sun.star.sheet.DataPilotFieldGroupInfo
With oGroupe(0)
      .HasAutoStart = True
      .HasAutoEnd = True
      .HasDateValues = True
      .SourceField = champs(0)
      .GroupBy = 16
      .Step = 0
End With
champs(0).CreateDateGroup(oGroupe(0))

Mais je n’arrive pas à trouver les bons paramètres pour grouper (par 2) les données d’un champ numérique.
Le code suivant :

With oGroupe(1)
      .HasAutoStart = True
      .HasAutoEnd = True
      .HasDateValues = False
      .SourceField = 0
      .GroupBy = 0
      .Step = 2
End With
champs(6).CreateNameGroup(oGroupe(1))

me donne l’erreur :

variable d’objet non définie

et le code :

With oGroupe(1)
      .HasAutoStart = True
      .HasAutoEnd = True
      .HasDateValues = False
      .SourceField = champs(6)
      .GroupBy = 0
      .Step = 2
End With
champs(6).CreateNameGroup(oGroupe(1))

me donne l’erreur :

Erreur d’exécution BASIC. Une
exception s’est produite : Type:
com.sun.star.lang.IllegalArgumentException
Message: cannot coerce argument type
during corereflection call: arg no.: 0
expected: “[]string” actual: “void”.

Je voudrais grouper par deux les données (qui sont des nombres entiers) de la colonne d’index 6
Quels sont les bonnes valeurs pour .GroupBy, .SourceField et .Step ?
Y-a-t-il d’autres propriétés ?
La méthode .CreateNamedGroup est elle la bonne ?

Merci pour votre aide.

Michel

Complément :
Je joins le classeur contenant le programme (dans Stadard - Module 1)

La feuille “Base” du classeur contient la base des données à partir de laquelle je veux faire un tableau croisé dynamique.

Quand j’exécute Main telle qu’elle est (c’est à dire avec les lignes 72 à 80 mises en commentaire) cela fonctionne et on obtient le résultat dans “feuille table essai (1)”

J’ai mis dans “feuille table essai (2)” ce que je veux obtenir et que j’ai obtenu à partir de la table dynamique précédente en utilisant Données - Groupe - Plan et Groupe - Grouper par 2, après avoir sélectionné la cellule D6

Normalement je devrais pouvoir obtenir le même chose par une macro en décommentant les lignes 72 à 80 ; mais cela me donne les messages d’erreurs signalés dans mon premier message.

Remarque : les 2 feuilles sont des copies de la table dynamique originale obtenue ; pour faire les tests il faut ré-exécuter la macro Main et travailler dans la nouvelle “feuille table essai” obtenue
Merciutl-application-5-pilote.ods

Bonjour

Je ne comprends pas :

Je voudrais grouper par deux les données (qui sont des nombres entiers)

Pourrais-tu éditer ta question (cliquer sur éditer directement sous ta question) pour donner des précisions, si possible avec un exemple (réduit au minimum permettant de comprendre) des données initiales et du résultat attendu ?

Cordialement

Désolé, pas le temps de creuser davantage ces jours-ci mais (pour te donner une piste) en tout cas cela ne peut fonctionner en l’état car CreateNameGroup n’attend pas les mêmes paramètres que CreateDateGroup.

Cordialement

Bonjour

Trouvé un peu de temps… Tu peux faire comme ceci (pour me simplifier la tâche je modifie directement ton résultat mais tu ne devrais pas avoir de difficulté pour intégrer dans ton programme) :

sub Group

dim oSheet, oDP, oField
dim oGroupInfo As New com.sun.star.sheet.DataPilotFieldGroupInfo
					  
oSheet = thiscomponent.sheets.getbyIndex(1)
oDP = oSheet.getDataPilotTables.getByIndex(0)
oField = oDP.getRowFields.getByName("Durée")

With oGroupInfo
	.GroupBy = 0
	.HasAutoEnd = True
	.HasAutoStart = True
	.HasDateValues = False
	.Step = 2
End With

oField.setPropertyValue("GroupInfo", oGroupInfo)
oDP.refresh

end sub

Cordialement

Merci beaucoup pour ta disponibilité et ton efficacité.

Ça fonctionne très bien !

Comment peut on indiquer que c’est résolu sur le forum ? (Bon, j’ai trouvé !)

Cordialement,

Michel