Visual Basic - Rango dinámico dentro una función

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 14
Ha aumentado su posición en 6 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Rango dinámico dentro una función

Publicado por javier (8 intervenciones) el 09/05/2018 18:46:13
Buenas! Estoy intentando automatizar un reporte diario pero ya me estoy volviendo loco de lo pegado que me encuentro. Logré programar las tablas dinámicas (con rango variable o dinámico, osea, la tabla dinámica toma un rango fijo de columnas pero toma un rango variable de filas, ya que la cantidad de filas varia con cada reporte. La idea ahora es llenar la ultima tabla normal en la hoja "resumen" en la cual tengo que poner formulas desde la celda B2 ((=+CONTAR.SI('Base puntos'!A3:A74;"*")) que tomen la información de la hoja "Base puntos" y q tenga un rango variable o dinámico (El número de filas creadas por la tabla dinámica es variable,osea que tiene que tomar desde la fila A3 hasta la ultima fila con datos, en vez de un rango fijo como está escrito en la formula). Estoy intentando hacerlo de la misma manera que cree las tablas dinámicas, contando el numero de filas pero me quedé pegado, no sé como poner ese rango dinámico dentro de la función.

Adjunto excel en zip con el cual estoy corriendo el código.

El código que he creado hasta ahora (funcional) es el stge :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Sub TD()
 
Dim Ultima As Long
 
    Ultima = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
Range("N2").Select
ActiveCell.FormulaR1C1 = "Aceptado"
    Range("O2").Select
ActiveCell.FormulaR1C1 = "Rechazado"
Range("N3").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-3]=""aceptado"",1,0)"
Range("O3").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-4]=""rechazado"",1,0)"
Range("N3").Select
    Selection.AutoFill Destination:=Range("N3:N" & Ultima)
Range("O3").Select
    Selection.AutoFill Destination:=Range("O3:O" & Ultima)
 
 
 
 
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
       SourceData:="srirmam!R2C1:R" & Ultima & "C15", _
       Version:=6).CreatePivotTable _
       TableDestination:="Hoja1!R1C1", _
       TableName:="TablaDinámica2", _
       DefaultVersion:=6
    Sheets("Hoja1").Select
    Cells(3, 1).Select
 
 
    Sheets("Hoja1").Select
    ActiveSheet.Name = "Base Rut"
ActiveSheet.PivotTables("TablaDinámica2").AddFields RowFields:="RUT VERIFICADO"
ActiveSheet.PivotTables("TablaDinámica2").AddDataField ActiveSheet.PivotTables( _
        "TablaDinámica2").PivotFields("aceptado"), "Suma de Aceptado", xlCount
ActiveSheet.PivotTables("TablaDinámica2").AddDataField ActiveSheet.PivotTables( _
        "TablaDinámica2").PivotFields("rechazado"), "Suma de Rechazado", xlCount
ActiveSheet.PivotTables("TablaDinámica2").AddDataField ActiveSheet.PivotTables( _
        "TablaDinámica2").PivotFields("TRANSACCION"), "Cuenta de TRANSACCION", xlCount
 
 
Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
       SourceData:="srirmam!R2C1:R" & Ultima & "C15", _
       Version:=6).CreatePivotTable _
       TableDestination:="Hoja2!R1C1", _
       TableName:="TablaDinámica3", _
       DefaultVersion:=6
Sheets("Hoja2").Select
    Cells(3, 1).Select
Sheets("Hoja2").Select
    ActiveSheet.Name = "Base puntos"
 
With ActiveSheet.PivotTables("TablaDinámica3").PivotFields("NOMBRE PC")
    .Orientation = xlRowField
    .Position = 1
End With
 
 
ActiveSheet.PivotTables("TablaDinámica3").AddDataField ActiveSheet.PivotTables( _
    "TablaDinámica3").PivotFields("TRANSACCION"), "Cuenta de TRANSACCION", xlCount
 
 
With ActiveSheet.PivotTables("TablaDinámica3").PivotFields( _
    "RESULTADO VERIFICACION")
    .Orientation = xlColumnField
    .Position = 1
End With
Sheets.Add After:=ActiveSheet
    Sheets("Hoja3").Select
    Sheets("Hoja3").Name = "resumen"
    ActiveCell.FormulaR1C1 = "Métrica"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Resultado"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "N° de puntos con actividad"
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "N° de transacciones"
    Range("A4").Select
    ActiveCell.FormulaR1C1 = "RUN verificados"
    Range("A5").Select
    ActiveCell.FormulaR1C1 = "RUN aceptados"
    Range("A6").Select
    ActiveCell.FormulaR1C1 = "RUN rechazados"
    Range("A7").Select
    ActiveCell.FormulaR1C1 = "RUN con mas de 10 aceptado"
    Range("A8").Select
    ActiveCell.FormulaR1C1 = "RUN aprobados al primero intento"
    Range("A9").Select
    ActiveCell.FormulaR1C1 = "RUN aprobados con menos de 3 rechazos"
    Range("A10").Select
    ActiveCell.FormulaR1C1 = "RUN aprobados con al menos 3 rechazos previos"
    Range("A11").Select
    ActiveCell.FormulaR1C1 = "Numero de intentos por RUN verificado"
    Range("A13").Select
    ActiveCell.FormulaR1C1 = "N° de RUN"
    Range("A14").Select
    ActiveCell.FormulaR1C1 = "N° de firmas promedio por RUN"
    Columns("B:B").Select
    Columns("A:A").EntireColumn.AutoFit
End Sub

Con la ultima parte del código estoy creando el resumen de todas las tablas creadas anteriormente con el codigo... En la hoja "resumen" necesito ir poniendo formulas desde la celda B2 (=+CONTAR.SI('Base puntos'!A3:A74;"*") y que esta formula ocupe un rango dinámico (columnas fijas, filas variables), que busque el rango en la hoja "Base puntos", que vaya desde la celda A3 hasta la ultima linea con datos para poner el resultado en la hoja "resumen" celda B2.

Se agradecería un montón una ayudita!

De antemano, muchisimas gracias.

Atte,
Javier del Campo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder