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

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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 ?

à +
 
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") "
 
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 +
 
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

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
@+
 
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
 
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
@+
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

J
Réponses
16
Affichages
8 K
Ouin-Ouin
O
Retour