IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

ERREUR 1004 : impossible de définir la propriété visible de la classe pivotitem


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Amateur de programmation
    Inscrit en
    Février 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Amateur de programmation

    Informations forums :
    Inscription : Février 2015
    Messages : 21
    Points : 6
    Points
    6
    Par défaut ERREUR 1004 : impossible de définir la propriété visible de la classe pivotitem
    Bonjour,

    N'ayant pas trouvé la solution à mon problème, je réalise donc mon premier POST sur ce forum. Merci d'avance pour votre temps

    Dans le fichier joint, j'ai 3 feuilles :

    - Saisie qui contient mes données,
    - une page de Configuration,
    - le graphique issu d'un TCD

    Mon problème est le suivant :

    Lorsque j'exécute la Macro de la feuille "Graphique Salarié", la macro me renvoie le message suivant : "erreur exécution 1004 impossible de définir la propriété visible de la classe pivotitem".

    J'ai remarqué que le problème survient au moment où elle commence à sélectionner les items correspondant à la plage de date sélectionnée (en rouge dans la macro ci-dessous !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Dim datetest As Double, Datedeb As Double, Datefin As Double
    Application.ScreenUpdating = True
    nomsal = CombSalarié.Text
    
        Sheets("Graphique Salarié").Visible = True
        Sheets("Menu").Visible = False
    
        Sheets("Graphique Salarié").Select
        ActiveWorkbook.RefreshAll
        
        ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Tâches").ClearAllFilters
        ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Tâches").PivotFilters.Add Type:=xlCaptionDoesNotEqual, Value1:="(vide)"
        ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Salarié"). _
            CurrentPage = nomsal
    
    DD = Format(Me.DTPicker1, "dd/mm/yyyy")
    DF = Format(Me.DTPicker2, "dd/mm/yyyy")
    
        ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Date"). _
            ClearAllFilters
            Datedeb = CDate(DD)
            Datefin = CDate(DF)
        ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Date"). _
            CurrentPage = "(All)"
                   
        With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields( _
            "Date")[/COLOR]
    
            .PivotItems(1).Visible = True
            For i = 2 To .PivotItems.Count
            .PivotItems(i).Visible = False
            Next
    
            For i = 2 To .PivotItems.Count
            MsgBox .PivotItems.Count
            datetest = CDate(Format(.PivotItems(i).Value, "DD/MM/YYYY")): MsgBox datetest
            If datetest < Datedeb Or datetest > Datefin Then .PivotItems(i).Visible = False Else .PivotItems(i).Visible = True
            Next
            datetest = CDate(Format(.PivotItems(1).Value, "DD/MM/YYYY")): MsgBox datetest
        If datetest >= Datedeb Then .PivotItems(1).Visible = True Else .PivotItems(1).Visible = False
        End With
    Application.ScreenUpdating = True
    Suis-je suffisamment clair pour qu'une âme charitable puisse m'aider ?

    Merci beaucoup.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Un problème que je vois c'est qu'il y a des dates vides donc pas valides.
    Il faudrait que tu vérifies si IsDate(ton filtre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            If IsDate(.PivotItems(i).Value) Then
               datetest = CDate(Format(.PivotItems(i).Value, "DD/MM/YYYY"))  ': MsgBox datetest
               If datetest < Datedeb Or datetest > Datefin Then .PivotItems(i).Visible = False Else .PivotItems(i).Visible = True
            End If
    MPi²

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Amateur de programmation
    Inscrit en
    Février 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Amateur de programmation

    Informations forums :
    Inscription : Février 2015
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Merci parmi

    Oui, tu as raison, il y a des dates de vides et Je ne comprends absolument pas pourquoi !
    Il semblerai que les items des filtres ne correspondent pas aux données de la source.


    J'ai intégré ton code mais j'ai toujours la même erreur. En fait chez moi, l'erreur arrive bien en amont de cette ligne de code. Elle arrive dès que le programme exécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .PivotItems(1).Visible = True
    Je nage dans la semoule.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Amateur de programmation
    Inscrit en
    Février 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Amateur de programmation

    Informations forums :
    Inscription : Février 2015
    Messages : 21
    Points : 6
    Points
    6
    Par défaut
    Bon, j'ai finalement trouvé une solution à travers le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    Sheets("Graphique Salarié").Select
    ActiveWorkbook.RefreshAll
     
    'ActiveSheet.PivotTables("Tableau croisé dynamique3").ManualUpdate = True
    'ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Date").ShowAllItems = True
     
    DD = Format(Me.DTPicker1, "dd/mm/yyyy")
    DF = Format(Me.DTPicker2, "dd/mm/yyyy")
     
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Date"). _
            ClearAllFilters
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Date"). _
            ShowAllItems = False
     
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Date"). _
            CurrentPage = "(All)"
     
        With ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Date")
            ActiveSheet.PivotTables("Tableau croisé dynamique3").NullString = "(Blank)"
            ActiveSheet.PivotTables("Tableau croisé dynamique3").DisplayNullString = False
     
            For Each Pi In .PivotItems
                Pi.Name = Pi.SourceNameStandard
                MsgBox Pi.Name
                If Format(Pi.Name, "dd/mm/yyyy") >= DD And Format(Pi.Name, "dd/mm/yyyy") <= DF Then .PivotItems(Pi.Name).Visible = True Else .PivotItems(Pi.Name).Visible = False
            Next Pi
     
        End With
     
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Salarié"). _
            CurrentPage = nomsal
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Tâches").ClearAllFilters
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("Tâches").PivotFilters.Add Type:=xlCaptionDoesNotEqual, Value1:="(vide)"
    ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotCache.Refresh
     
    Range("C10").Activate
     
    MenuGraphique.Hide
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
     
    End Sub
     
    Private Sub CommandButton4_Click()
     
     
    'If CheckBox1 = True Then nomsal = "(Tous)"
     
    Date1 = DTPicker1.Value - 1
    Date2 = DTPicker2.Value
     
    nomsal = CombSalarié.Text
     
     
    '    Sheets("Activité Salarié").Visible = True
    '    Sheets("Menu").Visible = False
     
        Sheets("Activité Salarié").Select
        ActiveWorkbook.RefreshAll
     
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
     
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date").ClearAllFilters
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date").PivotFilters.Add Type:=xlCaptionDoesNotEqual, Value1:="(vide)"
     
         ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Salarié"). _
            CurrentPage = nomsal
        Range("C10").Select
     
     
    Dim Pvt As PivotTable
    Dim Fld As PivotField
    Dim DD As String, DF As String
    i = i + 1
    DD = Format(Me.DTPicker1 - 1, "dd/mm/yyyy")
    DF = Format(Me.DTPicker2, "dd/mm/yyyy")
    Set Pvt = Sheets("Activité Salarié").PivotTables("Tableau croisé dynamique1")
    Set Fld = Pvt.PivotFields("Date")
    Fld.ClearAllFilters
    Fld.PivotFilters.Add Type:=xlDateBetween, Value1:=DD, Value2:=DF
    Set Fld = Nothing
    Set Pvt = Nothing
     
    MenuGraphique.Hide
    End Sub

    L'erreur 1004 à disparue mais un autre pb apparaît... et j'ouvre un nouveau post car le sujet n'est plus le même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/08/2014, 18h04
  2. [XL-2007] Erreur 1004: Impossible de définir la propriété
    Par Leylone dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/06/2014, 15h13
  3. [Toutes versions] Impossible de définir la propriété Visible de la classe Sheets
    Par asgarh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/06/2010, 16h00
  4. Impossible de définir la propriété visible
    Par Kalvin_20 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/06/2008, 13h37
  5. Réponses: 1
    Dernier message: 21/08/2007, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo