Tester la presence d'une valeur dans un PivotItems?

sim

XLDnaute Occasionnel
Bonjour a tous et a toutes,

J'ai remarquer que mon application avait un defaut de securite concernant son contenu.

J'ai 7 TCD qui prenne leur sources dans 4 onglet different ayant pour critere de page une liste de pays.

J'ai une listbox contenant une liste de pays. Cette liste prend sa source dans 1 des 4 onglets.

Par consequent les 3 autre onglet on besoin d'avoir exactement la meme liste de pays pour que les TCD reste d'aplomb.

Je m'explique: pour le moment si un TCD n'a pas le marche choisi par la listbox dans sa source, le TCD garde a l'affichage les donnees du pays precedemment choisi.

Par exemple je choisi la France, tout les TCD se mette sur la France: pas de probleme
Mais apres je choise l'Allemagne et la un des TCD n'a pas l'allemagne dans sa source (en fait pas d'info concernnt l'allemagne). J'ai donc 6 TCD qui presente des information de l'allemagne et un qui presente celle de la France.

Est il possible de comparer les colonne "pays" des onglet a la colonne "pays" qui sert de source a la list box. Et au cas ou il manque un pays annoncer a l'utilisateur:

"Aucune information n'est disponible pour l'Allemagne concernant les Royalty par exemple"

Le pays sera le resultat de la comparaison, la nature de l'information peut etre capturer grace au nom de l'onglet.

Le soucy qui decoule est que le TCD qui n'a pas le pays dans sa liste va quand meme evoluer. En tout cas il prendra le nom du pays (allemagne) en critere de pages mais avec les information de la france.

En effet les TCD evoluent grace a une variable "pays" qu'on associe au critere de page des TCD.

Il faut donc en quelque sorte bloquer le TCD qui ne contient pas l'allemagne

Est ce que quelqu'un peut m'aider a faire cela?

Je vous joint un petit exemple, pour mieux illustrer mon propos

Merci d'avance pour votre aide

Sim
 

Pièces jointes

  • exemple_forum.xls
    39.5 KB · Affichages: 83
  • exemple_forum.xls
    39.5 KB · Affichages: 79
  • exemple_forum.xls
    39.5 KB · Affichages: 92
Dernière édition:
G

Guest

Guest
Re : Comparer 1 colone de 4 onglet differents puis mettre en place action...besoin d'

Re, simon

A partir de ton exemple:

Code:
Function PivotItemExists(pvf As PivotField, strCaption As String) As Boolean
    Dim pvi As PivotItem
    
    For Each pvi In pvf.PivotItems
        If pvi.Caption = strCaption Then
            PivotItemExists = True
            Exit For
        End If
    Next
    
End Function

utilisation:

Code:
 Dim pvf As PivotField
        Set pvf = ActiveSheet.PivotTables("capital").PivotFields("Pays")
        If PivotItemExists(pvf, ListBox1.Text) Then pvf.CurrentPage = ListBox1.Text

Je te laisse imaginer une boucle pour parcourir tous tes PivotTables ainsi que la suite si le pivotItem n'existe pas.

A+

A+
 
G

Guest

Guest
Re : Comparer 1 colone de 4 onglet differents puis mettre en place action...besoin d'

Re,

Je ferais le test dans la macro "CreationTableaux" puisqu'il est impossible de cacher TOUS les pivotItems d'un TCD. Au moins 1 doit être visible.

Dans CreationTableaux:

Code:
    Set sh = ThisWorkbook.Sheets(SH_MARKET)
    sh.Range("A" & FIRST_LINE & ":I1000").Delete xlShiftUp
    CurrLine = FIRST_LINE
    For I = 0 To UBound(aNames)
        Set pvt = GetTcdByName(aNames(I))
        'On Error Resume Next
        If Not pvt Is Nothing Then
            If PivotItemExists(pvt.PivotFields("Market"), Market) Then
            '........



A+
 
Dernière modification par un modérateur:

sim

XLDnaute Occasionnel
Re : Comparer 1 colone de 4 onglet differents puis mettre en place action...besoin d'

Re, :)

Ok je vais tester cela

En attendant j'avait ecrit cela

Code:
Dim aNames As Variant
Dim I As Integer
Dim pvt As PivotTable
Dim pvf As PivotField
   
    ' if no market selected we exist the macro
    If Trim(Market) = "" Then Exit Sub
    
    

    ' table of Pivots names
    aNames = Split(PIVOT_NAMES, ",")

    On Error Resume Next
    
 
    'Update of Pivot
    
    With ThisWorkbook.Sheets(SH_PIVOT)
        'Boucler sur le tableau des noms de TCD
        'Loop in the pivot names table
        For I = 0 To UBound(aNames)
   
            'Get the matching pivot
            Set pvt = GetPivotByName(aNames(I))
            Set pvf = ActiveSheet.PivotTables("pvt").PivotFields("Pays")
            If Not pvt Is Nothing Then
                If PivotItemExists(pvf, ListBox1.Text) Then pvf.CurrentPage = ListBox1.Text
                Else
                MsgBox ("Information not available for [ListBox1.Text] market concerning [pvt]")
                End If
            End If
        Next I
    End With
    On Error GoTo 0

J'etais pas loin!!! :)

Merci..je reviens vers toi dans un instant

Sim
 
G

Guest

Guest
Re : Comparer 1 colone de 4 onglet differents puis mettre en place action...besoin d'

re,

Oui c'est ce qui me semblait plus logique au départ. Mais... comme tu as une macro qui ensuite copie tous tes tcd pour en faire des tableaux réarrangés, tu aurais eu un tableau avec des données fausses et non mises à jours.

A+
 

sim

XLDnaute Occasionnel
Re : Comparer 1 colone de 4 onglet differents puis mettre en place action...besoin d'

Re,

Avant de tester quoique ce soit, je ne comprend bien ce que fait la fonction:

Elle renvois True si le marche choisi dans la ListBox existe dans la liste du Pivot.

Il faut donc programmer l'action a faire au cas ou elle renverrai False non?

Sim
 
G

Guest

Guest
Re : Comparer 1 colone de 4 onglet differents puis mettre en place action...besoin d'

Re,

He oui, t'as tout compris. C'est pourquoi, il faut tester au moment de la création des tableaux.

Au fait, change le titre de ta discussion, qui ne correspond pas du tout à son contenu!

A+
 

sim

XLDnaute Occasionnel
Re : Comparer 1 colone de 4 onglet differents puis mettre en place action...besoin d'

Ok,

mais quelle est l'action a mettre en place pour empecher que le TCD qui ne contient pas le pays ne soit pas decaler par la suite..

Car si on test a la creation des tableau, cela veut dire que le TCD lui a deja evoluer. Et pour reprendre mon exemple, l'espagne parlera toujours allemand, cela s'enregistre dans le cache du TCD....

Sim
 
G

Guest

Guest
Re : Comparer 1 colone de 4 onglet differents puis mettre en place action...besoin d'

Re,

Alors je reprends.
Dans la macro creationTableaux:

Code:
    CurrLine = FIRST_LINE
            For I = 0 To UBound(aNames)
                       Set pvt = GetTcdByName(aNames(I))
                       If Not pvt Is Nothing Then
                             'Faire le test ICI
                             If PivotItemExists(pvt.PivotFields("Market"), Market) Then
 
                                 'Les lignes de création des tableaux
 
                                 'Recalculer CURR_LINE suivant ce cas
                             Else
                                ' Si le  PivotItem n'existe pas suggestion:
                                 'créer un tableau vide ici
                                 'Eventuellement à en copiant/collant un tableau modèle (caché sur feuille "RAW_Pivot"
                                 'CURR_LINE=CURR_LINE+LignesDuTableauCopierColler +2
                            End IF
            '........

Voili, voilou.

A+
 

Discussions similaires

Réponses
1
Affichages
245
Réponses
2
Affichages
190

Statistiques des forums

Discussions
314 654
Messages
2 111 598
Membres
111 215
dernier inscrit
fateh