Macro scinder un tableau un plusieurs onglets (ou classeurs?)
Bonjour
J'aimerais pouvoir dupliquer mon tableau TCD en autant d'onglets qu'il y a de références dans la colonne "L Affectation 3
" (dans le cas présent un onglet base1, un onglet base2, base3 base4... sachant que je peux en avoir une quinzaine).
Etant novice j'ai essayé de récupérer un code d'un ancien sujet mais cela ne fonctionne pas. J'ai donc modifié la macro en dupliquant mon TCD dans un tableau copier coller pensant que mon TCD genait mais sans succès
cela bug au niveau du "with". je pense qu'il s'agit du nom du tableau que je n'arrive pas à définir ne sachant pas le nombre de lignes à l'avance
Peut etre que je devrais plutôt partir de 0 sur ce code en partant juste de mon TCD (sans dupliquer le tcd en copier coller valeur dans un autre onglet), mais je n'y connais pas grand chose en codage :/
L'objectif à termes dans cette macro est de dupliquer ce tableau (pouvant faire +1000 lignes) dans plusieurs onglets (ou classeurs) selon l'affectation pour ensuite les envoyer par email au bon manager.
Merci pour votre aide precieuse !
Sub fragmenter()
'fragmenter en plusieurs onglets les services pour preparer un envoie par email
'dupliquer l'onglet TCD
Sheets("TCD").Select
Sheets("TCD").Copy Before:=Sheets(2)
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("TCD (2)").Select
Rows("1:2").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Rows("1:1").Select
Selection.Font.Bold = True
Selection.AutoFilter
'variables
Dim i%, cle As Variant, sw As Worksheet, dico As Object, tbl As Variant
'init parametres
Set sw = ActiveSheet
Set dico = CreateObject("Scripting.Dictionary")
With ActiveSheet.ListObjects(1)
If .ShowAutoFilter Then .AutoFilter.ShowAllData
tbl = .ListColumns(1).DataBodyRange
For i = 4 To UBound(tbl)
dico(tbl(i, 1)) = dico(tbl(i, 1)) + 1
Next
For Each cle In dico.Keys
.Range.AutoFilter Field:=1, Criteria1:=cle
.Range.Select
Selection.Copy
Sheets.Add After:=ActiveSheet
With ActiveSheet
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.ListObjects.Add(xlSrcRange, Cells(1).CurrentRegion, , xlYes).name = cle
.ListObjects(1).TableStyle = "TableStyleMedium2"
.name = cle
End With
sw.Select
Next
.AutoFilter.ShowAllData
End With
End Sub
Bonjour
Tu peux commencer par appliquer les bonnes pratiques et mettre ta source sous forme de tableau structuré et construire le TCD sur la tableau structuré et non sur 1 million de lignes, ce qui évitera les vides et allégera le cache des TCD.
Ensuite place le champ L Affectation 3 en zone de filtre du TCD puis utilise, dans l'onglet Options de l'onglet Outils de TCD du ruban : Options, Afficher les pages de filtre du rapport, choisir ce champ : tous les onglets vont se créer automatiquement.
Cette manip peut être automatisée en utilisant l'enregistreur de macros...
Bonjour Skyjet53 et Chris,
Au-delà des recommandations de Chris, j'ai une question = pourquoi scinder en plusieurs onglets alors qu'avec un filtre, voire même un segment, on peut sélectionner ce que l'on souhaite voir affiché ?
Quant à scinder un TCD en plusieurs classeurs ... non, il vaut mieux scinder dans ce cas les données de base.
Bonjour
Tu peux commencer par appliquer les bonnes pratiques et mettre ta source sous forme de tableau structuré et construire le TCD sur la tableau structuré et non sur 1 million de lignes, ce qui évitera les vides et allégera le cache des TCD.
Ensuite place le champ L Affectation 3 en zone de filtre du TCD puis utilise, dans l'onglet Options de l'onglet Outils de TCD du ruban : Options, Afficher les pages de filtre du rapport, choisir ce champ : tous les onglets vont se créer automatiquement.
Cette manip peut être automatisée en utilisant l'enregistreur de macros...
Bonjour Chris,
Merci beaucoup pour ta réponse je connaissais pas cette option dans le TCD
En fait dans le fichier source j'ai deja un filtre mais je vais rajouter celui ci et essayer d'automatiser avec ta méthode
merci pour tes conseils
Bonjour Skyjet53 et Chris,
Au-delà des recommandations de Chris, j'ai une question = pourquoi scinder en plusieurs onglets alors qu'avec un filtre, voire même un segment, on peut sélectionner ce que l'on souhaite voir affiché ?
Quant à scinder un TCD en plusieurs classeurs ... non, il vaut mieux scinder dans ce cas les données de base.
Bonjour Steelson
En fait je veux envoyer à chaque responsable leur population selon certaines données (calcul et filtre en amont du tcd) et je ne souhaite pas qu'ils puissent voir les autres data qui ne les concernent pas d'où ma question en plusieurs classeurs
Re-
D'abord, si tu filtres le TCD et que tu n'envoies qu'une seule partie, étant que les données elles sont globales, un double clic sur la valeur globale fera réapparaître l'ensemble des données par n'importe quel destinataire !
Pour moi, ta solution est de découper ta base de données selon un critère.
Voici un outil qui peut t'aider.
Re-
D'abord, si tu filtres le TCD et que tu n'envoies qu'une seule partie, étant que les données elles sont globales, un double clic sur la valeur globale fera réapparaître l'ensemble des données par n'importe quel destinataire !
Pour moi, ta solution est de découper ta base de données selon un critère.
tout à fait c'est le probleme que je rencontre avec le TCD tu as raison
Voici un outil qui peut t'aider.
c'est top ce petit fichier!!! ça repond pas mal à ce que je cherchais
je vais regarder cela de plus prêt pour comprendre
un grand merci à toi pour ton aide
Autre solution (mais qu'il faudrait développer) :
- dupliquer ton fichier
- supprimer les données <> direction concernée
- actualiser le TCD de chaque fichier
Autre solution (mais qu'il faudrait développer) :
L'avantage : on conserve le TCD.
- dupliquer ton fichier
- supprimer les données <> direction concernée
- actualiser le TCD de chaque fichier
ça serait une autre solution en effet
je vais déjà bien décortiquer et comprendre ton developpement pour que je puisse l'adapter
c'est vraiment top merci encore