Imprimir solo celdas con valores en rangos variables, Excel 2003

Para Elsa Matilde

Buenos días, necesito crear una base de datos utilizando macros. Adjunto una imagen de como es el libro en el que trabajo:

En la imagen se ven dos formularios iguales, cada uno con diez registros. Lo que sucede es que muchas veces no se completan esos diez registros y yo necesito crear una base de datos solo con los valores que lleguen a aparecer en pantalla.

Hablando sobre el primer formulario, lo que necesito llevar sí o sí de la hoja "Ordenes despacho" a "BBDD" son las celdas (cuando tengan valores) C1, G1 y K1 y los valores que existan en el rango A3:K22. Estos datos deberían acomodarse en A2, B2, C2, D2, E2, F2, G2, H2 e ir bajando a la siguiente fila vacía de la hoja "BBDD" para el siguiente registro y así sucesivamente.

Lo mismo debería suceder con el segundo formulario que arranca desde A24.

1 respuesta

Respuesta
1

Te adelanto parte de la macro porque al llegar al pegado de los detalles no coinciden los rangos que indicaste.

Sub paseBBDD()
'x Elsamatilde
Dim hbd
Dim filx As Long
Set hbd = Sheets("BBDD")
Set hor = Sheets("Ordenes despacho")
'guarda la primer fila destino en hoja BBDD
filx = hbd.Range("A" & Rows.Count).End(xlUp).Row + 1
'se ejecuta desde Ordenes
hor.Select
'se controa si hay datos en encabezado
If [C1] = "" Or [G1] = "" Or [K1] = "" Then
    MsgBox "Faltan datos", , "ERROR"
    [C1].Select
    Exit Sub
End If
'se controla si hay conceptos a partir de A3
If [A3] = "" Then
    MsgBox "No hay filas para pasar.", , "ERROR"
    [A3].Select
    Exit Sub
End If
'se guardan datos de encabezado
hbd.Range("A" & filx) = [C1]
hbd.Range("B" & filx) = [G1]
hbd.Range("C" & filx) = [K1]
'se guardan datos de detalle ----FALTA CONFIRMAR
End Sub

Dejame una imagen con los encabezados de la hoja BBDD .

Además qué col en Despacho tienen datos... parecen celdas combinadas... sino nos pasamos de H2.

Seguramente los datos fijos van en A:C y a partir de D:---- el resto de los detalles, por lo menos así sería una Base de datos. Confirma x favor.

Sdos.

Elsa

¡Gracias! Aquí te adjunto la imagen de la hoja "BBDD"... siempre deberían copiarse aquellas filas que tengan valores visibles en "Ordenes de despacho", ya que en esta hoja uso la función buscarv en la mayoría de las filas.

Recibido... pero tené algo de paciencia que estoy muy ocupada estos días.

Sdos!

¡Gracias! No hay drama

Te dejo nueva macro. Utilicé un bucle que se repite 2 veces, aunque falta definir qué hacer si no se encuentran datos en la 1er tabla: ¿Continuar con la 2da o finalizar el proceso? Por ahora finaliza el proceso.

Sub paseBBDD()
'x Elsamatilde
Dim hbd
Dim filx As Long, filo As Integer
Set hbd = Sheets("BBDD")
Set hor = Sheets("Ordenes despacho")
'guarda la primer fila destino en hoja BBDD
filx = hbd.Range("A" & Rows.Count).End(xlUp).Row + 1
'se ejecuta desde Ordenes
hor.Select
filo = 1  '1er fila de datos 1er tabla .... VERIFICAR !
'el proceso se repite 2 veces
For x = 1 To 2
'se controa si hay datos en encabezado
If Range("C" & filo) = "" Or Range("G" & filo) = "" Or Range("K" & filo) = "" Then
    MsgBox "Faltan datos de encabezados.", , "ERROR"
    Range("C" & filo).Select
    Exit Sub
End If
'se controla si hay conceptos a partir de A3 o A26 (ver 1)
filo = filo + 2
If Range("A" & filo) = "" Then
    MsgBox "No hay filas para pasar.", , "ERROR"
    Range("A" & filo).Select
    Exit Sub
End If
While Range("A" & filo) <> ""
    'se guardan datos de encabezado
    hbd.Range("A" & filx) = Range("A" & filo) 'of
    hbd.Range("B" & filx) = Range("G" & filo) 'destino
    hbd.Range("C" & filx) = Range("B" & filo) 'cliente
    hbd.Range("D" & filx) = Range("B" & filo) 'producto
    hbd.Range("E" & filx) = Range("K" & filo) 'cantidad
    filo = filo + 1
    filx = filx + 1
Wend
'terminó con 1 tabla, sigue con la otra, actualiza el nro de fila
If x = 1 Then filo = 24
Next x
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas