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.