Crear una hoja resumen de otras celdas

BUenas tardes, tengo una base de datos en excel, en al que esta capturado el stock de mi almacen. Tengo varias hojas donde según el tipo de material se captura.
Requiero una hoja resumen donde se muestre todos aquellos items que estén por debajo del mínimo establecido.
Pero no he podido hacer que la macro lea todas las hojas y arroje los faltantes.
Hice este código pero es solo para una hoja12, al repetir el código no lee las celdas de la siguiente hoja ya que si la hoja12 tenia 20 faltantes en la hoja10 se empieza a contar a partir de la fila 20
Dim Cant As Variant
Dim codigo As Variant
Dim Exis As Variant
Dim Max As Variant
Dim Min As Variant
Do Until I = 300
I = I + 1
Proceso = Worksheets(Hoja12.Name).Cells(I, 6)
Ensamble = Worksheets(Hoja12.Name).Cells(I, 3)
Desc = Worksheets(Hoja12.Name).Cells(I, 4)
Cant = Worksheets(Hoja12.Name).Cells(I, 13)
Max = Worksheets(Hoja12.Name).Cells(I, 12)
Min = Worksheets(Hoja12.Name).Cells(I, 11)
Exis = Worksheets(Hoja12.Name).Cells(I, 12)
If Exis > Min Then Exit Do
codigo = Worksheets(Hoja12.Name).Cells(I, 1)
If codigo = "" Then Exit Do
Worksheets(Hoja23.Name).Cells(I, 4) = codigo
Worksheets(Hoja23.Name).Cells(I, 1) = Hoja12.Name
Worksheets(Hoja23.Name).Cells(I, 2) = Proceso
Worksheets(Hoja23.Name).Cells(I, 3) = Ensamble
Worksheets(Hoja23.Name).Cells(I, 5) = Desc
Worksheets(Hoja23.Name).Cells(I, 6) = Exis
Worksheets(Hoja23.Name).Cells(I, 7) = Cant
Loop
Do Until I = 300
I = I + 1
Proceso = Worksheets(Hoja10.Name).Cells(I, 6)
Ensamble = Worksheets(Hoja10.Name).Cells(I, 3)
Desc = Worksheets(Hoja10.Name).Cells(I, 4)
Cant = Worksheets(Hoja10.Name).Cells(I, 13)
Max = Worksheets(Hoja10.Name).Cells(I, 12)
Min = Worksheets(Hoja10.Name).Cells(I, 11)
Exis = Worksheets(Hoja10.Name).Cells(I, 12)
If Exis > Min Then Exit Do
codigo = Worksheets(Hoja10.Name).Cells(I, 1)
If codigo = "" Then Exit Do
Worksheets(Hoja23.Name).Cells(I, 4) = codigo
Worksheets(Hoja23.Name).Cells(I, 1) = Hoja12.Name
Worksheets(Hoja23.Name).Cells(I, 2) = Proceso
Worksheets(Hoja23.Name).Cells(I, 3) = Ensamble
Worksheets(Hoja23.Name).Cells(I, 5) = Desc
Worksheets(Hoja23.Name).Cells(I, 6) = Exis
Worksheets(Hoja23.Name).Cells(I, 7) = Cant
Loop

1 respuesta

Respuesta
1
Primero debes determinar cuantas hojas recorrerás.
Segundo, no le pases la referencia por nombre así:
Worksheets(Hoja12. Name).Cells(I, 6)
Prueba asi:
Sheets(i).Cells(I, 6)
En donde(i) es el indice de la hoja
Ok recorrerá 13 hojas
de la hoja 10 a la 22
En la 23 es en donde pienso hacer el resumen
¿Alguna idea para que recorra todas las hojas y vaya almacenando la información?
En mi código actual si en la hoja resumen ya hay 30 campos utilizados por la hoja 10 digamos cuando analiza la hoja 11 ya toma en cuenta los primeros 30 campos empieza por el 31... y así sucesivamente hasta que llega al punto que no me analiza la siguiente hoja.
¿Me podrías ayudar kn esto?
De antemano gracias!
Para recorrer de la hoja 10 a la 22 lo haces con un bucle, así:
for i=10 to 22
paso= sheets(i).cells(1,1)
next
En este ejemplo le pasa el valor de la celda A1 de cada hoja una por una desde la 10 a la 22 a la variable paso, ves lo haces utilizando i como indice y no el nombre de la hoja
he notado que en tu código estas tomando la forma
Proceso = Worksheets(Hoja12.Name).Cells(i, 6)
Por cuanto a la variable proceso le estas pasando el valor de las celdas de una misma hoja que es la 12 y ati te interesa ( por lo que entendí pasarle desde la 10 a la 22
entonces debería ser
Proceso = sheets(indice).Cells(i, 6)
en donde indice deber comenzar desde 10 hasta 22
for indice=10 to 22
Proceso = sheets(indice).Cells(i, 6)
next
Así el resto, la misma forma
Me ha servido bastante el bucle que me recomndaste pero sigo con el mismo problema.
Ahora me arroja la primer celda de la hoja 10, la segunda celda de la hoja 11, la tercera de la hoja 13 y así sucesivamente
Creo saber cual es el problema pero no he podido resolverlo
For i = 10 To 22
x = x + 1
Proceso = Sheets(i).Cells(x, 6)
Ensamble = Sheets(i).Cells(x, 3)
Desc = Sheets(i).Cells(x, 4)
Cant = Sheets(i).Cells(x, 13)
Exis = Sheets(i).Cells(x, 12)
codigo = Sheets(i).Cells(x, 1)
Sheets("REPORTE").Cells(x, 4) = codigo
Sheets("REPORTE").Cells(x, 2) = Proceso
Sheets("REPORTE").Cells(x, 3) = Ensamble
Sheets("REPORTE").Cells(x, 5) = Desc
Sheets("REPORTE").Cells(x, 6) = Exis
Sheets("REPORTE").Cells(x, 7) = Cant
Podrías ayudarme con esto, a lo mejor malinterprete tu consejo...
La verdad es que me estoy iniciando en esto de las macros.
Gracias!
A por le estas incrementando en 1 cada vuelta del bucle, por lo tanto en la hoja siguiente la celda sera, una fila más abajo en la misma columna. Si deseas que sea siempre la misma celda de cada hoja no utilices una variable como referencia de la fila, utiliza un parámetro fijo dale el numero directamente
elimina esto: x = x + 1
luego deja las referencias fijas tipo:
Proceso = Sheets(i).Cells(1, 6)
Es decir cada hoja del libro tomara la celda fila 1 columna 6, es decir F1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas