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