¿Macro para copiar y pegar dato que previamente haga "Match" según columna y fila indicada?

Me llamo Jesús y soy nuevo por aquí
Me gustaría saber qué macro podría ayudarme a realizar esta rutina:

Lo que deseo es: llenar las listas desplegables que incluyen la base de datos desde A5:A871, las cuales separé en ComboBox1, ComboBox2 y ComboBox3, al igual que la celda de fecha y que ellos me ayuden a hacer coincidir la celda que cruza de acuerdo a dichos criterios, así mediante un botón "Pegar" copie y pegue el valor introducido en la celda amarilla de "Produccion" hacia la celda que cumpla los criterios, así como en la imagen.
Estoy empezando en VBA y agradecería inmensamente que pudieran ayudarme, quizá haya una manera más sencilla de hacerlo.

1 Respuesta

Respuesta
3

Te anexo la macro

Sub Pegar()
'Por.Dante Amor
    Set h = ActiveSheet
    'validaciones
    If h.ComboBox1.Value = "" Then
        MsgBox "Falta el artículo", vbExclamation
        Exit Sub
    End If
    If h.ComboBox2.Value = "" Then
        MsgBox "Falta la talla", vbExclamation
        Exit Sub
    End If
    If h.ComboBox3.Value = "" Then
        MsgBox "Falta el color", vbExclamation
        Exit Sub
    End If
    fecha = h.Range("B2").Value
    If fecha = "" Or Not IsDate(fecha) Then
        MsgBox "Falta la fecha", vbExclamation
        Exit Sub
    End If
    Set b = h.Rows(4).Find(fecha, lookat:=xlWhole)
        If Not b Is Nothing Then
            col = b.Column
        Else
            MsgBox "No existe la fecha", vbCritical
            Exit Sub
        End If
    Set b = Nothing
    '
    valor = h.Range("C2").Value
    If valor = "" Or Not IsNumeric(valor) Then
        MsgBox "Falta el valor de producción"
        Exit Sub
    End If
    '
    'Busca
    existe_art = False
    Set r = h.Columns("A")
    Set b = r.Find(h.ComboBox1.Value, lookat:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'detalle
            If LCase(h.Cells(b.Row, "B").Value) = LCase(h.ComboBox2.Value) And _
               LCase(h.Cells(b.Row, "C").Value) = LCase(h.ComboBox3.Value) Then
               existe_art = True
               fila = b.Row
               h.Cells(fila, col) = valor
               MsgBox "Valor actualizado", vbInformation
               Exit Do
            End If
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    If existe_art = False Then
        MsgBox "No existe el artículo", vbCritical
    End If
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Pegar
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.


.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

¡Gracias! 
Era justo lo que buscaba, eres un capo!
Muchas gracias nuevamente Dante! 

Al final de mi respuesta tienes 2 opciones para valores, "Excelente" y "Votar", si ya no tienes dudas, podrías cambiar la valoración.

Dante disculpa nuevamente, solo quería saber una información adicional:
Y Si quisiera colocar un botón que me lleve a la celda que coincida con los criterios indicados, un botón para verificar visualmente la información introducida, o buscar algún otro dato de la producción?

Copia la macro, le pones por nombre "buscar" y cambia esta línea:

h.Cells(fila, col) = valor

Por esta

h.Cells(fila, "A").select

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas