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

Jerome - 16 oct. 2024 à 20:52
 Jerome - 17 oct. 2024 à 18:12

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

A voir également:

5 réponses

danielc0 Messages postés 1352 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 décembre 2024 155
16 oct. 2024 à 21:08

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
danielc0 Messages postés 1352 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 décembre 2024 155
17 oct. 2024 à 18:01

... Plus simple :

    PivField.AutoGroup

Daniel


1

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
danielc0 Messages postés 1352 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 25 décembre 2024 155
17 oct. 2024 à 12:59

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

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

Posez votre question

Bonjour,

Trop fortttttttttttt c'est exactement ça :)

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

Belle journée,

0