Création d'un TCD à partir de filtres déterminés par des listes déroulantes

Bonjour Messieurs,

Je me permets de poster ce message car je tente de faire fonctionner une macro dont l'objectif est de filtrer un fichier de données source afin de créer un TCD sur une nouvelle feuille avec l'application de filtres sélectionnés via une liste déroulante. En pratique: si je fais créer un TCD avec l'ensemble des données sur la page, cela se passe sans problème mais dès lors que je tente de le créer avec seulement les données visibles j'ai un message d'erreur m'expliquant "Erreur lors de la création du TCD. Vérifiez que la cellule de destination est vide et accessible"... alors que la cellule de destination est bien vide et accessible!

Voici le code que j'utilise actuellement:

Sub CreerTCD()
Dim wsFormulaire As Worksheet
Dim wsConso As Worksheet
Dim wsTCD As Worksheet
Dim region As String, typeParc As String
Dim derniereligne As Long
Dim pivotTableRange As Range
Dim pivotCache As pivotCache
Dim pivotTable As pivotTable
Dim critereRegion As String, critereTypeParc As String, critereNbPlaces As String
Dim plageDonnees As Range

Set wsFormulaire = ThisWorkbook.Sheets("Formulaire")
Set wsConso = ThisWorkbook.Sheets("Conso PDL")

critereRegion = wsFormulaire.Range("C4").Value ' Cellule C4 contient la Région
critereTypeParc = wsFormulaire.Range("C6").Value ' Cellule C6 contient le Type de parc

If critereRegion = "" Then
MsgBox "Veuillez sélectionner une Région dans la liste déroulante (C4).", vbCritical
Exit Sub
End If

If critereTypeParc = "" Then
MsgBox "Veuillez sélectionner un Type de parc dans la liste déroulante (C6).", vbCritical
Exit Sub
End If

wsConso.Rows(1).AutoFilter Field:=36, Criteria1:=LCase(critereRegion)
wsConso.Rows(1).AutoFilter Field:=7, Criteria1:=LCase(critereTypeParc)

derniereligne = wsConso.Cells(wsConso.Rows.Count, "A").End(xlUp).Row
If derniereligne < 2 Then
MsgBox "Aucune donnée valide dans la feuille 'Conso PDL'.", vbCritical
Exit Sub
End If

Set plageDonnees = wsConso.Range("A1:AE" & derniereligne)

Set wsTCD = ThisWorkbook.Sheets.Add
wsTCD.Name = "TCD_" & Format(Now(), "yyyyMMdd_HHmmss")

If Application.WorksheetFunction.Subtotal(103, wsConso.Range("A2:A" & derniereligne)) = 0 Then
MsgBox "Aucune donnée ne correspond aux critères de filtrage.", vbCritical
Exit Sub
End If

On Error Resume Next
Set plageDonnees = plageDonnees.SpecialCells(xlCellTypeVisible)
On Error GoTo 0

If plageDonnees Is Nothing Then
MsgBox "Aucune donnée visible après filtrage.", vbCritical
Exit Sub
End If

On Error Resume Next
Set pivotCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=plageDonnees)
On Error GoTo 0

If pivotCache Is Nothing Then
MsgBox "Erreur lors de la création du cache de données pour le TCD. Vérifiez les données filtrées.", vbCritical
Exit Sub
End If

On Error Resume Next
Set pivotTable = wsTCD.PivotTables.Add(pivotCache:=pivotCache, TableDestination:=wsTCD.Range("A5"), TableName:="TCD_" & Format(Now(), "yyyyMMdd_HHmmss"))
On Error GoTo 0

If pivotTable Is Nothing Then
MsgBox "Erreur lors de la création du TCD. Vérifiez que la cellule de destination est vide et accessible.", vbCritical
Exit Sub
End If

pivotTable.PivotFields("Nom du site").Orientation = xlRowField
pivotTable.PivotFields("Nom du site").Position = 1
pivotTable.PivotFields("Année").Orientation = xlColumnField
pivotTable.PivotFields("Année").Position = 1
pivotTable.PivotFields("Mois").Orientation = xlColumnField
pivotTable.PivotFields("Mois").Position = 2
pivotTable.AddDataField pivotTable.PivotFields("Consommation Hors IRVE"), "Somme de Consommation Hors IRVE", xlSum

pivotTable.PivotFields("Somme de Consommation Hors IRVE").NumberFormat = "#,##0.00"

MsgBox "Le TCD a été créé avec succès !"
End Sub

Merci par avance!

Bonjour

Les filtres ne sont pas pris en charge dans la source d'un TCD.

Utiliser PowerQuery si la source doit être filtrée et construire le TCD sur la requête

Un grand merci pour cette réponse rapide!
Je me disais pourtant que vu que les filtres réussissent à s'appliquer sur la feuille souhaitée, il serait possible de ne sélectionner que les données visibles pour la création dudit TCD?

Concernant PowerQuery: je ne sais absolument pas l'utiliser et j'ai l'impression (après recherches) que son utilisation implique quand même des interventions? L'objectif de mon fichier étant d'automatiser le tout pour des collègues n'étant pas aptes à créer des TCD afin que ces derniers puissent quand même extraire des données afin de les utiliser!

Merci encore,

Pour les filtres sur TCD, cela s'appelle les segments en français, l'objet VBA slicers et SlicerCache. Chercher sur internet : je n'ai pas personnellement pas maitrisé.

RE

PowerQuery, surtout restitué sous forme de TCD, est tout aussi automatique que VBA et plus sûr... (on utilise de plus en plus PowerQuery et de moins en moins VBA pour tout ce qui touche à l'exploitation de tables de données...)

Mais comme tu ne joins pas de fichier on ne peut te le démontrer...

Bonjour Messieurs,

Tu cherches à te couper d'une grande partie des passionné(e) de ce forum ?

Bonsoir 78chris

Je ne dis pas que powerQuery n'est pas le bon couteau suisse.

De plus, j'ai rencontré des problèmes a créer des tcd en vba. J'ai du recréee un code pour faire des regroupements de données selon deux niveaux de données en moins de 20 lignes. Je suis prêt à le faire évoluer pour sortir des résultats filtrés.

Mes pbs étaient je crois issus a des versions instables de Microsoft. A moins que c'était parce que je suis bloqué sur windows 10. Les kb...

J'aurai tendance à dire que powerquery est l'outil très bien pensé pour Excel. A chacun de se construire les outils qu'il maîtrise.

Francis

RE

Avant de maîtriser il faut commencer...

Beaucoup ici sont partis de rien et s'en servent aujourd’hui

Rechercher des sujets similaires à "creation tcd partir filtres determines listes deroulantes"