Macro para buscar datos de otra hoja mismo libro

Quisiera saber que estoy haciendo mal :C con este código que según yo modifique:

Sub busca()
'On Error Resume Next
Dim var2 As Variant
var2 = Sheets("COTIZACION").Range("E8").Value
Sheets("Datos").Range("A:N").Find(What:=var2, After:=ActiveCell, LookIn:=xlFormulas, lookat:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
If var2 = ActiveCell.Value Then
Sheets("COTIZACION").Range("F9").Value = ActiveCell.Offset(0, 1) 'CLIENTE
         End If
End Sub

se que no funciona, es que yo tengo una hoja "cotizacion" entonces hay deberia poner un dato en la celda E8 y sobre ese dato buscar los demas en la hoja "Datos", si lo encuentra traerme la informacion de nuevo en la hoja "cotizacion" y colocarlo en la celda F9 se los agradeceria si me explicaran el motivo de mi error y me ayudaran la macro correcta saludos!

1 respuesta

Respuesta
1

Te anexo la macro actualizada

Sub busca()
'Act.Por.Dante Amor
    var2 = Sheets("COTIZACION").Range("E8").Value
    If var2 = "" Then
        MsgBox "Escribe un dato en la celda E8"
        Exit Sub
    End If
    '
    'se realiza la búsqueda en la columna A y el resultado se establece en el objeto b
    Set b = Sheets("Datos").Range("A:A").Find(var2, LookIn:=xlFormulas, lookat:=xlWhole)
    'Si no existe
    If b Is Nothing Then
        MsgBox "El dato no existe"
        Exit Sub
    End If
    '
    'Si existe, simplemente en la celd a F9 se pone el dato que deseas
 'recuerda que en el objeto b tienes el resultado de la búsquea,
 'entonces utilizas b para obtener el dato
    Sheets("COTIZACION"). Range("F9").Value = b. Offset(0, 1) 'CLIENTE
 'también lo puedes hacer así:
    Sheets("COTIZACION"). Range("F9").Value = Sheets("Datos"). Cells(b.Row, "B") 'CLIENTE
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Ok dan, lo que pasa es que como sera una BASE de datos el cual se estar llenando constantemente por eso utilice el offset no se si estoy mal... el rango de búsqueda estar de A hasta la col N

Por ejemplo en la hoja COTIZACIÓN celda E8 tengo el valor C-007 que representa un folio entonces

En la base de datos hoja "DATOS" tengo ahí todos los folios que han habido y por haber, lo que necesito es que a base del folio que esta en la celda E8 me regrese todos los datos que contiene el folio, en este caso que me busque los datos que tiene el folio C-007,

MIRA te muestro:

Aquí estoy en el folio C-008 como para realizar un nuevo pedido:

(Arriba se debería el folio creo que no se vio es C-008 celda L3)

Pero por por motivo quisiera consultar lo que en el C-007 existe solo para consulta

Este representa una base da datos (no he dado formatos) el cual se estará llenando de acuerdo a los folios que vayan existiendo en este caso solo he colocado el folio C-007 la idea es tener más.

Entonces de aquí en la hoja "cotizacion" celda E8 pongo C-007 y se supone que me debería buscar los valores en la hoja "datos" y regresarmelos según celdas especificas en la hoja "cotizacion"

De esta forma. Espero me puedas ayudar

Pero en la hoja datos, tienes que poner el folio C-007 en ambas filas. La macro no podría determinar que la fila 3 también corresponde al folio C-007

Entonces se tendría que hacer un ciclo para buscar el folio C-007 en la columna B, y por cada vez que lo encuentre llenar la parte de cantidad, producto, etc.

Acomoda tus datos y ya que los tengas listos me pones las imágenes de la hoja datos y de la hoja cotización.

Sal u dos

MIRA este es el codigo que usare para guardar los datos, si esta muy largo disculpame sigo en aprendizaje:

Option Explicit
Sub Captura_Datos()
'Declaración de variables
'
Dim strTitulo As String
Dim Continuar As String
Dim TransRowRng As Range
Dim NewRow As Integer
Dim Limpiar As String
'
strTitulo = "Atención Telefónica"
'
Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo)
If Continuar = vbNo Then Exit Sub
'
Set TransRowRng = ThisWorkbook.Worksheets("Datos").Cells(1, 1).CurrentRegion
NewRow = TransRowRng.Rows.Count + 1
With ThisWorkbook.Worksheets("Datos")
'Fecha   Folio   Cliente Telefono    Correo  Domicilio   Comentarios CANTIDAD    PRODUCTO          P/U   SUB-TOTAL   IVA IEPS    IMPORTE
    .Cells(NewRow, 1).Value = Date 'FECHA
    .Cells(NewRow, 2).Value = ThisWorkbook.Sheets(1).Range("L3") 'FOLIO
    .Cells(NewRow, 3).Value = ThisWorkbook.Sheets(1).Range("F9") 'CLIENTE
    .Cells(NewRow, 4).Value = ThisWorkbook.Sheets(1).Range("F10") 'TELEFONO
    .Cells(NewRow, 5).Value = ThisWorkbook.Sheets(1).Range("F11") 'CORREO
    .Cells(NewRow, 6).Value = ThisWorkbook.Sheets(1).Range("F12") 'DOMICILIO
    .Cells(NewRow, 7).Value = ThisWorkbook.Sheets(1).Range("E15") 'COMENTARIO
    'PARA PRIMER PRODUCTO
    .Cells(NewRow, 8).Value = ThisWorkbook.Sheets(1).Range("E21") 'CANTIDAD
    .Cells(NewRow, 9).Value = ThisWorkbook.Sheets(1).Range("F21") 'PRODUCTO
    .Cells(NewRow, 10).Value = ThisWorkbook.Sheets(1).Range("H21") 'PRECIO UNITARIO
    .Cells(NewRow, 11).Value = ThisWorkbook.Sheets(1).Range("I21") 'SUB-TOTAL
    .Cells(NewRow, 12).Value = ThisWorkbook.Sheets(1).Range("J21") 'IVA
    .Cells(NewRow, 13).Value = ThisWorkbook.Sheets(1).Range("K21") 'IEPS
    .Cells(NewRow, 14).Value = ThisWorkbook.Sheets(1).Range("L21") 'IMPORTE
    'PARA SEGUNDO PRODUCTO
    .Cells(NewRow + 1, 8).Value = ThisWorkbook.Sheets(1).Range("E22") 'CANTIDAD
    .Cells(NewRow + 1, 9).Value = ThisWorkbook.Sheets(1).Range("F22") 'PRODUCTO
    .Cells(NewRow + 1, 10).Value = ThisWorkbook.Sheets(1).Range("H22") 'PRECIO UNITARIO
    .Cells(NewRow + 1, 11).Value = ThisWorkbook.Sheets(1).Range("I22") 'SUB-TOTAL
    .Cells(NewRow + 1, 12).Value = ThisWorkbook.Sheets(1).Range("J22") 'IVA
    .Cells(NewRow + 1, 13).Value = ThisWorkbook.Sheets(1).Range("K22") 'IEPS
    .Cells(NewRow + 1, 14).Value = ThisWorkbook.Sheets(1).Range("L22") 'IMPORTE
    'PARA TERCER PRODUCTO
    .Cells(NewRow + 2, 8).Value = ThisWorkbook.Sheets(1).Range("E23") 'CANTIDAD
    .Cells(NewRow + 2, 9).Value = ThisWorkbook.Sheets(1).Range("F23") 'PRODUCTO
    .Cells(NewRow + 2, 10).Value = ThisWorkbook.Sheets(1).Range("H23") 'PRECIO UNITARIO
    .Cells(NewRow + 2, 11).Value = ThisWorkbook.Sheets(1).Range("I23") 'SUB-TOTAL
    .Cells(NewRow + 2, 12).Value = ThisWorkbook.Sheets(1).Range("J23") 'IVA
    .Cells(NewRow + 2, 13).Value = ThisWorkbook.Sheets(1).Range("K23") 'IEPS
    .Cells(NewRow + 2, 14).Value = ThisWorkbook.Sheets(1).Range("L23") 'IMPORTE
    'PARA CUARTO PRODUCTO
    .Cells(NewRow + 3, 8).Value = ThisWorkbook.Sheets(1).Range("E24") 'CANTIDAD
    .Cells(NewRow + 3, 9).Value = ThisWorkbook.Sheets(1).Range("F24") 'PRODUCTO
    .Cells(NewRow + 3, 10).Value = ThisWorkbook.Sheets(1).Range("H24") 'PRECIO UNITARIO
    .Cells(NewRow + 3, 11).Value = ThisWorkbook.Sheets(1).Range("I24") 'SUB-TOTAL
    .Cells(NewRow + 3, 12).Value = ThisWorkbook.Sheets(1).Range("J24") 'IVA
    .Cells(NewRow + 3, 13).Value = ThisWorkbook.Sheets(1).Range("K24") 'IEPS
    .Cells(NewRow + 3, 14).Value = ThisWorkbook.Sheets(1).Range("L24") 'IMPORTE
    'PARA QUINTO PRODUCTO
    .Cells(NewRow + 4, 8).Value = ThisWorkbook.Sheets(1).Range("E25") 'CANTIDAD
    .Cells(NewRow + 4, 9).Value = ThisWorkbook.Sheets(1).Range("F25") 'PRODUCTO
    .Cells(NewRow + 4, 10).Value = ThisWorkbook.Sheets(1).Range("H25") 'PRECIO UNITARIO
    .Cells(NewRow + 4, 11).Value = ThisWorkbook.Sheets(1).Range("I25") 'SUB-TOTAL
    .Cells(NewRow + 4, 12).Value = ThisWorkbook.Sheets(1).Range("J25") 'IVA
    .Cells(NewRow + 4, 13).Value = ThisWorkbook.Sheets(1).Range("K25") 'IEPS
    .Cells(NewRow + 4, 14).Value = ThisWorkbook.Sheets(1).Range("L25") 'IMPORTE
End With
'
MsgBox "Alta exitosa.", vbInformation, strTitulo
Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo)
If Limpiar = vbYes Then
    With ActiveWorkbook.Sheets(1)
        '.Range("C6").ClearContents
        '.Range("C9").ClearContents
        '.Range("C12").ClearContents
        '.Range("C15").ClearContents
        '.Range("F9").ClearContents
        '.Range("F12").ClearContents
        'ClearContents no funciona en celda combinada...'esto asi estaba
        '.Range("F15").Value = ""
    End With
Else
End If
'
End Sub

este es el que me proporcionaste y agregue los offset segun mi criterio:

Sub busca2()
'Act.Por.Dante Amor
    var2 = Sheets("COTIZACION").Range("E8").Value
    If var2 = "" Then
        MsgBox "Escribe un dato en la celda E8"
        Exit Sub
    End If
    '
    'se realiza la búsqueda en la columna A y el resultado se establece en el objeto b
    Set b = Sheets("Datos").Range("b:n").Find(var2, LookIn:=xlFormulas, lookat:=xlWhole)
    'Si no existe
    If b Is Nothing Then
        MsgBox "El dato no existe"
        Exit Sub
    End If
    '
    'Si existe, simplemente en la celd a F9 se pone el dato que deseas
 'recuerda que en el objeto b tienes el resultado de la búsquea,
 'entonces utilizas b para obtener el dato
    Sheets("COTIZACION").Range("F9").Value = b.Offset(0, 1)   'CLIENTE
    Sheets("COTIZACION").Range("E15").Value = b.Offset(0, 5)   'COMENTARIO
    'PRIMER PRODUCTO
    Sheets("COTIZACION").Range("E21").Value = b.Offset(0, 6)   'cantidad
    Sheets("COTIZACION").Range("F21").Value = b.Offset(0, 7)   'producto
    Sheets("COTIZACION").Range("H21").Value = b.Offset(0, 8)   'PRECIO u
    Sheets("COTIZACION").Range("I21").Value = b.Offset(0, 9)   'SUB TOTAL
    Sheets("COTIZACION").Range("J21").Value = b.Offset(0, 10)   'IVA
    Sheets("COTIZACION").Range("K21").Value = b.Offset(0, 11)   'IEPS
    'SEGUNDO PRODUCTO
    Sheets("COTIZACION").Range("E22").Value = b.Offset(1, 6)   'cantidad
    Sheets("COTIZACION").Range("F22").Value = b.Offset(1, 7)   'producto
    Sheets("COTIZACION").Range("H22").Value = b.Offset(1, 8)   'PRECIO u
    Sheets("COTIZACION").Range("I22").Value = b.Offset(1, 9)   'SUB TOTAL
    Sheets("COTIZACION").Range("J22").Value = b.Offset(1, 10)   'IVA
    Sheets("COTIZACION").Range("K22").Value = b.Offset(1, 11)   'IEPS
 'también lo puedes hacer así:
   ' Sheets("COTIZACION").Range("F9").Value = Sheets("Datos").Cells(b.Row, "B")   'CLIENTE
End Sub

lo probe asi y funciona, ya realice hasta el folio c-009 y veo que si busca lo que le indico, pero nose si voy bien espero tu ayuda gracias

Pero de esa forma cada vez que agregues un producto tienes que modificar el código.

Si tienes 20 productos tienes que repetir el código 20 veces.

Lo que tienes que hacer es acomodar los datos en la hoja "datos"

Envíame tu archivo, acomodo los datos y actualizo la macro.

ok ya te lo mande, pero esta mal lo que hice?

Te anexo la actualización

Sub busca2()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("COTIZACION")
    Set h2 = Sheets("Datos")
    '
    'Limpiar celdas
    H1. Range("F9:L12"). ClearContents
    H1. Range("E15:L17"). ClearContents
    H1. Range("E21:L38"). ClearContents
    '
    folio = h1.Range("L3").Value
    If folio = "" Then
        MsgBox "Escribe un folio en la celda E8"
        Exit Sub
    End If
    '
    j = 21
    Set r = h2.Columns("B")                 'rango de búsqueda
    Set b = r.Find(folio, lookat:=xlWhole)  'busca folio
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'Datos del cliente
            h1.[F9] = h2.Cells(b.Row, "C")
            h1.[F10] = h2.Cells(b.Row, "D")
            h1.[F11] = h2.Cells(b.Row, "E")
            h1.[F12] = h2.Cells(b.Row, "F")
            h1.[E15] = h2.Cells(b.Row, "G")
            'detalle de productos
            h1.Cells(j, "E") = h2.Cells(b.Row, "H")
            h1.Cells(j, "F") = h2.Cells(b.Row, "I")
            h1.Cells(j, "H") = h2.Cells(b.Row, "J")
            h1.Cells(j, "I") = h2.Cells(b.Row, "K")
            h1.Cells(j, "J") = h2.Cells(b.Row, "L")
            h1.Cells(j, "K") = h2.Cells(b.Row, "M")
            h1.Cells(j, "L") = h2.Cells(b.Row, "N")
            j = j + 1
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    Else
        MsgBox "El folio no existe"
    End If
    Appli

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas