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 :

Filtre TCD VBA - Valeur de cellules multiples [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Par défaut Filtre TCD VBA - Valeur de cellules multiples
    Bonjour à tous,

    J'ai un soucis dans la gestion d'un TCD avec VBA, et je me permet de vous demander de l'aide :
    J'aimerai afficher comme filtres actifs, 5 dates correspondant à des valeurs de cellules d'une autre page.

    J'ai déjà fais des recherches mais n'ai trouvé que des solutions pour d'autres versions d'excel et avec une seule valeur de cellule.

    Par exemple, dans la page "Charge" en cellule "E3" j'ai la date "20/12/2016" qui est entrée. J'aimerai que dans mon TCD cette date apparaisse comme filtre de colonne. J'ai testé le code suivant qui me génère une erreur au niveau de la boucle If :

    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
    Private Sub Worksheet_Activate()
     
    Dim Pt As PivotTable
    Dim Pf As PivotField
    Dim Pi As PivotItem
     
        Set Pt = Me.PivotTables(1)
        Set Pf = Pt.PivotFields("Date de fin")
     
            For Each Pi In Pf.PivotItems
     
                If Pi = Sheets("Charge").Range("E3").Value Or Pi = Sheets("Charge").Range("F3").Value _
                Or Pi = Sheets("Charge").Range("G3").Value Or Pi = Sheets("Charge").Range("H3").Value _
                Or Pi = Sheets("Charge").Range("I3").Value Then
     
                    Pi.Visible = True
                    On Error Resume Next
     
                Else
                    Pi.Visible = False
                    On Error Resume Next
     
                End If
     
            Next Pi
     
    End Sub
    Je joins un fichier d'exemple avec le code afin que ce soit plus simple de compréhension.

    Je vous remercie d'avance et vous souhaite une bonne journée !
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Victo_cse Voir le message
    J'ai testé le code suivant qui me génère une erreur au niveau de la boucle If :
    Bonjour,

    Si vous faites un Msgbox sur vos Pi.Name, vous verrez que vos dates sont au format anglo-saxon MM/DD/YYYY.

    Essayez le code suivant :

    Nb : Je me suis permis de remplacer vos conditions If Then par un Select Case, plus facile à lire.

    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
     
    Private Sub Worksheet_Activate()
     
    Dim Pt As PivotTable
    Dim Pf As PivotField
    Dim Pi As PivotItem
     
        Set Pt = Me.PivotTables(1)
     
        Set Pf = Pt.PivotFields("Date de fin")
     
            With Sheets("Charge")
                 For Each Pi In Pf.PivotItems
                     ' MsgBox Pi.Name
                     ' MsgBox DateSerial(Year(Pi.Name), Month(Pi.Name), Day(Pi.Name))
                      Select Case DateSerial(Year(Pi.Name), Month(Pi.Name), Day(Pi.Name))
                             Case CDate(.Range("E3")), CDate(.Range("F3")), CDate(.Range("G3")), CDate(.Range("H3")), CDate(.Range("I3"))
                                  'MsgBox Pi.Value
                                  Pi.Visible = True
                             Case Else
                                  Pi.Visible = False
                      End Select
                 Next Pi
            End With
     
           Set Pt =Nothing
           Set Pf = Nothing
     
     
    End Sub
    Chez moi, ça fonctionne.

    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Par défaut
    Bonjour Eric,

    Tout d'abord, merci de votre aide. J'ai essayé votre code sur mon fichier, j’ai bien remarqué la différence entre les différentes valeurs de Pi, effectivement un cas est en date anglaise. Cependant il m'affiche tout de même une "erreur d'exécution 1004 : erreur définie par l'application ou par l'objet."
    En regardant de plus près il semblerait que c'est pour Pi = "13/12/2016", et c'est au niveau de la ligne .

    Est-ce que vous savez d'où cela pourrait venir ?

    Merci beaucoup et bonne journée
    Images attachées Images attachées  

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Victo_cse Voir le message
    En regardant de plus près il semblerait que c'est pour Pi = "13/12/2016", et c'est au niveau de la ligne Pi.Visible = True.
    Bonjour,

    J'avais oublié de préciser que j'avais dû reconstituer le TCD pour que cela fonctionne ( , ). Et effectivement, j'ai dû le refaire pour que cela fonctionne en appliquant mon code sur le TCD d'origine après l'avoir actualisé. Je pense également qu'il faudrait se limiter à l'aire du tableau plutôt que prendre les colonnes "B:E".

    Je crois me souvenir que Chris (78Chris), un des grands spécialistes des TCD de ce forum avait indiqué une méthode pour "remettre d'aplomb" le cache.

    Donc en recréant le TCD cela devrait fonctionner. Pour ne pas perdre la procédure dans le module, si vous devez refaire le TCD à chaque fois, pensez à vous servir d'un onglet modèle.

    Cordialement.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Par défaut
    Effectivement en ajoutant à la macro la suppression + création du TCD à chaque lancement avant les filtres, il semblerait que cela fonctionne !

    Je vous remercie grandement pour votre aide et vous souhaite une bonne journée

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

Discussions similaires

  1. Filtre TCD vba Avec deux date
    Par martined dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/02/2016, 23h34
  2. [XL-2010] Recuperation de la valeur d'un filtre TCD en VBA
    Par lcolombain dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/02/2012, 10h07
  3. Filtre VBA valeur cellule
    Par commetuveux dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/11/2009, 16h49
  4. [VBA/Excel] Supprimer valeur de cellule
    Par amd64 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/07/2006, 13h41
  5. [VBA]Affectation d'une valeur à une cellule par une fonction
    Par lallougri dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/02/2006, 15h24

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