Je ne sais pas si c'est possible mais j'essaye de concevoir une macro qui ajoute tous les champs de pivot dans la section de valeurs d'un tableau croisé dynamique nombres ou pourcentages.Excel VBA Vérifiez si le champ pivot doit être formaté en nombre ou en pourcentage
Voici ce que j'ai jusqu'à présent:
If MsgBox("Do you want to add all pivot table fields as values?", vbOKCancel + vbQuestion, "Accept/Reject") = vbCancel Then
Exit Sub
End If
Dim pt As PivotTable
Dim pf As PivotField
Dim pivotTableName As String
On Error Resume Next
Set pt = ActiveCell.PivotTable
If pt Is Nothing Then
pivotTableName = InputBox("Enter the pivot table name.")
Set pt = ActiveSheet.PivotTables(pivotTableName)
End If
For Each pf In pt.PivotFields
pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum
pt.PivotFields(pf.Name & " ").NumberFormat = "#,##0"
Next pf
Mais à côté, je voudrais ajouter une instruction if pour voir si oui ou non le champ doit être formaté en pourcentage à la place. Mes idées étaient:
Vérifiez une seule valeur d'enregistrement dans un champ pour voir si elle est inférieure à 100% (ou 1) (ce serait idéal dans 95% des situations dans lesquelles je suis)
Vérifiez que la somme d'un champ est inférieur à un nombre arbitraire, comme < 100 (pas parfait)
Vérifiez si le nom du champ a% en elle (ce que je vais probablement aller avec
Pour chaque Fld i n pt.PivotFields
Si InStr (fld.Value, "%") Puis
Suivant
Vérifiez si le champ est un champ calculé (pas parfait)
Pour chaque fld en pt.PivotFields
Si fld.IsCalculated Puis
Suivant
Les deux premiers sont-ils possibles? Est-ce que quelqu'un a de meilleures idées?
Merci!
P.S. Une autre chose que je voulais faire est de vérifier si le champ contient du texte ou peut-être si le champ ne peut pas être additionné.
jusqu'à ce que quelqu'un donne une meilleure réponse, vous pouvez regarder en boucle à travers les éléments du PivotField https://msdn.microsoft.com/en-us/library/office/ff820762.aspx (peut-être pivotTable1.ColumnFields (1) .ChildItems (1) .Value) – Slai
Merci pour cela, je pense que j'ai un idée, je vais essayer de sommer le champ si erreur alors il doit être le texte sinon après avoir ajouté le su Dans le tableau croisé dynamique, vérifiez sa valeur puis formatez-la. –
Sum ignore les valeurs de texte, mais vous pourriez trouver d'autres fonctions qui ne le sont pas. Je pensais en passant par les valeurs de pivotField un par un pour les vérifier et les sommer – Slai