Changer la source des TCD avec macro vba Excel

Sam2021 -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour

Avec l'enregistreur de macro, j'ai vu que pour changer la source de données le code était le suivant

   Windows("Reste à recouvrer_BAA_2021_DAJEP.xlsx").Activate
Range("C14").Select
Sheets("Montant par service").Select
Range("C8").Select
ActiveSheet.PivotTables("Tableau croisé dynamique2").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"R:\10. RECETTES\10.12. RESTES A RECOUVRER\2021\01 BAA\[Reste à recouvrer_BAA_2021_DAJEP.xlsx]Feuil1!C1:C27" _
, Version:=6)


le problème c'est qu'à la place du chemin "R:\10. RECETTES\10.12. RESTES A RECOUVRER\2020\10_RAR au 31 decembre 2020\test vba\
j'aimerai utiliser "ThisWorkbook.Path". qui si j'ai bien compris, permet d'utiliser la macro dans n'importe quel répertoire. mais je n'y arrive pas

Egalement j'aimerai modifier le nom du fichier "Reste à recouvrer_BAA_2021_DAJEP.xlsx" en mettant un nom qui change en fonction du nom du fichier. car cette macro je l’imbrique dans une autre qui me créé plein de fichiers. jusque là j'utilisais pour créé le nom du fichier ceci cell.Value & ".xlsx"

J'éxécute cette macro dans un fichier, et je veux changer la source de données des TCD dans un autre fichier....

En espérant que cela soit clair..
je vous remercie pour votre aide

7 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    le fichier source des données est-il dans le même dossier que le fichier contenant la macro?
    si oui, peut-être:
    ActiveSheet.PivotTables("Tableau croisé dynamique2").ChangePivotCache _
            ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
            SourceData:= _
            ThisWorkbook.Path + "\[" +  cstr(cell.Value) + ".xlsx]Feuil1!C1:C27" _
            , Version:=6)
    0
  2. Sam2021
     
    bonjour
    je suis désolée pour le temps de réponse...
    cela fonctionne super je vous remercie
    serait il possible au lieu de Feuil1!C1:C27" d'indiquer de sélectionner jusqu'à la dernière cellule non vide ?

    Cordialement

    Sandie
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      as-tu essayé C:C au lieu de C1:C27?
      0
  3. Sam21
     
    c1:c27 correspond à la colonne A à AA (27 colones). C:C ne va pas m'aider car je souhaite que la sélection soit faite de A1 jusqu'à AA avec dernière lignes non vides.
    Est ce que cela est plus clair ? Quelqu'un peut il m'aider ?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      la pivot table prend en compte les lignes vides?
      0
      1. Sam21 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        oui et je ne veux pas
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Sam21
         
        n'est-ce pas une option du TCD?
        0
      3. Sam21 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        non cela ne fonctionne pas pour les lignes.
        je me disais de sélectionner tant que cellule non vide par une boucle
        0
      4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Sam21
         
        peux-tu partager ton fichier?
        0
  4. Sam21
     
    le fichier est trop volumineux
    j'ai fais ceci mais cela me met erreur de compilation depuis la ligne Activesheet.pivottable. où est mon erreur ?
    Workbooks(cell.Value & ".xlsx").Activate
    Dim derniereLigne As Long,
    derniereLigne = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
    MsgBox derniereLigne

    Workbooks(cell.Value & ".xlsx").Sheets("Montant par service").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique2").ChangePivotCache _
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
    SourceData:= _
    ThisWorkbook.Path + "\[" + CStr(cell.Value) + ".xlsx]Feuil1("A1:AA" & derniereLigne)"
    , Version:=6)
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ".xlsx]Feuil1!A1:AA" & derniereLigne
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      réduis alors la taille de ton fichier, de façon à ce que le problème soit toujours présent.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sam21
     
    A1:AA n'a pas l'air de convenir. j'ai donc essayé ceci

    Workbooks(cell.Value & ".xlsx").Activate
    Dim derniereLigne As Long, donnees As Worksheet
    derniereLigne = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
    MsgBox derniereLigne

    Workbooks(cell.Value & ".xlsx").Sheets("Montant par service").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique2").ChangePivotCache _
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
    SourceData:= _
    ThisWorkbook.Path + "\[" + CStr(cell.Value) + ".xlsx]Feuil1!R1C1:R & derniereLigne & C27" _
    , Version:=6)


    mais j'ai un code erreur la référence n'est pas valide
    0
    1. Sam21
       
      Est ce qu'il y aurait quelqu'un qui pourrait m'indiquer ce que signifie impossible de lire la propriéte pivotTable de la classe worksheet?
      0
  7. Sam21
     
    voici mon code :

    Workbooks(cell.Value & ".xlsx").Activate
    Dim derniereLigne As Integer

    derniereLigne = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row

    Workbooks(cell.Value & ".xlsx").Sheets("Montant par service").Select
    ActiveSheet.PivotTables("Tableau croisé dynamique2").ChangePivotCache _
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
    SourceData:= _
    ThisWorkbook.Path + "\[" + CStr(cell.Value) + ".xlsx]Feuil1!R1C1:R & derniereLigne & C27" _
    , Version:=6)


    l'erreur se produit à partir de Activesheet.pivotTables

    Je vous remercie
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je me demande si tu as appliqué ma suggestion du 9 mars 2021 à 15:28.
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      quand tu utilises les balises, choisi "basic" pour du VBA.
      0
    3. Sam21 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      oui j'avais essayé et ca ne marchais pas
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Sam21
       
      montre ce que tu avais essayé.
      je ne comprends pas le code que tu partages, je ne vois pas comment le corriger.
      explique peut-être ce que penses qu'il devrait faire.
      0
    5. Sam21 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      je voudrais que mon code mon TCD ai pour source de donnée la dernière cellule vide de ma feuill1.
      0