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
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é.
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).
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
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.
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
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" ?
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
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).