mise à jour de TCD

JEJAB

XLDnaute Nouveau
Bonjour,

Voilà, je rencontre un problème dans la mise à jour d'un TCD.
J'ai une combobox qui appelle par l'intermédiaire de code VBA une autre nommée Macro2 qui doit mettre à jour 3 TCD.
Le code utilisé est le suivant:

- pour la combobox

Private Sub ComboBox1_Change()
Call Macro2
End Sub

- pour la Macro2

Sub Macro2()

Dim MaCel As Range
Set MaCel = Range("V5")

ActiveSheet.Unprotect
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Numéro RNE"). _
CurrentPage = "" & MaCel.Value
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Numéro RNE"). _
CurrentPage = "" & MaCel.Value
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub

Chaque fois que je lance l'action par la combobox, la mise à jour se fait apparamment sur les 3 TCD mais se termine par un affichage:

Erreur d'execution '1004':
Impossible de lire la propriété pivotFields de la classe PivotTable.

Avez vous une explication et une solution pour régler ce problème?
Merci d'avance
 

Bebere

XLDnaute Barbatruc
Re : mise à jour de TCD

bonjour Jejab
il faut un argument chaîne(string)
Sub Macro2()

Dim MonChoix As String

MonChoix = Range("V5")

ActiveSheet.Unprotect
ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotFields("Numéro RNE"). _
CurrentPage =MonChoix
ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Numéro RNE"). _
CurrentPage =MaChoix
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub

à bientôt
 

JEJAB

XLDnaute Nouveau
Re : mise à jour de TCD

Merci Bebere de cette réponse, cependant cela ne règle pas mon problème. Le code VBA modifié conduit au même affichage en fin de macro:

Erreur d'execution '1004':
Impossible de lire la propriété pivotFields de la classe PivotTable.

De plus, je souhaite pouvoir utiliser la cellule liée pour entrer directement une valeur et afficher dans la combobox la correspondance à cette valeur. Or avec la déclaration String, cela ne fonctionne pas!

Que faire???
Merci de votre aide.
 

Dan

XLDnaute Barbatruc
Re : mise à jour de TCD

Bonjour,

Essaye ce code
Code:
Sub Macro2()
'Macro par Dan pour Jejab le 11/1/08
'http://www.excel-downloads.com/forum/88245-mise-jour-de-tcd.html
Dim a As Variant
Dim choix As String
a = "(Tous)"
choix = Range("V5")
On Error Resume Next
With ActiveSheet
    .Unprotect
    .PivotTables("Tableau croisé dynamique2").PivotFields("Numéro RNE").CurrentPage = a
    .PivotTables("Tableau croisé dynamique3").PivotFields("Numéro RNE").CurrentPage = a
    .PivotTables("Tableau croisé dynamique2").PivotFields("Numéro RNE").CurrentPage = choix
    .PivotTables("Tableau croisé dynamique3").PivotFields("Numéro RNE").CurrentPage = choix
    .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End With
End Sub
Amicalement

Dan

Edition : si tu as un pb, essaye aussi en remplaçant TOUS par ALL.
 
Dernière édition:

AliceC

XLDnaute Nouveau
Re : mise à jour de TCD

Bonjour à tous,

J'ai un peu le même problème mais la solution de Dan ne fonctionne pas sur mon fichier,
l'erreur n'apparait plus mais la mise à jour ne se fait pas.

Je vous joint un fichier que j'ai construit pour faire mes tests qui représente un peu le vrai fichier que j'utilise, sauf qu'il y normalement 50 onglets.
Il y a des onglets d'analyse au début, puis un onglet avec des graphiques puis un onglet avec les TCD d'analyse. Les onglets s'affichent en fonction de l'analyse choisit (macro) au premier onglet.

Les TCD prennent leur source sur un autre fichier excel alimenté au fur et à mesure.

J'ai changé de méthode au moins 10 fois mais je ne vois pas où est l'erreur...
Si quelqu'un peut m'aider, merci.

Alice
 

ielharras

XLDnaute Nouveau
Re : mise à jour de TCD

Moi aussi j'ai la même problème, pourriez vous m'aider svp, j'ai récupéré un code qui fonctionne bien sous excel 2010 32bits mais si je teste sur un ordinateur qui a excel 2010 64bits ça ne fonctionne pas! il m'affiche " Erreur d'exécution '1004' Impossible de lire la propriété PivotFields de la classe PivotTavle "

voici le code:

Code:
Private Sub Worksheet_Activate()

    If Application.WorksheetFunction.CountIf(wksht_passport_form.Columns("G"), True) = 0 Then
        wksht_passport_form.Activate
        MsgBox "Aucune compétence applicable au consultant n'a été définie.", vbCritical
        Exit Sub
    End If
        
    If Application.WorksheetFunction.CountIf(wksht_passport_form.Columns("K"), True) = 0 Then
        wksht_radar_form.ChartObjects("grph_radar_avcmt_form").Visible = False
        MsgBox "Attention : Aucun besoin de formation n'a été définie pour ce consultant. Le graphique relatif à l'avancement de la formation sera donc masqué.", vbExclamation

    Else
        wksht_radar_form.ChartObjects("grph_radar_avcmt_form").Visible = True
    End If
    
    Application.ScreenUpdating = False

    wksht_passport_form.Unprotect Password:=mdp_protect
    
    Call AdjustPivotDataRange(wksht_passport_form, _
                              wksht_tcd_formation, _
                              wksht_passport_form.Range("A" & ligne_debut_tab_passeport), _
                              "TCD_form_niv_cslt")

    Call AdjustPivotDataRange(wksht_passport_form, _
                              wksht_tcd_formation, _
                              wksht_passport_form.Range("A" & ligne_debut_tab_passeport), _
                              "TCD_avancement_formation")
    With wksht_tcd_formation
        .Unprotect Password:=mdp_protect
        .PivotTables("TCD_form_niv_cslt").PivotCache.Refresh
        .PivotTables("TCD_avancement_formation").PivotCache.Refresh
        
        If Application.WorksheetFunction.CountIf(wksht_passport_form.Columns("G"), True) > 0 Then
            .PivotTables("TCD_form_niv_cslt").PivotFields("     Applicabilité consultant").ClearAllFilters
            .PivotTables("TCD_form_niv_cslt").PivotFields("     Applicabilité consultant").CurrentPage = "TRUE"
            .PivotTables("TCD_avancement_formation").PivotFields("     Applicabilité consultant").ClearAllFilters
            .PivotTables("TCD_avancement_formation").PivotFields("     Applicabilité consultant").CurrentPage = "TRUE"
        Else
        End If
        If Application.WorksheetFunction.CountIf(wksht_passport_form.Columns("K"), True) > 0 Then
            .PivotTables("TCD_avancement_formation").PivotFields("     Consultant à former").ClearAllFilters
            .PivotTables("TCD_avancement_formation").PivotFields("     Consultant à former").CurrentPage = "TRUE"
        End If
    End With
    
    wksht_passport_form.Protect Password:=mdp_protect, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
    wksht_tcd_formation.Protect Password:=mdp_protect, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
    
    Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 337
Membres
103 524
dernier inscrit
Smile1813