VBA - Date dans un tcd en vba vs date dans un tcd manuel

Jerome -  
 Jerome -

Bonjour la communauté,

J’ai une vba qui fait un TCD, cependant, j'ai une erreur lorsque que je positionne Date Entrée - Venue/Passage dd/mm/yyyy dans colonne : En effet, j’ai remarqué que quand je fais hors vba (donc manuellement) :

Ajouter "Date Entrée - Venue/Passage dd/mm/yyyy", dans colonne ça se divise en "année ; trimestre et Date Entrée - Venue/Passage dd/mm/yyyy,

Mais quand je le fais via le code VBA ça met uniquement Date Entrée - Venue/Passage dd/mm/yyyy dans colonne ce qui génère un tableau avec toutes les date uniquement, ce qui ne me convient pas. Sauriez vous pourquoi et comment corriger cela s’il vous plait ?

Voici le code VBA :

' Ajouter "Date Entrée - Venue/Passage dd/mm/yyyy" aux colonnes
    Set PivField = PT.PivotFields("Date Entrée - Venue/Passage dd/mm/yyyy")
    PivField.Orientation = xlColumnField
    
' Désactiver les formats automatiques (comme le trimestre)
    On Error Resume Next
    PivField.ClearAllFilters
    On Error GoTo 0
    
' Vérifier si le champ est de type date et activer le groupement par années et mois
    If IsDate(wsIEP.Range("A2").Value) Then
        PivField.PivotItems.Group Start:=True, End:=True, Periods:=Array(False, False, False, True, True) ' Année et Mois
    End If

Merciiiiiiiiiiiiii pour votre aide,
Windows / Chrome 129.0.0.0

5 réponses

  1. danielc0 Messages postés 2180 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Peux-tu partager le classeur en anonymisant les données confidentielles
    Pour le partager, clique sur :
    https://www.cjoint.com/
    Clique sur le bouton "parcourir". Choisis le fichier à partager. Dans le bas de la page, clique sur le bouton "Créer le lien cjoint". Copie le lien affiché et colle-le dans ta réponse.

    Daniel


    1
  2. danielc0 Messages postés 2180 Date d'inscription   Statut Membre Dernière intervention   287
     

    ... Plus simple :

        PivField.AutoGroup
    

    Daniel


    1
  3. Jerome
     

    Bonjour,

    Bien sûr et merci du temps consacré:

    En suivi(2) le résultat que j'obtiens en le faisant manuellement en sachant que normalement je retirerais trimestre

    Il s'agit de la macro CreerTCDsuivi

    https://www.cjoint.com/c/NJqucYq4RK2

    Merciiiiiiiiiiiiii beaucoup

    0
  4. danielc0 Messages postés 2180 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Essaie :

    Sub CreerTCDSuivi()
    
        Dim wsSuivi As Worksheet
        Dim wsIEP As Worksheet
        Dim DerniereLigne As Long
        Dim DerniereColonne As Long
        Dim PlageTCD As Range
        Dim PTCache As PivotCache
        Dim PT As PivotTable
        Dim PivField As PivotField
        
        ' Définir les feuilles
        Set wsSuivi = Worksheets("suivi")
        Set wsIEP = Worksheets("IEP")
        
        ' Trouver la dernière ligne et la dernière colonne remplie dans la feuille IEP
        DerniereLigne = wsIEP.Cells(wsIEP.Rows.Count, 1).End(xlUp).Row
        DerniereColonne = wsIEP.Cells(1, wsIEP.Columns.Count).End(xlToLeft).Column
        
        ' Définir la plage de données pour le TCD
        Set PlageTCD = wsIEP.Range(wsIEP.Cells(1, 1), wsIEP.Cells(DerniereLigne, DerniereColonne))
        
        ' Effacer tout TCD existant sur la feuille "suivi"
        wsSuivi.Cells.Clear
        
        ' Créer le cache de pivot table
        Set PTCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PlageTCD)
        
        ' Créer le tableau croisé dynamique dans la cellule A1 de la feuille "suivi"
        Set PT = PTCache.CreatePivotTable(TableDestination:=wsSuivi.Cells(1, 1), TableName:="TCDSuivi")
        
        ' Ajouter le champ "Gestionnaire" aux lignes et filtrer pour exclure "(vide)"
        Set PivField = PT.PivotFields("Gestionnaire")
        PivField.Orientation = xlRowField
    
    
        ' Ajouter le champ "Etat de la facturation" aux lignes et appliquer les filtres
        Set PivField = PT.PivotFields("Etat de la facturation")
        PivField.Orientation = xlRowField
        With PivField
            .PivotItems("Complètement facturé : pas de nouvelles séances").Visible = False
            .PivotItems("Totalement facturé mais bloqué en P").Visible = False
            .PivotItems("Reste des séances à facturer").Visible = False
        End With
        
        ' Ajouter "Date Entrée - Venue/Passage dd/mm/yyyy" aux colonnes
        Set PivField = PT.PivotFields("Date Entrée - Venue/Passage dd/mm/yyyy")
        PivField.Orientation = xlColumnField
        PivField.DataRange.Cells(1).Group Start:=True, End:=True, Periods:=Array(False, False, False, _
            False, False, False, True)
        ' Désactiver les formats automatiques (comme le trimestre)
        On Error Resume Next
        PivField.ClearAllFilters
        On Error GoTo 0
        
        ' Vérifier si le champ est de type date et activer le groupement par années et mois
        If IsDate(wsIEP.Range("A2").Value) Then
            PivField.PivotItems.Group Start:=True, End:=True, Periods:=Array(False, False, False, True, True) ' Année et Mois
        End If
        
        ' Ajouter "IEP - Venue/Passage" dans les valeurs et paramétrer comme Nombre
        Set PivField = PT.PivotFields("IEP - Venue/Passage")
        PivField.Orientation = xlDataField
        PivField.Function = xlCount ' Nombre de "IEP - Venue/Passage"
        PivField.NumberFormat = "#,##0" ' Format du nombre
        
    End Sub
    

    J'ai ajouté :

        PivField.DataRange.Cells(1).Group Start:=True, End:=True, Periods:=Array(False, False, False, _
            False, False, False, True)
    

    Après :

        Set PivField = PT.PivotFields("Date Entrée - Venue/Passage dd/mm/yyyy")
        PivField.Orientation = xlColumnField
    

    Daniel


    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Jerome
     

    Bonjour,

    Trop fortttttttttttt c'est exactement ça :)

    Je ne sais comment vous remercier, mais merci ++++++++++++++++++++

    Belle journée,

    0