Comment tester la présence d'un PivotField dans un tcd ?

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

dans des tcd, j'ai besoin de tester la présence éventuelle d'un champ (ici, le champ trim)
Quand le tcd ne présente QUE ce champ, ça marche, mais quand j'ai une combinaison, le test échoue
Par combinaison, j'entends que l'étiquette de colonnes contient plus d'un champ (ici trimestre et mois)

Ca foire quelque soit l'odre dans lequel apparaîssent les champs (trimestre puis champ ou champ puis trimestre)

Y a-t-il une instruction permettant d'identifier la présence d'un champ, quelque soit le nombre de champs ?
Autrement dit, si le champ trimestre existe, même parmi n autres champs …

En pièce jointe un petit fichier qui permettra de mieux comprendre
Ci-dessous le code

Code:
Sub PivotField_Existe()

Dim pt As PivotTable, pf As PivotField
Set pt = ActiveSheet.PivotTables(1)
For Each pf In pt.ColumnFields
    If pf.Name = "Trim" Then
               MsgBox "il y a bien un champ trimestre"
               ' instructions suivent mais pas l'objet de ce fil ...
               
     Else
               MsgBox "désolé, champ trimestre absent"
                ' instructions suivent mais pas l'objet de ce fil ...
                
    Exit For
    End If
Next pf

End Sub



Merci d'avance pour vos lumières
 

Sebast

XLDnaute Impliqué
Re : Comment tester la présence d'un PivotField dans un tcd ?

Bonjour Pierrot,

j'avais bien essayé en enlevant Exit for mais dans ce cas, quand il y a et le champ cherché et un autre non recherché, ça me dit "il y a bien ..." et "désolé ...".
Je n'arrive pas à ce que le code me dise d'emblée s'il y a ou non le champ évoqué.


bon après-midi
 

Pierrot93

XLDnaute Barbatruc
Re : Comment tester la présence d'un PivotField dans un tcd ?

Re,

on pourrait également tester ainsi :
Code:
Option Explicit
Sub test()
If Not champExiste("Trim") Is Nothing Then MsgBox "champ existe" Else MsgBox "champ absent"
End Sub
Function champExiste(p As String) As PivotField
On Error Resume Next
Set champExiste = ActiveSheet.PivotTables(1).PivotFields(p)
End Function
 

Sebast

XLDnaute Impliqué
Re : Comment tester la présence d'un PivotField dans un tcd ?

Re,

merci pour ce code.
J'ai testé sur tous mes onglets : qu'il y ait ou pas le champ considéré, ça affiche toujours "champ existe".
Je ne comprends pas la signification de la variable p (qui ne me paraît pas varier ici).

As-tu une idée ?

à +
 

Pierrot93

XLDnaute Barbatruc
Re : Comment tester la présence d'un PivotField dans un tcd ?

Re,

fonctionne chez moi... attention ne pas confondre entre un champ existant et un champ visible... c'est 2 choses différentes....

"p" est l'argument "string" de la fonction, et représente le nom du champ à tester, à savoir "trim" dans le code proposé "If Not champExiste("Trim") "
 

Sebast

XLDnaute Impliqué
Re : Comment tester la présence d'un PivotField dans un tcd ?

Re,

merci pour cette explication, je comprends mieux le fonctionnement.
En revanche, ça continue à annoncer "champ existe" même quand il n'y est pas (voir onglet TCD par mois : il n'y a bel et bien pas de champ Trim, et pourtant j'ai le message).
Pour le mix entre présent et affiché : OK

a +
 

Sebast

XLDnaute Impliqué
Re : Comment tester la présence d'un PivotField dans un tcd ?

Pierrot,

je n'ai effectivement pas uploadé le fichier, contrairement à ce que j'avais écrit dans mon premier message !
Le voici via ce post.

Donc, pour résumer, j'aimerais qu'un test puisse me dire si un tcd possède un champ donné (dans le cas présent, le champ trim, pour trimestre).

Le problème est que s'il y a plusieurs champs (genre : année et trimestre dans cet ordre ou trimestre et année, voire mois, année, trimestre ou davantage), le test passe tout en revue à l'affichage. J'aimerais que la réponse (positive ou négative) s'affiche sans qu'il y ait besoin d'afficher les réponses intermédiaires.

Exemple
On a en en-tête Mois/année/trimestre
J'aimerais que le code affiche idéalement "champ présent", sans passer par "champ absent" qd on est sur mois, "champ absent" qd on est sur année. En gros, tester la seule présence du champ souhaité (ici trim)

Le fichier joint devrait permettre d'y voir plus clair.

Bonne journée à tous
 

Pièces jointes

  • Afficher trim et mois.xlsm
    243.7 KB · Affichages: 61

Pierrot93

XLDnaute Barbatruc
Re : Comment tester la présence d'un PivotField dans un tcd ?

Bonjour,

regarde peut être ceci, fonctionne chez moi sur ton fichier :
Code:
Option Explicit
Sub test_Pierrot()
If champExiste("Trim") Is Nothing Then MsgBox "champ existe et visible"
End Sub
Function champExiste(p As String) As PivotField
On Error Resume Next
Set champExiste = ActiveSheet.PivotTables(1).HiddenFields(p)
End Function

bonne journée
@+
 

Sebast

XLDnaute Impliqué
Re : Comment tester la présence d'un PivotField dans un tcd ?

Bonjour Pierrot93,

désolé pour ma réponse tardive mais j'ai eu quelques problèmes de wifi.

Le code fonctionne et fait bien le distingo.
Juste pour ne pas recopier sans avoir bien compris : HiddenFields(p) permet de tenir compte de champs qui ne seraient éventuellement pas "déployés" ? c'est à dire présents dans le tcd mais non affichés, non "visibles" ?

Merci beaucoup pour ton aide
 

Pierrot93

XLDnaute Barbatruc
Re : Comment tester la présence d'un PivotField dans un tcd ?

Bonjour,

Juste pour ne pas recopier sans avoir bien compris : HiddenFields(p) permet de tenir compte de champs qui ne seraient éventuellement pas "déployés" ? c'est à dire présents dans le tcd mais non affichés, non "visibles" ?

oui tout à fait... d'ailleurs en y repensant il serait sans doute préférable de tester autrement, pour le cas ou le champ ne serait pas existant ....

Code:
Option Explicit
Sub test()
If Not champExiste("Trim") Is Nothing Then MsgBox "champ existe et visible"
End Sub
Function champExiste(p As String) As PivotField
On Error Resume Next
Set champExiste = ActiveSheet.PivotTables(1).VisibleFields(p)
End Function

bonne journée
@+
 

Sebast

XLDnaute Impliqué
Re : Comment tester la présence d'un PivotField dans un tcd ?

Bonjour,

merci beaucoup pour cette précision.
Tu écris

d'ailleurs en y repensant il serait sans doute préférable de tester autrement, pour le cas ou le champ ne serait pas existant ....

mais le code précédent fonctionnait aussi : qu'il y ait ou non le champ demandé, ça affichait le bon message (c'est à dire pas de message si pas le champ présent).

Bonne journée
 

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16