Extraction TCDYN par rapport à nombre de ligne définie
Bonjour,
J'ai un problème que je n'arrive pas à résoudre car j'aimerai automatiser (via VBA probablement) une manipulation.
Je m'explique :
J'ai un tableau avec x lignes et x colonnes (variable à souhait biensur), dans ce tableau je m'intéresse à 3 colonnes (F-G-H) et la totalité des lignes
J'ai un code en colonne H (qui peut tout aussi bien être du texte que des chiffres mais pour simplifier ici, j'ai mis des chiffres) et des chiffres en colonnes F et G. Jusqu'ici c'est un tableau fort simple.
En cellules B1, B2 et B3, je peux rentrer des chiffres manuellement qui correspondent une ligne du tableau que j'ai nommé ici Stop 1, Stop 2 et Stop 3.
- Stop 1 : Du Début du tableau à la ligne 100
- Stop 2 : de la ligne 101 à la ligne 350
- Stop 3 de la ligne 351 à la fin du tableau
Ces lignes étant indiquées dans les cellules B1,B2 et B3
J'ai créé un onglet où j'utilise 3 TCDYN qui correspondent à ce que je souhaite extraire pour chaque "Stop".
J'ai comme résultat pour chaque STOP le nombre de NB1 et de NB2 pour chaque CODE (voir le fichier exemple pour que ce soit plus clair).
Ce qui me donne au final 3 TCDYN avec en dessous une mise en forme que je souhaite avoir au final (j'utilise un CONCATENER tout bête pour ça)
Donc à faire manuellement ça ne me pose pas de problème, le souci c'est que j'ai plusieurs centaines de fichier à traiter et que manuellement j'en ai pour un temps fou.
Je ne vois absolument pas comment faire pour automatiser ça donc je suis preneur de toute aide
Merci d'avance
Peut être qu'il y a plus simple que par un tcdyn mais je ne vois pas hormis en VBA ??
Bonjour,
Une proposition VBA à étudier.
Cdlt.
Private Sub Worksheet_Activate()
Dim wb As Workbook
Dim ws As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim pt As PivotTable
Dim rng_1 As Range, rng_2 As Range, rng_3 As Range
Dim Stop_1 As Long, Stop_2 As Long, Stop_3 As Long, LastRow As Long
Set wb = ActiveWorkbook
Set ws = wb.Worksheets("Donn?es")
Set ws2 = wb.Worksheets("Donn?es TCDs")
Set ws3 = wb.Worksheets("TCDYN")
With ws
LastRow = .Cells(.Rows.Count, 6).End(xlUp).Row
Stop_1 = .Cells(1, 2).Value
Set rng_1 = .Cells(8, 6).Resize(Stop_1 - 7, 3)
Stop_2 = .Cells(2, 2).Value
Set rng_2 = .Cells(Stop_1 + 1, 6).Resize(Stop_2 - Stop_1, 3)
Stop_3 = .Cells(3, 2).Value
Set rng_3 = .Cells(Stop_2 + 1, 6).Resize(Stop_3 - Stop_2, 3)
End With
With ws2
.Cells(3, 1).CurrentRegion.Offset(1).Clear
rng_1.Copy Destination:=.Cells(4, 1)
.Cells(3, 5).CurrentRegion.Offset(1).Clear
rng_2.Copy Destination:=.Cells(4, 5)
.Cells(3, 9).CurrentRegion.Offset(1).Clear
rng_3.Copy Destination:=.Cells(4, 9)
End With
For Each pt In ws3.PivotTables
Select Case Right(pt.Name, 1)
Case 1:
pt.ChangePivotCache wb.PivotCaches.Create(xlDatabase, ws2.Cells(3, 1).CurrentRegion)
pt.RefreshTable
Case 2:
pt.ChangePivotCache wb.PivotCaches.Create(xlDatabase, ws2.Cells(3, 5).CurrentRegion)
pt.RefreshTable
Case 3:
pt.ChangePivotCache wb.PivotCaches.Create(xlDatabase, ws2.Cells(3, 9).CurrentRegion)
pt.RefreshTable
Case Else:
End Select
Next pt
End Sub
Super première approche, merci beaucoup, ça fonctionne plutôt pas mal du tout, juste mon tableau recap qui ne s'adapte pas en dessous du TCDYN.
Du coup, j'ai rajouté une condition pour vérifier si il y un numéro dans les colonnes A, E et I du TCDYN et j'obtiens ce que je veux.
J'avais de mon coté essayé sans VBA mais je pense qu'il y a mieux à faire (je rejoins un autre fichier sans TCDYN)
Je garde sous le coude le code VBA pour le moment, merci de te pencher sur mon problème
Je me réponds à moi-même vu que j'essaye quand même d'approfondir sans VBA, ça pourra peut-être servir à quelqu'un d'autre.
Voilà où j'en suis, peut-être qu'il y a un autre moyen plus simple ?? Mais ça fonctionne et j'obtiens ce que je veux...