Dans TCD, tester l'existence d'un champ

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

Dans un TCD, je n’arrive pas à tester la présence d’un champ et du coup, mon code plante quand la feuille ne contient pas ce champ.
Qui peut me dire comment on écrit en VBA quelque chose comme « si le PivotFiled(‘’ Produit’’) n’existe pas, alors … »


Merci d’avance pour vos lumières


xxxxxxx Actuellement, j’ai ça xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


Sub Ajuster_Largeur_Colonne_Produit()

If ActiveSheet.PivotTables.Count > 0 Then

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Produit").LabelRange.Select

With Selection
. ColumnWidth = 60
End With


End If

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Dans TCD, tester l'existence d'un champ

Bonjour,

regarde peut être ceci :
Code:
Option Explicit
Sub test()
If Not testchamp("Produit") Is Nothing Then
    MsgBox "chmp existe"
Else
    MsgBox "chmp n'existe pas"
End If
End Sub
Function testchamp(pf As String) As PivotField
On Error Resume Next
Set testchamp = ActiveSheet.PivotTables(1).PivotFields(pf)
End Function

bon après midi
@+
 

Sebast

XLDnaute Impliqué
Re : Dans TCD, tester l'existence d'un champ

Bonjour Pierrot,

merci pour ta réponse.
Bizarremment, quand je lance la macro sur une feuille contenant un TCD mais pas le champ "Produit", ça me dit que ce champ existe bel et bien ...
Pour m'en convaincre, si je remplace "Produit" par "ProduitA" (qui pour le coup n'existe pas du tout), alors là j'ai bien le message qu'il n'existe pas ... c'est comme si étaient testés les tcd du classeur et pas uniquement celui de la feuille en cours (malgré l'instruction activesheet ...).

Je pensais à une instruction simple, du genre (mais ma syntaxe est foireuse, c'est tout le problème ...) :
if PivotField("Produit") is nothing then ...
 

Pierrot93

XLDnaute Barbatruc
Re : Dans TCD, tester l'existence d'un champ

Re,

Tu as mis ton code où ? dans un module de feuille (lié directement à une feuille de calcul) ou bien via barre de menu dans l'éditeur vba => insertion => module, celui-ci est un module standard....
 

Sebast

XLDnaute Impliqué
Re : Dans TCD, tester l'existence d'un champ

Re,

malgré ça, ça teste sur tout le fichier et pas uniquement la feuille active. Est-ce dû au fait que j'ai créé les multiples onglets par copier/coller, ce qui permet de pointer dans la même source et d'actualiser d'un coup ?
 

Sebast

XLDnaute Impliqué
Re : Dans TCD, tester l'existence d'un champ

Re,

voici le fichier.
Comme tu le verras, dans le premier onglet où il y a un tcd avec le champ souhaité (j'ai adapté ici et le champ devient "genre"), c'est OK mais aussi dans le second, où ce champ ne figure pas ...

Pour m'en persuader, je vais dans un autre onglet où il n'y a pas de tcd, et là, ça me renvoie (comme attendu) que ce champ ne figure pas ...

Merci pour ton attention
 

Pièces jointes

  • Pivot.xlsm
    260.7 KB · Affichages: 58
  • Pivot.xlsm
    260.7 KB · Affichages: 84
  • Pivot.xlsm
    260.7 KB · Affichages: 85

Pierrot93

XLDnaute Barbatruc
Re : Dans TCD, tester l'existence d'un champ

Re,

peux pas tester avec ton fichier, les TCD supportent mal la conversion.... et je suis sous 2003... mets le peut être en xls, mais si 2007 d'origine, je crais que cela ne passe pas mieux...

bonne soirée
@+
 

chris

XLDnaute Barbatruc
Re : Dans TCD, tester l'existence d'un champ

Bonjour
Coucou Pierrot

A tester
Code:
Option Explicit


Sub test()
Dim x
x = testchamp("Genre")
If x = 0 Then
    MsgBox "chmp n'existe pas"
Else
    MsgBox "chmp existe"
End If
End Sub
Function testchamp(pf As String)
On Error Resume Next
Set testchamp = ActiveSheet.PivotTables(1).PivotFields(pf)
If testchamp Is Nothing Then
    testchamp = 0
ElseIf testchamp.ShowingInAxis = False Then
    testchamp = 0
End If
End Function
 
Dernière édition:

Sebast

XLDnaute Impliqué
Re : Dans TCD, tester l'existence d'un champ

Bonsoir Pierrot, bonsoir Chris,

Pierrot : je ne suis plus sur l'ordi de tout à l'heure donc je ne peux pas renvoyer le fichier en version .xls ou 2003 : je le pourrai demain matin.

Chris : merci pour ton code. Je suis confronté au même problème que tout à l'heure, à savoir il détecte tout le temps la présence du champ "genre", même si objectivement, il n'y est plus. Il n'y a que dans une feuille sans TCD qu'il me renvoie un "chmp n'existe pas".
C'est tout de même très instructif car entre temps, j'avais bricolé le code suivant, qui grâce à un on error resume next ne plante pas mais applique quand même la largeur à 150 quand il n'y a plus le champ "genre", et ce à une colonne apparemment quelconque :

Sub régler_colonne_genre()
Dim sh As Long
For sh = 1 To Sheets.Count
Sheets(sh).Select

If ActiveSheet.PivotTables.Count > 0 Then

On Error Resume Next 'ici pour "contourner" le problème

ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Genre").LabelRange.Select

With Selection
.ColumnWidth = 150
End With

End If
Next
End Sub

... donc Chris, ton code me conforte dans l'idée que oui, les onglets comportent bien le champ "genre", même si enlevé au préalable (comme en témoigne la mise à 150 d'une colonne par feuille, qu'elle ait ou pas le champ "genre" : si champ "genre" présent, c'est cette colonne qui est mise à 150, si non, colonne quelconque).

Y a-t-il une sorte de "mémoire" ?
Ai-je mal positionné l'instruction ON ERROR RESUME NEXT dans le bout de code ci-dessus ?

Merci pour votre sagacité
 

chris

XLDnaute Barbatruc
Re : Dans TCD, tester l'existence d'un champ

Bonjour

Dans 2010 mon code renvoie bien "champ n'existe pas" si le champ n'est pas utilisé dans le TCD (cas de ta feuille par pays) ceci via le test ShowingInAxis

Cela m'étonne que 2007 ne donne pas le même résultat...

Edit : une petite correction du code : il manquait = (
testchamp = 0) dans la fonction.
 
Dernière édition:

Discussions similaires

Réponses
11
Affichages
986

Statistiques des forums

Discussions
312 329
Messages
2 087 325
Membres
103 516
dernier inscrit
René Rivoli Monin