Création de feuilles selon résultat TCD

Bonjour,

De nouveau, je sollicite votre aide et générosité comme d'habitude

J'ai un TCD qui est fait selon une base variable et volumineuse dans l'onglet 'TCD_GLOBAL' dans le fichier ci-joint

mon besoin est de créer des nouvelles feuilles selon le filtre de ce TCD Global : par exemple dans le fichier ci-joint, je veux créer des feuilles en automatique selon la condition suivante : Le filtre de la colonne W commence par 'UR' (le nombre de feuilles à créer est variable selon le nombre de filtres commençant par UR)

Ensuite chaque feuille doit être nommée selon son filtre...

J'espère que j'étais clair, si non n'hésitez pas à me demander plus de détails et/ou de précisions ?

Ci-joint un fichier exemple simplifié qui contient des données non réelles et moins volumineux que la réalité

PS: Les feuilles en vert représente le résultat souhaité mais en automatique via une macro

Pouvez vous m'aider svp ?

D'avance, merci de votre aide

A+

Bonjour,

Me redire si cette proposition répond à tes attentes.

Cdlt.

Option Explicit
Option Private Module

Public Sub CreateWorksheets()
Dim wb As Workbook
Dim ws As Worksheet, wsPT As Worksheet
Dim PT As PivotTable
Dim pi As PivotItem

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With
    '----------------------------------------------------------------
    Set wb = ActiveWorkbook
    Set wsPT = wb.Worksheets("TCD_GLOBAL")
    Set PT = wsPT.PivotTables(1)
    '----------------------------------------------------------------
    For Each ws In wb.Worksheets
        If Left(ws.Name, 3) = "UR_" Then ws.Delete
    Next ws

    Application.DisplayAlerts = True
    '----------------------------------------------------------------
    For Each pi In PT.PivotFields("W").PivotItems
        If Left(pi.Name, 3) = "UR_" Then
            PT.PivotFields("W").CurrentPage = pi.Name
            wsPT.Copy after:=wb.Worksheets(Worksheets.Count)
            With ActiveSheet
                .Name = pi.Name
                .Tab.ColorIndex = xlColorIndexNone
                .Shapes.Range(Array("cmdCreateWorksheets")).Delete
            End With
        End If
    Next pi
    '----------------------------------------------------------------
    PT.PivotFields("W").ClearAllFilters
    '----------------------------------------------------------------
    Set PT = Nothing
    Set wsPT = Nothing
    Set wb = Nothing

End Sub

Bonjour jean-Eric et merci beaucoup pour votre réponse

je viens de la tester sur le fichier test ça marche mais en copiant le code dans un classeur réel et l'adaptant par rapport aux noms des filtres et feuilles, ça ne fonctionne plus

je pense que le problème est lié à la commande 'CreateWorksheets' ?

Pouvez vous me dire comment corriger ce point et si possible rendre la macro publique pour qu'on peut l'exécuter directement à partir du menu 'Développeur- Macro'

Merci d'avance

Re,

Je viens de découvrir un autre problème à savoir si mon filtre ne comporte pas des valeurs qui commencent par UR_ (ce qui est possible parfois puisque j'ai multiplié la macro plusieurs fois en modifiant à chaque fois le filtre dont j'ai besoin), la macro me créer quand même des onglets !!

je pense qu'elle a gardé les valeurs du TCD en cache ?

est-il possible de la modifier pour ne pas créer de feuille si aucun filtre correspondant au critère et si possible avoir un petit message indiquant qu'aucun filtre correspond au critère ?

merci d'avance

Bonjour,

Voir la procédure modifiée en prenant en compte tes remarques et en fonction des éléments fournis.

Cdlt.

Option Explicit
'Option Private Module

Public Sub CreateWorksheets()
Dim wb As Workbook
Dim ws As Worksheet, wsPT As Worksheet
Dim PT As PivotTable
Dim pi As PivotItem

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With
    '----------------------------------------------------------------
    Set wb = ActiveWorkbook
    Set wsPT = wb.Worksheets("TCD_GLOBAL")
    Set PT = wsPT.PivotTables(1)
    '----------------------------------------------------------------
   With PT.PivotCache
        .MissingItemsLimit = xlMissingItemsNone
        .Refresh
    End With
    '----------------------------------------------------------------
    For Each ws In wb.Worksheets
        If Left(ws.Name, 3) = "UR_" Then ws.Delete
    Next ws
    Application.DisplayAlerts = True
    '----------------------------------------------------------------
    For Each pi In PT.PivotFields("W").PivotItems
        If Left(pi.Name, 3) = "UR_" Then
            PT.PivotFields("W").CurrentPage = pi.Name
            wsPT.Copy after:=wb.Worksheets(Worksheets.Count)
            With ActiveSheet
                .Name = pi.Name
                .Tab.ColorIndex = xlColorIndexNone
                .Shapes.Range(Array("cmdCreateWorksheets")).Delete
            End With
        End If
    Next pi
    '----------------------------------------------------------------
    PT.PivotFields("W").ClearAllFilters
    '----------------------------------------------------------------
    Set PT = Nothing
    Set wsPT = Nothing
    Set wb = Nothing

End Sub

Bonjour Jean-Eric,

Merci beaucoup

votre nouveau code me convient bien

PS: j'ai une petite question : est-il possible de rajouter dans le code une instruction qui permet de colorer les sous totaux et le total général de chaque TCD en couleur grise ?

Merci et excellente journée

A+

Bonjour,

Modifie ce que tu veux dans le TCD global, et vois le résultat après exécution de la procédure.

Cdlt.

Effectivement, je garde la même mise en forme de mon TCD lors de la création des nouveaux onglets par contre je la perds lorsque j'actualise ma base de données et du coup mon TCD global

Y a t-il un moyen pour conserver cette mise en forme ?

merci

Bonsoir jean-Eric,

Je me permets de revenir vers vous parce que j'ai fais une évolution de mon fichier et du coup votre macro nécessite une petite évolution pour fonctionner correctement

je m'explique : En fait, pour des besoins fonctionnels, j'ai rajouté un autre TCD dans le même onglet 'TCD_GLOBAL' qui a le même nom du filtre (CLE dans mon fichier ci-joint), du coup lorsque j'exécute votre macro, un seul TCD est filtré (le 2ème)

mon souhait est que les 2 tableaux soient filtrés avec le même filtre et si la valeur d'un filtre existe dans un seul TCD, une feuille est quand même crée mais avec un seul TCD (l'autre peut rester mais vide)

ci-joint mon fichier mis à jour pour mieux comprendre

est-il possible de faire cette évolution ?

D'avance, merci beaucoup pour votre aide qui était très précieux pour moi

A+

Bonsoir,

pas très claire la demande, mais.

A tester.

Cdlt.

Bonjour Jean-Eric et merci beaucoup pour votre réponse rapide

je viens de tester votre macro et ça répond à mon besoin mais juste une petite remarque concernant le cas lorsque la Clé existe dans le TCD 1 mais pas dans le TCD 2 (ou vice versa), je remarque que le filtre reste à 'tous' or qu'il doit être à 'aucun' (ou supprimer complètement) ==> voir onglet en jaune dans le fichier ci-joint

j'espère que ma demande est plus clair maintenant

merci infiniment

Bonjour,

J'ai considéré que le TCD 1 était maître. Le TCD 2 est affiché s'il comprend une clé du TCD 1.

J'ai lu entre les lignes. Je regarde ce jour.

Mais j'avoue ne plus comprendre grand chose vu ton dernier fichier.

A partir de ce dernier, peux-tu me dire précisément ce que tu souhaites ?

Cdlt.

Bonjour et merci pour votre rapidité,

En fait, pour moi, il n'y a pas de TCD maitre ==> je souhaite avoir des onglets par code CLE selon les cas suivantes :

1- Si le code CLE existe dans le TCD 1 ET le TCD 2 ==> l'onglet crée sera filtre sur ce code CLE pour les 2 TCD

2- Si le code CLE existe dans le TCD 1 mais n'existe pas dans le TCD 2 ===> l'onglet comporte que le TCD1 filtré sur le code CLE en question

3- Si le code CLE existe dans le TCD 2 mais n'existe pas dans le TCD 1 ===> l'onglet comporte que le TCD2 filtré sur le code CLE en question

j'espère que ma demande est plus explicite avec ces précisions, si non n'hésitez pas de demander plus de détails

Merci d'avance

Bonjour,

A tester.

Cdlt.

Bonjour jean-Eric et merci pour votre réponse

je viens de tester votre macro mais elle ne répond toujours pas à mon besoin (point 2 et 3 dans mon précédent post)

En fait dans le TCD1, j'ai le code cle 'UR_992000946' qui n'existe pas dans le TCD 2, donc normalement je dois retrouver un onglet uniquement avec le TCD 1 (voir onglet 'UR_992000946' en rouge crée manuellement), or que la macro m'a crée en automatique que 2 onglets qui correspondent au cas 1 (même clé dans le TCD1 et TCD2)

Merci d'avance

Re,

J'ai crée une procédure événementielle au changement de valeurs dans les 2 rapports de filtre CLE dans les TCDs.

Le résultat est conforme à ta demande. Ou je ne comprends rien.

Sinon, peux-tu me dire si tu peux fermer le classeur avec sa croix (en haut à droite de l'écran) après la création d'une feuille ?

Cdlt.

Bonjour,

Pour info, le dernier fichier que vous avez posté ne contient pas la macro de création de feuilles, juste une macro HELP

Pour répondre à votre question, oui j'arrive à fermer le fichier après la création de feuilles

Si non, par rapport à mon fichier exemple, j'ai un problème au niveau du filtre suivant 'UR_599717103' qui existe dans le TCD 1 et non pas dans le TCD 2, donc j'attend à avoir un onglet qui contient uniquement le TCD 1 filtré sur ce code CLE or que pour le moment dans l'onglet intitulé 'UR_599717103', j'ai le 1er TCD OK mais le 2ème TCD contient 'Tous' (voir copie d'écran ci-jointe)

Pour simplifier est-il possible de supprimer le TCD lorsque il ne contient pas le code CLE du filtre et n'affiché que le TCD avec le bon filtre ?

merci d'avance

probleme filtre tcd 2

Bonjour,

la procédure est placée dans le module (TCD_GLOBAL).

Elle est exécutée au changement des valeurs des cellules B2 et E2.

Cdlt.

Bonjour jean-Eric et merci pour votre réponse,

je viens de tester le dernier fichier posté en changeant la valeur de la cellule B2 mais j'ai eu un message d'erreur (ci-joint)

en plus que le fait d'être obligé de toucher une cellule pour activer la macro ne me convient pas trop

est-il possible de rendre cette macro public et de pouvoir l'exécuter directement à partir de menu 'Macro' ?

PS: L'ancienne version de la macro fonctionne bien sauf qu'elle ne traite pas le point évoqué dans mon précédent poste, est-il possible d'améliorer juste ce point ?

merci d'avance

excellente journée


J'ai oublié de joindre le message d'erreur

le voilà :

erreur execution

Bonjour,

Pour le message d'erreur :

Ruban / Fichiers / Options / Centre de gestion de la confidentialité.

Cliquer sur Paramètres du centre de gestion de la confidentialité.

Dans Paramètres des macros, cocher Accès approuvé au modèle d'objet du projet VBA.

Teste ensuite la procédure.

Cdlt.

Rechercher des sujets similaires à "creation feuilles resultat tcd"