Cambiar la fuente de los TCD con macro vba Excel

Sam2021 -  
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   -
Hola

Con el grabador de macros, vi que para cambiar la fuente de datos el código era el siguiente

 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)


el problema es que en lugar de la ruta "R:\10. RECETTES\10.12. RESTES A RECOUVRER\2020\10_RAR au 31 decembre 2020\test vba\
me gustaría usar "ThisWorkbook.Path". que si no estoy equivocado, permite usar la macro en cualquier directorio. pero no consigo hacerlo

Además, quiero modificar el nombre del archivo "Reste à recouvrer_BAA_2021_DAJEP.xlsx" poniendo un nombre que cambie dependiendo del nombre del archivo. porque esta macro la incrusto en otra que me crea muchos archivos. hasta ahora usaba para crear el nombre del archivo esto cell.Value & ".xlsx"

Ejecutaré esta macro en un archivo, y quiero cambiar la fuente de datos de las tablas dinámicas en otro archivo....

Esperando que esto esté claro..
te agradezco por tu ayuda.

7 respuestas

  1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 1 588
     
    hola,
    ¿está el archivo fuente de datos en la misma carpeta que el archivo que contiene la macro?
    si es así, tal vez:
    ActiveSheet.PivotTables("Tabla dinámica2").ChangePivotCache _ ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:= _ ThisWorkbook.Path + "\[" + cstr(cell.Value) + ".xlsx]Hoja1!C1:C27" _ , Version:=6)
    0
  2. Sam2021
     
    Hola
    lamento la demora en la respuesta...
    funciona de maravilla, le agradezco
    ¿sería posible, en lugar de Feuil1!C1:C27, indicar que se seleccione hasta la última celda no vacía?

    Atentamente

    Sandie
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿Has probado C:C en lugar de C1:C27?
      0
  3. Sam21
     
    c1:c27 corresponde a la columna A a AA (27 columnas). C:C no me ayudará porque quiero que la selección se haga de A1 hasta AA con la última fila no vacía.
    ¿Es esto más claro? ¿Alguien puede ayudarme?
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ¿La tabla dinámica tiene en cuenta las filas vacías?
      0
      1. Sam21 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         
        sí y no quiero
        0
      2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Sam21
         
        ¿No es una opción del TCD?
        0
      3. Sam21 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
         
        no, eso no funciona para las líneas.
        estaba pensando en seleccionar tantas celdas no vacías mediante un bucle.
        0
      4. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Sam21
         
        ¿Puedes compartir tu archivo?
        0
  4. Sam21
     
    el archivo es demasiado voluminoso
    he hecho esto pero me da error de compilación desde la línea ActiveSheet.PivotTable. ¿dónde está mi error?
    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 Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      ".xlsx]Hoja1!A1:AA" & ultimaLinea
      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      reduce entonces el tamaño de tu archivo, de manera que el problema siga presente.
      0
  5. Sam21
     
    A1: AA no parece ser adecuado. Así que he probado esto

    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)


    pero tengo un error de código, la referencia no es válida.
    0
    1. Sam21
       
      ¿Hay alguien que podría indicarme qué significa "imposible leer la propiedad pivotTable de la clase worksheet"?
      0
  6. Sam21
     
    Voici ma traduction : ```html

    Workbooks(cell.Value & ".xlsx").Activa
    Dim ultimaFila As Integer

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

    Workbooks(cell.Value & ".xlsx").Sheets("Monto por servicio").Select
    ActiveSheet.PivotTables("Tabla dinámica2").ChangePivotCache _
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
    SourceData:= _
    ThisWorkbook.Path + "\[" + CStr(cell.Value) + ".xlsx]Feuil1!R1C1:R & ultimaFila & C27" _
    , Version:=6)


    El error ocurre a partir de ActiveSheet.PivotTables

    Le agradezco ```
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      me pregunto si aplicaste mi sugerencia del 9 de marzo de 2021 a las 15:28.
      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      cuando utilices las etiquetas, elige "básico" para VBA.
      0
    3. Sam21 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       
      sí, lo intenté y no funcionaba.
      0
    4. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > Sam21
       
      muestra lo que habías intentado.
      no entiendo el código que compartes, no veo cómo corregirlo.
      quizás explica lo que piensas que debería hacer.
      0
    5. Sam21 > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       
      me gustaría que mi código de mi TDC tenga como fuente de datos la última celda vacía de mi hoja1.
      0