Nommer l'onglet dans lequel se trouve un TCD

Bonjour,

J'ai créé un TCD à l'aide de la macro suivante:

Sub macro4()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"SITH traité!A:EE").CreatePivotTable TableDestination:="", TableName:= _
"TCD", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select_
TableName = "TCD"
With ActiveSheet.PivotTables("TCD").PivotFields("A voir !")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("TCD").PivotFields("sous contrôle")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("TCD").PivotFields("état")
        .Orientation = xlRowField
        .Position = 3
    End With
    ActiveSheet.PivotTables("TCD").AddDataField ActiveSheet.PivotTables("TCD"). _
        PivotFields("Identifiant"), "Nombre de Identifiant", xlCount
    With ActiveSheet.PivotTables("TCD").PivotFields("DS")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("TCD").PivotFields("DSI")
        .Orientation = xlPageField
        .Position = 1
    End With
    ActiveSheet.PivotTables("TCD").PivotFields("DSI").CurrentPage = " DSI BGP"
end sub

je veux nommer l'onglet dans lequel se trouve ce TCD pour différencier les différents TCD que je veux faire

Pouvez vous m'aider?

Bonjour

Mets ton fichier en ligne ce sra plus facile de voir ce que tu fais et de te proposer quelque chose qui fonctionne.

Sinon, le code me semble comporter des erreurs

essaie déjà ce ci peut être

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"SITH traité!A:EE").CreatePivotTable TableDestination:="", TableName:= _
"TCD" & activesheet.name

A te relire

Bonjour dan

merci pour ta réponse mais cela ne marche pas.

je viens d'insérer mon fichier. voici la macro qui permet l'obtention de mon TCD qui marche impéc sauf pour nommer l'onglet dans lequel on crée le TCD:

Sub macro5()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"onglet de travail!A:EE").CreatePivotTable TableDestination:="", TableName:= _
"TCD", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("TCD").PivotFields("A voir !")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("TCD").PivotFields("sous contrôle")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("TCD").PivotFields("état")
        .Orientation = xlRowField
        .Position = 3
    End With
    ActiveSheet.PivotTables("TCD").AddDataField ActiveSheet.PivotTables("TCD"). _
        PivotFields("Identifiant"), "Nombre de Identifiant", xlCount
    With ActiveSheet.PivotTables("TCD").PivotFields("DS")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("TCD").PivotFields("DSI")
        .Orientation = xlPageField
        .Position = 1
    End With
    ActiveSheet.PivotTables("TCD").PivotFields("DSI").CurrentPage = "bateau"
End Sub

"onglet de travail"= onglet source

"feuill2"= l'onglet qui est créé à la suite de la création du TCD.

Cordialement


voici le fichier

Bonjour,

STP, envoies un fichier représentatif et significatif, pas ce que tu as envoyé (fichier avec données et macros)

Et expliques précisément ce que tu souhaites.

Cdlt.

Re,

je veux nommer l'onglet dans lequel se trouve ce TCD pour différencier les différents TCD que je veux faire

Sur base de quelle info ?

C'est d'abord le nom de ton TCD que tu dois faire évoluer car si tu utilises cette macro à chaque reprise, cela va bugguer. A moins que tu aies une macro par TCD ?? si oui, toutes les macros sont-elle identiques ?

Merci de répondre sur chacun des points

A te relire

Dan a écrit :

Re,

C'est d'abord le nom de ton TCD que tu dois faire évoluer car si tu utilises cette macro à chaque reprise, cela va bugguer. A moins que tu aies une macro par TCD ?? si oui, toutes les macros sont-elle identiques ?

Merci de répondre sur chacun des points

je souhaite mettre plusieurs macros.

ces TCD sont identiques, la seule différence est la plage, la différence sera dans l'écriture de cette ligne de code

ActiveSheet.PivotTables("TCD").PivotFields("DSI").CurrentPage = "bateau"

je maj uniquement cette ligne

donc au final je vais avoir plusiuers tcd avec des noms différents=> plusieurs macros avec une ligne pour le nom différente et pour la dernière ligne pour la plage différente

Jean-Eric a écrit :

Bonjour,

STP, envoies un fichier représentatif et significatif, pas ce que tu as envoyé (fichier avec données et macros)

Et expliques précisément ce que tu souhaites.

Cdlt.

Bonjour Jean Eric,

J'ai bien inséré ma marco quand j'ai posé ma question, mais pas grave je viens de l'insérer dans le fichier directement.

avec cette macro je souhaitre créer un TCD ( ce que j'arrive à faire) mais j'arrive pas à donner un nom à l'onglet qui porte ce TCD

donc mon probleme: comment puis je nommer l'onglet qui porte le TCD

Pi, au sein du fichier il y a des données ( j'ai remplacé les données d'origine qui sont confidentielles par des données qui permettent au TCD de bien fonctionner)

J'espèere que j'ai pû donner des réponses à tes questions

et j'espère que tuy pourras m'aider à résoudre mon problème

re,

J'ai l'impressions que tu ne comprends ce qui est demandé.

Dans ta macro tu utilises le nom TCD

Si tu utilises plusieurs macros avec ce nom tu auras un bug. D'où ma question à laquelle tu ne réponds pas.

Je vais don me tenir uniquement à ce que tu as dit

Essaie ce code

Sub macro5()
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"onglet de travail!A:EE").CreatePivotTable TableDestination:="", TableName:= "TCD"
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)

With ActiveSheet.PivotTables("TCD").PivotFields("A voir !")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("TCD").PivotFields("sous contrôle")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("TCD").PivotFields("état")
.Orientation = xlRowField
.Position = 3
End With

ActiveSheet.PivotTables("TCD").AddDataField ActiveSheet.PivotTables("TCD"). _
PivotFields("Identifiant"), "Nombre de Identifiant", xlCount
With ActiveSheet.PivotTables("TCD").PivotFields("DS")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("TCD").PivotFields("DSI")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet
    .PivotTables("TCD").PivotFields("DSI").CurrentPage = "bateau"
    .Name = "TCD_" & .PivotTables("TCD").PivotFields("DSI").CurrentPage ' = "bateau"
End With
End Sub

N'oublies pas de chnager les données Bateau dans la ligne dont tu parles. Sinon bug assuré aussi..

Si ok, lors de ta réponse merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER

Amicalement

re,

effectivement, je suis pas sure de connaitre la signification de chaque ligne de cette partie :

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _

"onglet de travail!A:EE").CreatePivotTable TableDestination:="", TableName:= _

"TCD", DefaultVersion:=xlPivotTableVersion10

1) tu crée un Tableau croisé dynamique dont la source est "onglet traité" ; c'est bien cela

2) il y a appélation du Tableau croisé dynamique "TCD" , et "TCD" n'est pas le nom de l'onglet ou il y a le tableau croisé dynamique; c'est bien ça?

tu as raison, ça a marché une fois mais pas la seconde fois. en effet j'ai refai la même action en mettant par exemple "voiture" à la place de "bateau"

mon objectif est de créer plusieurs TCD pour chacun des différents choix des DSI: voiture, bateau, rateau....

j'espère que j'ai répondu à ta question

pi, je suis vraiment novice niveau macro

Bonsoir,

Dan a déja répondu, mais le code ci-dessous devrait pouvoir t'aider à construire des nombreux TCDs.

Ctrl+q pour lancer la procédure.

Cordialement.

Option Explicit
Public Sub Création_TCDs()
Dim sH As Worksheet
Dim Feuille As Variant
Dim PTCache As PivotCache, PT As PivotTable
Dim p As PivotField
Dim Plage As Range
Dim derLigne As Integer
Dim derColonne As Byte

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With
'------------------------------------------------------------------------------------------
    On Error Resume Next
        Worksheets("bateau").Delete
    On Error GoTo 0

    Set sH = Worksheets("onglet de travail")
    With sH
        derLigne = .Range("A" & Rows.Count).End(xlUp).Row
        derColonne = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column
        Set Plage = .Range(Cells(1, 1), Cells(derLigne, derColonne))
    End With
    Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
        SourceData:=Plage)
    Worksheets.Add after:=Worksheets(Worksheets.Count)
    Set PT = PTCache.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"), _
        TableName:="TCD_1")
'------------------------------------------------------------------------------------------
     With PT
        With .PivotFields("DSI")
            .Orientation = xlPageField
            .CurrentPage = "bateau"
            .Position = 1
        End With
        With .PivotFields("A voir !")
            .Orientation = xlRowField
            .Position = 1
        End With
        With .PivotFields("sous contrôle")
            .Orientation = xlRowField
            .Position = 2
        End With
        With .PivotFields("état")
            .Orientation = xlRowField
            .Position = 3
        End With
        With .PivotFields("DS")
            .Orientation = xlColumnField
            .Position = 1
        End With
        With .PivotFields("Identifiant")
            .Orientation = xlDataField
            .Function = xlCount
            .Caption = "Nb Identifiant"
        End With
        'Suppression sous-totaux
        For Each p In .PivotFields
            If p.Orientation = 1 Then p.Subtotals = Array(False, False, False, False, _
                False, False, False, False, False, False, False, False)
        Next p
        'Affichage des totaux lignes et colonnes
        .ColumnGrand = True
        .RowGrand = True
    End With
    ActiveSheet.Name = PT.PivotFields("DSI").CurrentPage

    Set sH = Nothing: Set Plage = Nothing: Set PTCache = Nothing: Set PT = Nothing
'------------------------------------------------------------------------------------------
    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With

End Sub

Re,

1) tu crée un Tableau croisé dynamique dont la source est "onglet traité" ; c'est bien cela

non. Je cree ton TCD puis j'attribue un nom à ton onglet en fonction de la valeur dans le champ de page qui ici est "bateau". Donc je nomme l'onglet TCD_Bateau

2) il y a appélation du Tableau croisé dynamique "TCD" , et "TCD" n'est pas le nom de l'onglet ou il y a le tableau croisé dynamique; c'est bien ça?

Je t'en ai parlé avant de faire évoluer le nom TCD et t'ai demandé si tu utilisais une seule macro pour faire tous tes TCD ou non ?

Ce que tu dois comprendre c'est que le nom TCD que tu donnes au tableau croisé dans ta première ligne de code (tablename...) ne peut exister qu'une seule fois dans ton fichier.

Donc soit tu fais une macro pour chaque TCD en changeant TCD par TCD1, TCD2 etc. Donc 5 TCD = 5 macro. Un peu compliqué évidemment... Soit tu fais un code qui attribue un nom aux différents TCD.

tu as raison, ça a marché une fois mais pas la seconde fois. en effet j'ai refai la même action en mettant par exemple "voiture" à la place de "bateau"

Normal car si tu relances le code de construction du TCD, tu dois au préalable supprimer l'onglet dans lequel le TCD se trouve

Pour ce faire tu peux mettre en début de macro :

On error resume next
Sheets("TCD_Bateau").delete
On error goto 0

C'est d'ailleurs ce que jean Eric fait dans son code

Autre solution est de ne pas nommer l'onglet via la macro mais de préparer ton fichier en fonction des 5 TCD à faire. Donc 1 feuille prénommée par TCD avec un nom de ton choix.

Là une simple ligne de code sera nécessaire pour effacer le TCD existant.

Exemple pour une feuille si cette feuille s'appelle TCD_Bateau, on met ceci en début de code :

On error resume next
Sheets("TCD_Bateau").cells.delete
On error goto 0

Là tu gardes le nom de l'onglet en permanence et tu n'effaces que les données existantes avant de commencer le code de construction de TCD

A toi de dire ce que tu veux

A te relire

Bonjour,

J'ai modifié mon code qui crée x TCDs en fonction de la colonne DSI.

Dans le cas précis, c'est donc la création de 3 feuilles nommées "bateau", "rateau" & "voiture".

A te relire. Cdlt

merci merci pour votre aide

ça fonctionneeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

bonjour Jean Claude,

la macro marche d'enfer sur le document test (sur lequel tu as travailler)

je dois la modifier légèrement (nom d'onglet, nom de DSI)

Peux tu traduire pour moi ce que fait chaque partie de cette macro stp stp:)


pardon jean Eric et non jean claude

Bonjour,

Ci-joint fichier avec commentaires.

A te relire.

Cdlt

Re

Je ne vais plus répondre sur ce fil puisque tu sembles satisfait par la proposition de Jean Eric

Veille toutefois à cloturer le fil si ta demande est terminée en cliquant sur le V vert à coté du bouton Editer

A bientôt sur d'autres fils peut être

Re,

la macro ne marche pas dans mon fichier dans lequel il y a les vraies données (données confidentielles) elle bloque sur 2 colonnes

pi, ces colonnes contiennent que de la description et dans certaines cellules "'--"

(j'ai découvert qu'elle bloquait sur ces deux colonnes car j'ai copié coller les colonnes au fur et à mesure et j'ai fait marcher la marco

ca marche jusqu'à ce que je copie colle ces colonnes)

Autre point mon fichier contient d'autres élément s à part l'onglet "onglet de travail" et les "TCD" à venir.

Est il possible de ne pas effacer ces autres onglets

Merci par avance

Bonjour,

J'ai répondu à la question posée.

Si maintenant tu ajoutes des contraintes, j'ai besoin de les connaître. Et ceci avec un fichier "test" que tu enverras, comportant le nombre de feuilles de ton classeur et leurs noms, la structure de ta base de données réelle, etc...

Si tu as lu le code et compris son principe, tu dois pouvoir reprendre ta demande initiale et l'adapter en conséquence.

A te relire.

Cdlt.

Rechercher des sujets similaires à "nommer onglet lequel trouve tcd"