Buscar celdas no vacias en un rango y copiar datos en otra hoja

11/12/2006 - 13:27 por weller | Informe spam
Hola a todos,

Llevo semanas intentando encontrar solución a esta duda en otro foro,
pero todavía no he podido resolverla.

Tengo un archivo con 31 hojas (1 por cada día del mes). Mi intención
es encontrar la forma de que en la hoja 32 busque las celdas que
contengan datos del rango repartido en las primeras 31 hojas y haga una
lista en la hoja 32.

Me explico: en la primera celda de la hoja 32 copia el valor de la
primera celda no vacia del rango de las hojas 1-31, en la celda de
debajo copia el valor de la segunda celda no vacia que encuentre en el
mismo rango, así sucesivamente.

Un experto de otro foro me ha enviado una macro que lo hace, pero solo
he conseguido que lo haga con el rango de una sola hoja, no de las 31
hojas:

Sub copiar() 'Título de la macro
x = 8 ' Variable inicial correspondiete a la primer fila
For Each celda In Range("'1'!B5:B29") 'Rango que abarca las filas a
validar
If celda <> 0 Then 'Si la variable "celda" es diferente de cero
entonces
Cells(x, 1) = celda 'Copia los valores mayores a cero a la
columna 2
x = x + 1 ' Va copiando de 1 en 1 las celdas con valores
mayores a cero
End If 'Fin de la condición
Next 'Sigue para la siguiente celda el mismo proceso
End Sub

A ver si en este foro encuentro una solución.

Gracias de antemano.

saludos

David

Preguntas similare

Leer las respuestas

#11 weller
15/12/2006 - 20:03 | Informe spam
Ivan, Juan y resto del foro,

Como ya os he comentado por mail, he dado con una solución que se
aproxima mucho a lo que estaba buscando. Os la he enviado por mail
junto con los agradecimientos por la ayuda prestada.

A todos los que hayan seguido este post y estén interesados en recibir
el archivo o alguna explicación, que me escriban a y
por supuesto que intentaré echar un cable.

Gracias de nuevo a todos.

Un saludo,

David.
Respuesta Responder a este mensaje
#12 Ivan
16/12/2006 - 04:00 | Informe spam
hola David

viendo tu archivo me da la impresion de que no has probado la ultima
macro que te puse.

en realidad creo que hace exactamente lo que quieres pero solo en la
hoja total, como planteabas

este nuevo codigo es el mismo pero ademas le añade a la hoja de cada
vendedor sus visitas, referencia y dia(en la columna c, que tienes
oculta)

si quieres probarlo te comento los requisitos, mezcla de los dos
archivos ->

1º.-el formato seria el mismo que el de este ultimo archivo excepto
para la hoja total, que seria el del anterior (incluido el boton que
cubre la celda a8 <por eso los datos en esta hoja empiezan a partir de
la fila 9>y que tenia asignada la macro )

2º.-para las pruebas debes desproteger todas las celdas y hojas y
mostrar las columnas ocultas de las hojas de cada vendedor, borrando lo
que tengas excepto los encabezados y las fechas. Si te convence el
archivo y quieres mantener protegidas las hojas, existen opciones de
proteccion que permiten las macros.

3º.-los nombres de los vendedores deben ir tal cual los tienes, tanto
en los encabezados de columna como en los nombres de las hojas
('Visitas Marivi', con el espacio incluido), la fecha de cada dia en A1
como lo tienes

4º las hojas de los vendedores tienen que llevar en a1 (o a2, o a3, o
a...), un encabezado, o cualquier cosa escrita. Lo importante es que
haya al menos una celda de la columna a con algo, a partir de ella se
cargaran los datos

5º,- pon el codigo en un modulo normal (por cierto, no es necesario
que uses un modulo para cada macro, puedes ponerlas todas en el mismo)

creo que con esto valdria.

si quieres introduce visitas en diferentes hojas, a diferentes
vendedores y dejando filas vacias, pulsa F5 (o asignale la macro a un
boton),y mira a ver que tal

y OJO a los saltos de linea

un saludo
Ivan

Sub copiar5()
Dim hj As Worksheet, x As Long, col As Byte, tt As Long
Dim celda As Range, ltCol As String, ltColTT As String
Dim Vendedor As String
For Each hj In ThisWorkbook.Worksheets
With hj
If .Name <> "TOTAL" And Left(.Name, 6) <> "Visita" Then
For col = 2 To .UsedRange.Columns.Count Step 2
ltCol = Chr(64 + col): ltColTT = Chr(64 + col - 1)
Vendedor = .Range(ltCol & 1)
For Each celda In .Range(ltCol & "5:" & ltCol & 29)
If celda <> 0 And celda <> "" Then
With Worksheets("TOTAL")
x = .Range(ltColTT & 65536).End(xlUp).Row + 1
If x < 9 Then x = 9
.Cells(x, col - 1) = celda
.Cells(x, col) = celda.Offset(0, 1)
End With
With Worksheets("Visitas " & Vendedor).[a65536] _
.End(xlUp).Offset(1, 0)
.Value = celda
.Offset(0, 1) = celda.Offset(0, 1)
.Offset(0, 2) = hj.[a1]
End With
x = x + 1
End If
Next
With Worksheets("TOTAL")
tt = .Range(ltColTT & 65536).End(xlUp).Row
If tt < 8 Then tt = 8
.Range(ltColTT & 5) = tt - 8
End With

Next
End If
End With
Next
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida