Consultar datos de una hoja y pegarlos en un formato en otra hoja

Para Dante Amor:

Nuevamente por aquí buscando de su excelente disposición para ayudar a los demás, hace pocos dias me colaboró con código para alimentar un formato a partir de información capturada en un listbox, en este caso su ayuda fué sencillamente espectacular, solo me quedó un pequeño detalle con la unidad de medida que no me funcionó con su código, pero lo solucioné con parte del código que tenia antes; ahora necesito realizar una consulta en ese mismo formato con las mismas condiciones, es decir que de acuerdo a los items que existan en la hoja Relacion_Remisiones (Hoja10), me inserte filas en el formato, los datos estan almacenados a partir de la columna E y fila 3, se guarda una fila por cada documento, por lo que la cantidad de registros que se deben traer en la consulta varia según el documento, esta es la razón por la que en el formato que esta en la hoja SOLICITUD (Hoja13) se debe insertar a partir de la fila 12, una fila por cada item que exista en la hoja Relacion_Remisiones para el documento consultado, la consulta la realizo utilizando un boton ubicado en la hoja SOLICITUD, el código que adjunto me realiza la consulta, pero me daña la estrtuctura del formato. Adjunto imágenes de hojas, no me permitio cargar el código que esta en un módulo (Mod_Consulta), la hoja SOLICITUD debe quedar protegida después de la consulta; si es necesario le envio mi archivo

De antemano muchas gracias por su ayuda y espero haber sido claro con la explicación.

1 respuesta

Respuesta
1

En tu imagen no veo la hoja "SOLICITUD".

No puedes pegar el código, tal vez, porque tu código tiene alguna palabra reservada que el editor del foro no la permite.

Pregunta:

Intentaste modificar tu código tomando como referencia el código que yo te envié para insertar filas, eso ayudaría a no tener que hacer todo el código.

Intenta poner tu código (actualizado con lo que te envié en mi código), en una imagen para que yo pueda ver cuál es la palabra reservada.

'Consulta de Remisiones
Sub CONSULTA_RM()
'x Elsamatilde
'Adaptada x Gilber
Dim hrr, busco
Dim filx As Long
Dim colx As Integer, filo As Integer
Dim RM As String
Application.ScreenUpdating = False
ActiveWorkbook.Unprotect "1717171"
Sheets("Remision").Select
Sheets("Remision").Unprotect "1717171"
'Hoja13.Unprotect password:="1717171"
Set hrr = Sheets("Relacion_Remisiones")
hrr.Visible = xlSheetVisible 'Hoja Relacion Remisiones
'busca la RM según valor ingresado en I7 en Hoja Relacion Remisiones
If Range("I7") = "" Then
    MsgBox "Debe ingresar un nro de Remisión para consultar.", , "ERROR"
    Range("I7").Select
    Exit Sub
End If
'limpia hoja de datos anteriores
 If Range("B12") <> "" Then Range("B12:I" & Range("B12").End(xlDown).Row) = ""
 RM = Range("H7") & Range("I7")
 Set busco = hrr.Range("B:B").Find(RM, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then
 'muestra datos en la hoja, previamente la limpia de valores anteriores
    filx = busco.Row
    Range("H8") = hrr.Range("C" & filx) 'Fecha
 '   Range("H9") = hrr.Range("C" & filx) 'Sede que envia
    Range("H10") = hrr.Range("D" & filx) 'Sede que Recibe
 'detalles
    colx = 4   'indica la columna desde donde empeiza el registro de items
    filo = 12
    While hrr.Cells(filx, colx) <> ""
 'Controla si llegó a Observaciones
        If Range("B" & filo) = "Observaciones:" Then
            Rows(filo - 1 & ":" & filo - 1).Copy
            Rows(filo - 1 & ":" & filo - 1).Insert Shift:=xlDown
            Range("B" & filo & ":F" & filo) = ""
            Application.CutCopyMode = False
        End If
        Cells(filo, 2) = hrr.Cells(filx, colx + 1) 'Codigo Item
        Cells(filo, 3) = hrr.Cells(filx, colx + 2) 'Descripcion del Item
        Cells(filo, 6) = hrr.Cells(filx, colx + 3) 'Cantidad
 'se busca Unidad y precio
        Dim buscoit
        Set buscoit = Hoja5.Range("A:A").Find(Cells(filo, 2), LookIn:=xlValues, lookat:=xlWhole)
        If Not buscoit Is Nothing Then
 'pasa unid y precio del item
            Cells(filo, 5) = buscoit.Offset(0, 3) 'Unidad de Medida
         '   Cells(filo, 6) = buscoit.Offset(0, 4)
            Set buscoit = Nothing
        Else
            Range(Cells(filo, 5), Cells(filo, 6)) = ""
        End If
        colx = colx + 3
        filo = filo + 1
    Wend
'si hay más filas de consulta anterior se eliminan
'elimina las filas que sobran
    Dim x As Byte
    If filo < 12 Then filo = 12
    While x = 0
    If Range("B" & filo) <> "Observaciones:" Then
        Range("B" & filo).EntireRow.Delete Shift:=xlUp
        'filo = filo - 1
    Else
        x = 1
    End If
    Wend
Else
    MsgBox "No existe ese nro de RM en hoja Relación_Remisiones", , "ATENCIÓN"
End If
'Volver a ocultar la hoja Relación
hro.Visible = xlSheetVeryHidden
Hoja13.Protect password:="1717171"
ActiveWorkbook.Protect "1717171"
End Sub

Ups como dicia un personaje de su tierra, se me chispotio, no es SOLICITUD, es Remision, lo que pasa es que estoy trabajando en un formato para solicitudes y tenia ese titulo en micabeza, pero lo que neesito es para la hoja Remision que esta en la imagen; ahora si me dejo adjuntar el código

Perdona, pero no entiendo qué necesitas.

Podrías explicar nuevamente. Pon una imagen de la hoja "remisión" antes de hacer cambios. Pon otra imagen de la hoja "Relacion_Remisiones", otra imagen de la hoja "remisión" con el resultado esperado. Por último, comenta brevemente qué hiciste.

Ok, primero que todo muchísimas gracias por responder; la imagen de la hoja Remision es la que envíe al inicio, lo que quiero es realizar una consulta por número de documento de la información que se va almacenando en la hoja Relacion_Remisiones que es la otra imagen que adjunté al inicio, el número del documento queda guardado en la Columna B de la hoja Relacion_Remisiones, el código que anexé me funciona tomando el número que esta en la columna A de la Hoja Relacion_Remisiones, este numero es el que se asigna a la celda I7 de la hoja Remsion, pero esta sin el prefijo, el nú, por lo tanto el número se puede repetir, esa es mi primer necesidad, es decir poder realizar la consulta por el número guardado en la columna B, el otro tema es que cuando el documento consultado tiene bastantes registros, no me respeta la estrtucura del formato en la hoja Remision, por eso lo que necesito es que al igual que solución que muy amablemente me suministró para capturar la información en el formato (Remision), se inserten filas por cada item que exista en la hoja Relacion_Remisiones, en esta hoja se guarda una fila por cada número de documento, los items se guardan a partir de la columna E, tres columnas por cada item (código del item, descripción del item, cantidad), esos datos se repiten para cada item en el documento.

Mis disculpas por la confusión al inicio con el nombre de la hoja SOLICITUD, cuando realmente debe ser Remision.

Espero ahora si haberme hecho entender.

Una ves más mil y mil gracias por su apoyo incondicional y desinteresado

Este numero es el que se asigna a la celda I7 de la hoja Remsion, pero esta sin el prefijo, el nú, por lo tanto el número se puede repetir, esa es mi primer necesidad,

Supongo que eso se resuelve con esto que tienes en tu código:

RM = Range("H7") & Range("I7")


El otro tema es que cuando el documento consultado tiene bastantes registros, no me respeta la estrtucura del formato en la hoja Remision, por eso lo que necesito es que al igual que solución que muy amablemente me suministró para capturar la información en el formato (Remision), se inserten filas por cada item que exista en la hoja Relacion_Remisiones, en esta hoja se guarda una fila por cada número de documento, los items se guardan a partir de la columna E, tres columnas por cada item (código del item, descripción del item, cantidad), esos datos se repiten para cada item en el documento.

Esa parte no la entiendo. En tu código no veo nada similar a lo que te pasé. Podrías intentar modificar tu código con lo que yo te envié.

En tu ejemplo en la hoja "remisión" tienes ADM-18, pero en la hoja "Relacion_Remisiones", no veo ningún número ADM-18, por eso no entiendo qué quieres pasar de una hoja a otra hoja. Si puedes explicar tu ejemplo de la imagen.

Amigo Dante Amor, mis mas sincero respeto, ahora entiendo cuanta paciencia hay que tener para lograr comprender que es lo que quiere el usuario; el código que me envio era para alimentar el formato con la información contenida en el listbox, esa parte ya me funciona muy bien y en gran parte gracias a usted, esa información que me queda en el formato posteriormente la guado en la hoja Relacion_Remisiones tal y como lo comenté anteriormente, ahora quiero tener una consulta por número de documento, para el caso del númnero del documero puedes reemplazar 18 por 8, la verdad cuando tome la imagen no me fijé que tenia ese número 18, pequeños detalles que para estos casos son supremamente importantes; lo que no he logrado hacer que me funcione bien es que cuando los items que están en el documento consultado supera las filas disponibles antes de la palabra "Observaciones:" de la columna B de la hoja Remision (la del formato), entonces se inserte la cantidad de filas necesarias para pasar toda la información que contenga el número de documento consultado, este dato esta en la hoja Relacion_Remisiones.

Espero finalmente haberme hecho entender

Muchas gracias por su paciencia

Puedes reemplazar 18 por 8

Los datos del adm-8 no coinciden con tu ejemplo.

Puedes recrear el ejemplo y me explicas qué necesitas.

¿Cuántos ADM-18 pueden existir en la columna "B" en la hoja "Relacion_Remisiones"?

Si solamente va a existir un registro con ADM-18, entonces no entiendo qué quieres ajustar, siempre vas a tener 3 líneas en la hoja "remisión". O no es así?

El tema del consecutivo ya lo solucioné, lo que necesito es poder consultar la información guardada para cada número de documento la cual es almacenada en la hoja Relacion_Remisiones; en la nueva imagen que anexo se observa el formato Remision con dos filas disponibles para pegar información, (Filas 12 y 13), el documento ADM - 1 de la imagen, tiene 16 items en la hoja Relacion_Remisiones, es decir que en este caso necesitaría adicionar 14 filas más al formato, en la imagen de la hoja relacion_Remisiones solo se observan 3 items, (1205 metronidazol tabletas con 80 unidades, item 1213, nistatina, con 1 unidad, item 1272 fluconazol con 50 unidades, los demás están hacia la derecha en la misma fila 3, pero no se observan en la imagen; la cantidad de items por documentos es variable ya que hay documentos que pueden tener hasta 130 items, al pasar la información contenida en la hoja Relacion_Remisiones al formato en la hoja Remision, se debe conservar la última parte del formato, es decir de las filas 14 a 20 de la imagen del úlltimo formato Remisión que adjunté, la consulta la realizo utilizando el botón consulta_Remisiones que esta en la misma imagen.

Faltó la imagen con el resultado. Esto es lo que te pedí anteriormente:

Pon una imagen de la hoja "remisión" antes de hacer cambios. Pon otra imagen de la hoja "Relacion_Remisiones", otra imagen de la hoja "remisión" con el resultado esperado. Por último, comenta brevemente qué hiciste.

Te pedí 3 imágenes. Para ti es obvio porque conoces tu información y la estás viendo. Yo no tengo idea de tus datos ni cómo están, ni cómo quieres el resultado.


Insisto, intenta utilizar mi código para hacer crecer el formato y donde tengas dificultades te ayudo.

'Consulta de Remisiones
Sub CONSULTA_RM()
'x Elsamatilde
'Adaptada x Gilber
Dim hrr, busco
Dim filx As Long
Dim colx As Integer, filo As Integer
Dim RM As String
Dim f As Range, sh As Worksheet
Application.ScreenUpdating = False
Set sh = Sheets("Remision")
ActiveWorkbook.Unprotect "1717171"
sh.Select
sh.Unprotect "1717171"
'Hoja13.Unprotect password:="1717171"
Set hrr = Sheets("Relacion_Remisiones")
hrr.Visible = xlSheetVisible 'Hoja Relacion Remisiones
'busca la RM según valor ingresado en I7 en Hoja Relacion Remisiones
  If Range("I7") = "" Then
    MsgBox "Debe ingresar un nro de Remisión para consultar.", , "ERROR"
    Range("I7").Select
    Exit Sub
  End If
  Set f = sh.Range("B:I").Find("OBSERVACIONES", , xlValues, xlPart, , xlPrevious, False)
  If Not f Is Nothing Then
    If f.Row > 14 Then sh.Range("B14:B" & f.Row - 1).EntireRow.Delete
  End If
 ' este codigo No trae el dato de la U.de medida
 '     Set f = Hoja5.Range("A:A").Find(.List(i, 2), , xlValues, xlWhole)
 '     If Not f Is Nothing Then
 '       sh.Cells(j, 5) = f.Offset(, 3)  'u medida
 '     End If
 '     j = j + 1
 '   Next
'  End With
'Aquí empieza el código anterior
'Limpia hoja de datos anteriores
'  If Range("B12") <> "" Then Range("B12:I" & Range("B12").End(xlDown).Row) = ""
'Numero Dcmto
  RM = Range("H7") & Range("I7")
'Busco el Dcmto en Relacion_Remisiones
  Set busco = hrr.Range("B:B").Find(RM, LookIn:=xlValues, lookat:=xlWhole)
   If Not busco Is Nothing Then
'muestra datos en la hoja
    filx = busco.Row
    Range("H8") = hrr.Range("C" & filx) 'Fecha
'   Range("H9") = hrr.Range("C" & filx) 'Sede que envia
    Range("H10") = hrr.Range("D" & filx) 'Sede que Recibe
'detalles
    colx = 4   'indica la columna desde donde empeiza el registro de items
    filo = 12
    While hrr.Cells(filx, colx) <> ""
'Controla si llegó a Observaciones
        If Range("B" & filo) = "Observaciones:" Then
            Rows(filo - 1 & ":" & filo - 1).Copy
            Rows(filo - 1 & ":" & filo - 1).Insert Shift:=xlDown
            Range("B" & filo & ":F" & filo) = ""
            Application.CutCopyMode = False
        End If
        Cells(filo, 2) = hrr.Cells(filx, colx + 1) 'Codigo Item
        Cells(filo, 3) = hrr.Cells(filx, colx + 2) 'Descripcion del Item
        Cells(filo, 6) = hrr.Cells(filx, colx + 3) 'Cantidad
'se busca Unidad y precio
        Dim buscoit
        Set buscoit = Hoja5.Range("A:A").Find(Cells(filo, 2), LookIn:=xlValues, lookat:=xlWhole)
        If Not buscoit Is Nothing Then
'pasa unid y precio del item
            Cells(filo, 5) = buscoit.Offset(0, 3) 'Unidad de Medida
         '   Cells(filo, 6) = buscoit.Offset(0, 4)
            Set buscoit = Nothing
        Else
            Range(Cells(filo, 5), Cells(filo, 6)) = ""
        End If
        colx = colx + 3
        filo = filo + 1
    Wend
End If
'Volver a ocultar y proteger la hoja Relación
  hrr.Visible = xlSheetVeryHidden
  hrr.Protect password:="1717171"
  sh.Protect password:="1717171"
  ActiveWorkbook.Protect "1717171"
End Sub

Ok, finalmente creo que lo logré, adjunte el código como me quedó, solo me resta si te es posible lo siguiente:

1- Cuando el documento consultado no exista en la relación, emitir un mensaje informandolo.

2- Me gustaría muchísimo poder utilizar el código que me envío para buscar la unidad de medida, es mucho más corto, solo que no me trae el dato el cual esta en la columna D de la hoja Productos (Hoja5).

De antemano mil disculpas por las molestias generadas y muchísimas gracias por su gran apoyo.

1- Cuando el documento consultado no exista en la relación, emitir un mensaje informandolo.

Después de esta línea:

Set busco = hrr.Range("B:B").Find(RM, LookIn:=xlValues, lookat:=xlWhole)

Pon estas líneas:

if busco is Nothing then
  msgbox "No existe el documento"
  exit sub
end if


2- Me gustaría muchísimo poder utilizar el código que me envío para buscar la unidad de medida, es mucho más corto, solo que no me trae el dato el cual esta en la columna D de la hoja Productos (Hoja5).

      Set f = Hoja5.Range("A:A").Find(.List(i, 2), , xlValues, xlWhole)
      If Not f Is Nothing Then
        sh.Cells(j, 5) = f.Offset(, 3)  'u medida
      End If

Cambia el 3 por el número de columna que necesitas y le restas 1, si quieres la columna E, entonces el número de columna es 5 y le restas 1, entonces 5 - 1 = 4, cambias el 3 por un 4.



De antemano mil disculpas por las molestias generadas y muchísimas gracias por su gran apoyo.

Ninguna molestia, pero para que recibas una ayuda más efectiva, es importante que nos ayudes a ayudarte, poniendo información completa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas