Code VBA filtre entre deux dates

Bonjour,

j'ai des tableaux croisés dynamiques dans un onglet je veux filtrer tous les TCD d'un onglet précis (car il y a des TCD dans les autres onglets) entre deux dates que je saisie dans une boite de dialogue
Est ce que un expert peut m'aider ?

Merci :-)

Configuration: Windows / Chrome 70.0.3538.102

2 réponses

  1. 1-Les dates je les ai pas en colonne mais en filtre sur chaque TCD
    Si vous avez ouvert le fichier joint, il y a un TCD et comme il est placé en colonne A et B, le filtre se fait sur la colonne A(dates), Tcd ou pas les données sont quand même en colonnes.

    2- J'ai plusieurs TCD et non pas un seul , il suffit de reproduire le programme pour chaque TCD

    3- J'ai deux cellules: une cellule ou je saisie la date de début et une autre cellule où je saisie la date de fin du filtre ces deux cellules sont dans la feuil1, le filtre sera fait en fonction de ces dates . Comme je ne connais la structure de votre fichier, j'ai mis des dates fixes. pour l'adapter à votre fichier , il faut remplacer les dates fixes par les cellules des dates debut et fin.

    4- tous les TCD sont dans un un autre onglet en l’occurrence feuil2 et je souhaite faire le filtre sur tous les TCD Peu importe ou se trouve les TCD, ça ne changera rien au fonctionnement, il suffit de mettre les bonnes indications.

    Si vous ne savez pas faire, déposez un fichier ayant la même structure , en prenant soin de remplacer auparavant les données confidentielles par des valeurs bidons.

    Cdlt
    0
    1. Bonjour,

      Un exemple, les dates et les données sont en colonnes I et J, le TCD en A et B

      Sub exclure()
          Application.ScreenUpdating = False
          ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("dates_x").ClearManualFilter ' on enlève les filtres précédents
          
          'Exlusion dans le TCD
          DateDeb = [I7] ' date de début choisie
          DateFin = [I16] ' date de fin choisie
          
          Set PosDeb = Columns("A").Find(DateDeb, LookIn:=xlValues) 'on recherche la position de la date de début dans le TCD
          vDeb = PosDeb.Row
          Set PosFin = Columns("A").Find(DateFin, LookIn:=xlValues) 'on recherche la position de la date de fin dans le TCD
          vFin = PosFin.Row
          
          DateDeb = Format([I7], "d/m/yyyy") 'on applique le format de date reconnaissable dans le TCD
          DateFin = Format([I16], "d/m/yyyy") 'on applique le format de date reconnaissable dans le TCD
          
          NbrVal = [A1000].End(xlUp).Row - 1 ' on compte le nombre de valeur dans le TCD
          For i = 2 To NbrVal
              If i < vDeb Or i - 1 > vFin Then ActiveSheet.PivotTables("Tableau croisé dynamique3").PivotFields("dates_x").PivotItems(i - 1).Visible = False  'on masque tout ce qui hors des dates choisies
          Next i
      End Sub
      


      Avec le fichier, filtre sur les dates comprises entre le 06/10/18 et le 16/01/18 (dates de début et de fin comprises)
      https://www.cjoint.com/c/HKBijNO3Cgw

      Ne reste plus qu'à l'adapter

      cdlt
      0
      1. Bonjour,

        Merci beaucoup pour votre réponse,

        La macro que vous m'avez proposée est difficile à adapter sur mon fichier je vais vous dire pour quoi:

        1-Les dates je les ai pas en colonne mais en filtre sur chaque TCD
        2- J'ai plusieurs TCD et non pas un seul
        3- J'ai deux cellules: une cellule ou je saisie la date de début et une autre cellule où je saisie la date de fin du filtre ces deux cellules sont dans la feuil1, le filtre sera fait en fonction de ces dates
        4- tous les TCD sont dans un un autre onglet en l’occurrence feuil2 et je souhaite faire le filtre sur tous les TCD

        Je ne vois pas trop comment je peux adapter votre code sur mon fichier pouvez-vous m'expliquer un peu plus

        Merci

        Bonne journée
        0