Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 boucler sur un répertoire pour changer source de données de TCD

jmten92

XLDnaute Nouveau
Hello à tous,

J'ai un petit souci que je vous expose ici.
' j'ai un répertoire contenant THIS woorkbook et 6 fichiers
'sachant que je veux faire une boucle sur tous les fichiers de mon répertoire SAUF THIS WORKBOOK
'ces autres fichiers contiennent une feuille dont l'intitulé
CONTIENT TCD RETARD (et d'autres mots spécifiques à chaque classeur cad TCD RETARD...")
' je veux modifier la source de données du TCD de la feuille qui contient TCD RETARD dans chaque classeur
'la source de données étant la deuxième page contenue dans chaque classeur qui s'intitule BDD... (il faut donc pr la boucle que la feuille qui
CONTIENT les mots BDD soit sélectionnées
' je souhaite éviter de donner un nom aux tableaux pour éviter les erreurs potentielles et je préfere utiliser list object(1)

si quelqu'un a une idée de la méthode à utiliser pour adapter mon code qui ne fonctionne pas a l'heure actuelle...


merci








Sub test()
Dim Fso As Object, MonRepertoire As String
Dim fichiers As Object

Set Fso = CreateObject("Scripting.FileSystemObject")
MonRepertoire = ThisWorkbook.Path & "\"

For Each fichiers In Fso.GetFolder(MonRepertoire).SubFolders 'pour tous les fichiers contenus dans le répertoire
Sheets("*TCD RETARD*").Select 'sélectionner la feuille dont l'intitulé contient les mots "TCD RETARD"
Range("D24").Select 'se positionne sur le TCD
ActiveSheet.PivotTables(1).PivotSelect _
"Entité_Code[All;Total]", xlDataAndLabel, True
'est censé prendre le premier TCD qui est sur la feuille (pour éviter de donner un nom au TCD lequel changera probablement

ActiveSheet.PivotTables(1).ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
Worksheets("*BDD*").ListObjects(1), Version:=14)
' redéfinir la source de données - recherche la feuille contenant le mot BDD et prend le premier tableau comme source (idem pour éviter de donner un nom)

ActiveWorkbook.Save
ActiveWindow.Close 'enregistrer et fermer le classeur

' j'ai un répertoire contenant THIS woorkbook et 6 fichiers
'sachant que je veux faire une boucle sur tous les fichiers de mon répertoire SAUF THIS WORKBOOK
'ces autres fichiers contiennent une feuille dont l'intitulé CONTIENT TCD RETARD (et d'autres mots spécifiques à chaque classeur cad TCD RETARD...")
' je veux modifier la source de données du TCD de la feuille qui contient TCD RETARD dans chaque classeur
'la source de données étant la deuxième page contenue dans chaque classeur qui s'intitule BDD... (il faut donc pr la boucle que la feuille qui CONTIENT les mots BDD soit sélectionnées
' je souhaie éviter de donner un nom aux tableaux pour éviter les erreurs potentielles et je préfere utiliser list object(1)


Next fichiers
End Sub
 

jmten92

XLDnaute Nouveau
Hello,

Je vais essayer d'être le plus clair possible
j'avais un fichier global (12 onglets dont 6 TCD par régions et 6 bases de données par régions ainsi qu'une Base de données globale pr l'ensemble des régions .
la source de ces TCD était donc la BDD région qui le concernait

Ce fichier global a été copié par macro, chaque binôme (TCD région A et BDD région A) a été copié dans un nouveau classeur (appelé "A" du répertoire actif

SAUF que c'est là ou est mon problème, la source des TCD est restée la même et donc pointe sur mon fichier global initial... je veux donc la modifier pour que le TCD vienne pointer sur la BDD copiée dans le nouveau classeur...

je précise que la macro serait exécutée à partir du classeur global qui est dans le même répertoire que les 6 fichiers générés (les 6 binômes)

j'ai donc eu l'idée d'effectuer une boucle sur mon répertoire :

j'ai un répertoire contenant THIS woorkbook (le fichier global) et 6 fichiers (les 6 binômes)
'sachant que je veux faire une boucle sur tous les fichiers de mon répertoire SAUF THIS WORKBOOK
'ces autres fichiers contiennent une feuille dont l'intitulé CONTIENT TCD RETARD (et d'autres mots spécifiques à chaque classeur cad TCD RETARD......")
' je veux modifier la source de données du TCD de la feuille qui contient TCD RETARD dans chaque classeur
'la source de données étant la deuxième page contenue dans chaque classeur qui s'intitule BDD...... (il faut donc pr la boucle que la feuille qui CONTIENT les mots BDD soit sélectionnées
' je souhaite éviter de donner un nom aux tableaux pour éviter les erreurs potentielles et je préfere utiliser list object(1)



Si tu as une idée des modifs à apporter a mon code...je débute en VBA et je m'arrache un peu les cheveux ....
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir jmten, Christophe, le Forum

Peut-être comme ceci A ADAPTER

VB:
Sub test()
Dim wks As Workbook, wb As Workbook, plage As Range
Dim Rep$, Fichiers$, derlig&
 
    Application.ScreenUpdating = False
    Set wb = ThisWorkbook
 
    Rep = ThisWorkbook.Path & "\Fichiers\"
    Fichiers = Dir(Rep & "*.xls*")
 
    'feuille du classeur source
    derlig = Sheets("Data").Range("a" & Rows.Count).End(xlUp).Row
    Set plage = wb.Sheets("Data").Range("a2:g" & derlig)
 
    Do While Len(Fichiers) > 0
        Set wks = Workbooks.Open(Rep & Fichiers)
        Application.Wait (Now + TimeValue("00:00:01"))
        wks.Sheets("BDD").Activate
        plage.Copy ActiveSheet.Range("a2")
        wks.Close True
        Fichiers = Dir
    Loop
End Sub
 

jmten92

XLDnaute Nouveau
merci à vous pour vos réponses, j'ai adopté la méthode de Chris qui me parait plus simple à mettre en oeuvre pour moi (et encore c pas gagné...)
j'ai donc fait le code suivant qui ne marche pas . je pense pourtant avoir adopté la bonne méthode (la boucle de 1 à 6 ) pour dupliquer le classeur actif ....

une idée de ce qui cloche ? désolé je suis vraiment débutant mais je bosse pr m'améliorer...
Sub dupliquer()
Dim Wb As Workbook 'classeur actif
CA As String 'chemin du classeur a dupliquer

Set Wb = ThisWorkbook
CA = ThisWorkbook.Path & "\"
Wb = 6
For Wb = 1 To 6

Wb.Copy

End Sub
 

chris

XLDnaute Barbatruc
Re

Pourquoi le faire par VBA si tu as juste 6 cas ?

Si tu y tiens fais plutôt des saveas...

LoneWolf : je ne vois pas en dehors de la boucle d'ouverture des fichiers, la solution : ton code copie des cellules dans une feuille alors que le problème était de changer la source du TCD...
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re Christophe

D'après ceci: la source de données étant la deuxième page contenue dans chaque classeur qui s'intitule BDD...... (il faut donc pr la boucle que la feuille qui CONTIENT les mots BDD soit sélectionnées.

C'est ce que j'avais compris.
 

chris

XLDnaute Barbatruc
RE

Je ne m'appelle pas Christophe, juste Chris
Pas de souci, il m'arrive aussi de mal comprendre et au début j'ai pensé comme toi mais "6 bases de données par régions" et "la source de ces TCD était donc la BDD région qui le concernait" montre qu'il y a 2 onglets par région : la BDD et le TCD.
Quand le source n'est pas un tableau on peut exporter les 2 onglets en une même opération et le lien est alors correct mais ici avec un tableau cette possibilité n'existe pas et l'export reste lié au tableau d'origine... d'où le problème.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…