Necesito una macro que busque en una hoja2 un valor ingresado en la hoja1 y reemplace valores nuevos

Tengo una ficha en donde se ingresan datos los cuales se van guardando en una base de datos en otra hoja de calculo, mi problema es que si ingreso un dato en mi ficha que ya existe en mi base de datos estos se van repitiendo en la base de datos, lo que deseo es que si el valor ingresado existe los valores antiguos en la base de datos se reemplacen por los actuales. Ejm:

- Hoja "ficha" ingreso de datos

Código: 123

Fecha: 10/12/2013

Cantidad: 500

Calidad: Media

En la base de datos:

Código Fecha Cantidad Calidad

123 10/12/2012 1000 Alta

Lo ideal seria que se reemplacen los valores de fecha cantidad y calidad en el código 123 por los ingresados con fecha reciente. Y si el código ingresado en nuevo seguiría el proceso normal grabándose asi en la base de datos existente

Muchas gracias de antemano

1 Respuesta

Respuesta
1

Entiendo que en la Base se agregarán cuando corresponda, en modo lineal en las filas hacia abajo.

Entonces solo resta conocer la ubicación de los datos en hoja Ficha para confeccionarte la macro.

Sdos y espero tus aclaraciones. No finalices aún.

Gracias por responder, exactamente en la base se irán agregando cuando correspondan en forma lineal hacia abajo, reemplazando se ser el caso si en la ficha se ingresa un código existente en la base.

Los datos en ficha están ubicados en las celdas B1,B2, D1,D2, asi:

A B C D

1 Código: 123 Cantidad: 500
2 Fecha: 10/12/2013 Calidad: Media

y si en algún momento se ampliara la información para ser ingresada en la ficha ¿como funcionaria?

Muchas Gracias de antemano

Entrá al Editor e insertá un Módulo. Allí copiá esto:

Sub paseDatos()
'x Elsamatilde
'se realizan los controles de contenido antes de pasar
'se busca el código en hoja Base, col A
Set busco = Sheets("Base").Range("A:A").Find(Range("B1"), LookIn:=xlValues, lookat:=xlWhole)
'si el dato está se guarda su fila, sinó se usa la fila 'libre'
If Not busco Is Nothing Then
 libre = busco.Row
Else
 'se busca la primer fila libre en hoja Datos
 libre = Sheets("Base").Range("A65536").End(xlUp).Row + 1
End If
'pase
Range("B1").Copy Destination:=Sheets("Base").Cells(libre, 1) 'dato de B1 a col A
Range("B2").Copy Destination:=Sheets("Base").Cells(libre, 2) 'dato de B2 a col B
Range("D1").Copy Destination:=Sheets("Base").Cells(libre, 3) 'dato de D1 a col C
Range("D2").Copy Destination:=Sheets("Base").Cells(libre, 4) 'dato de D2 a col D
'agregar otros campos si hiciera falta, incrementando la col en Cells(libre, ? )
'libero la variable
Set busco = Nothing
'opcional: borrar los campos para un nuevo llenado.
Range("B1:B2, D1:D2") = ""
Range("B1").Select
End Sub

Ahora regresá a la hoja y dibujá un botón de barra Formulario (no indicas tu versión Excel así que no me explayo mucho aquí). En la sección Macros de mi sitio tengo explicado este tema.

PaseDatosSi no realizas ningún control los datos irán tal como se presentan.

400MacrosSdos

Funciona genial, le agradezco mucho por su ayuda, solo una consulta, el momento que se pasan los datos a la base se están copiando con el mismo formato que tengo en la celda de la ficha, es decir color de letra tamaño de la letra, color y bordes que se tiene en la celda; no se si hay la posibilidad que unicamente se copien los valores a la base de datos? ayúdeme por favor estaré enormemente agradecido.

Hay tantos modos de copiar-pegar datos, que el tema mereció ser incluido entre mis Guías Temáticas. Copiar con o sin formatos, con o sin fórmulas, etc.

Por eso es bueno que siempre aclaren todos los detalles...

Bien, en este caso para copias sin formato, escribí cada línea de pase siguiendo este ejemplo:

Sheets("Base"). Cells(libre, 1) = Range("B1") 'dato de B1 a col A

Sdos y no olvides finalizar la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas