Necesito ayuda sobre una macro para el microsoft excel que realize una búsqueda en las plantillas

Hola,
Quería pedirles si pueden ayudarme con la siguiente macro. Tengo una planilla con varias hojas, una de ellas se utiliza para realizar consultas de datos de proveedores, en donde mediante la fórmula "buscarv", me trae los datos del proveedor seleccionado. Ej, busco en una lista desplegable (celda B1) y pongo el proveedor "ABC", abajo apárense en la celda "B3" la dirección, "C3" el teléfono (estos datos son traídos de la hoja "base de proveedores" en donde en la columna "A" tengo el nombre del proveedor, en la "B" la dirección y en la "C" el teléfono.
Lo que necesito es que al traer los datos del proveedor (mediante el buscarv), y modificarlos, hacer una macro que busque en la base, el nombre del proveedor, si encuentra el nombre (no se modifico el nombre) reemplace los datos existentes por los nuevos, y si el nombre del proveedor cambio (no figura en la base de proveedores) la cargue al final como un nuevo proveedor.
Muchas gracias
Diego
Respuesta
1
Ingresá al Editor, insertá un módulo y allí copiá esta rutina.
Ajustá el nombre de tu hoja y cada una de las ref de las celdas con datos a pasar.
Luego en el hoja dibujá un botón y asígnale esta rutina (*)
Pruébala y si todo quedó resuelto, no olvides finalizar la consulta
(*) En la página de macros de mi sitio encontrarás detallado el tema de cómo asignar macros a botones o atajo de teclado.
Ups... olvidé la rutina:
Sub CbiosProveedor()
'x Elsamatilde
'registra cambios en base Prov
dato = ActiveSheet.Range("B1")
Set busco = Sheets("base").Range("A2:A100").Find(dato, LookIn:=xlValues, Lookat:=xlWhole)
'si no lo encontró graba nvo registro en fila sgte
If busco Is Nothing Then
    libre = Sheets("base").Range("A65536").End(xlUp).Row + 1
    Sheets("base").Cells(libre, 1) = busco
    Sheets("base").Cells(libre, 2) = ActiveSheet.Range("B3")
    Sheets("base").Cells(libre, 3) = ActiveSheet.Range("C3")
Else
    'si lo encontró modifica el registro
    busco.Offset(0, 1) = ActiveSheet.Range("B3")
    busco.Offset(0, 2) = ActiveSheet.Range("C3")
End If
'libero la variable
Set busco = Nothing
End Sub
Solo ajustá el nombre de tu hoja base y el rango total de datos (ver línea en negrita)
Pruébala y si todo quedó resuelto no olvides finalizar la consulta
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas