XL 2013 Chronologie tableau dynamique

sendra

XLDnaute Nouveau
Bonjour Forum,
y' a't il possibilité de remplacer une chronologie par une calandrer pour faire le filtre dans un tableau dynamique ?
j'ai inséré une calandrer mais j'ai pas l'astuce pour faire une connexion avec mon tableau
1650234376018.png
 

chris

XLDnaute Barbatruc
Bonjour

Le problème des calendriers ont qu'ils sont souvent propres à une version Excel et la plupart des compléments ont un code VBA vérouillé.

Ta version est ancienne mais microsoft ne fournit plus de contrôle calendrier sur 365.

Ils insèrent une date dans une cellule : on peut théoriquement utiliser le Worksheet change pour récupérer le changement de date et, via une boucle, filtrer un champ date du TCD ou un segment date associé.

A noter qu'une boucle est moins efficace qu'un segment.

J'ai testé 2 compléments calendrier : l'un permet de le faire (samradapps_datepicker), l’autre de Vertex42.com, fourni sur le store Microsoft, complique les choses car son code interfère...
 

sendra

XLDnaute Nouveau
Bonjour

Le problème des calendriers ont qu'ils sont souvent propres à une version Excel et la plupart des compléments ont un code VBA vérouillé.

Ta version est ancienne mais microsoft ne fournit plus de contrôle calendrier sur 365.

Ils insèrent une date dans une cellule : on peut théoriquement utiliser le Worksheet change pour récupérer le changement de date et, via une boucle, filtrer un champ date du TCD ou un segment date associé.

A noter qu'une boucle est moins efficace qu'un segment.

J'ai testé 2 compléments calendrier : l'un permet de le faire (samradapps_datepicker), l’autre de Vertex42.com, fourni sur le store Microsoft, complique les choses car son code interfère...
Merci encore fois chris
donc c'est possible avec les macro?
 

chris

XLDnaute Barbatruc
RE

La cellule qui reçoit la date est nommée Choix

Ici synchro avec un segment basé sur le champ Date de commande (placé hors vue).

Module placé dans l'onglet portant la cellule Choix et le TCD
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Trouve As Boolean
 
    If Intersect(Target, [Choix]) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    ActiveWorkbook.SlicerCaches("Segment_Date_commande").ClearManualFilter
    If [Choix] = "" Then Exit Sub
    For Each SI In ActiveWorkbook.SlicerCaches("Segment_Date_commande").SlicerItems
        If SI.Value = Format([Choix], "dd/mm/yyyy") Then
            On Error GoTo fin
            Application.EnableEvents = False
            SI.Selected = True
            Trouve = True
        Else
            SI.Selected = False
        End If
    Next
    If Trouve = False Then MsgBox "Date introuvable"
fin:
    Application.EnableEvents = True
End Sub

A noter qu'il est préférable de désactiver la mémorisation des données du TCD afin que le cache soit nettoyé lors de l'actualisation et le segment purgé des dates disparues de la source.
 
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour

Si tu donnais les infos dès le début on n'aurait pas à recommencer x fois... :mad:

Les segments de TCD basés sur le modèle de données PowerPivot ne fonctionnent pas comme les segments de TCD classiques

Ceci devrait fonctionner si le segment a bien le nom Segment_Date
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
 
    If Intersect(Target, [Choix]) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    With ActiveWorkbook.SlicerCaches("Segment_Date")
        .ClearManualFilter
        If [Choix] <> "" Then
            On Error GoTo fin0
            .VisibleSlicerItemsList = Array("[Base].[Date].&[" & Format([Choix].Value, "yyyy-mm-dd") & "T00:00:00]")
        End If
    End With

    GoTo Fin2
fin0:
    MsgBox "Date introuvable"
Fin2:
    Application.EnableEvents = True
End Sub
 

Statistiques des forums

Discussions
312 472
Messages
2 088 710
Membres
103 930
dernier inscrit
Jibo