Actualizar un registro de una tabla con macros.

Soy muy asiduo a esta web, es muy interesante y útil, me incribi para preguntar por primera vez y ojala la respuesta sea pronta. Mi problema es..
Tengo una hoja (INGRESO) la cual ingresa productos a una tabla que esta en otra hoja (INV-08) y el ingreso lo hago con una macro en una autoforma, la macro es la siguiente:
Sub GUARDAR()
  Dim filalibre As Byte
  Sheets("Hoja3").Select
  Range("A2:P2").Select
  Selection.Copy
  Range("A3").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
  Application.CutCopyMode = False
  Sheets("INV-08").Select
  filalibre = ActiveSheet.Range("A65536").End(xlUp).Row + 1
  Sheets("Hoja3").Select
  ActiveSheet.Rows("3:3").Copy Destination:=Sheets("INV-08").Cells(filalibre, 1)
  Application.CutCopyMode = False
  Sheets("INGRESO").Select
  Range("C8").Select
End Sub
En el rango A2:P2 de la hoja3 guardo los valores ingresados en la hoja INGRESO para luego copiarlos de forma especial (solo valores) en la cela A3 de la hoja3, para luego copiar la fila 3 en la siguiente fila vacía de la hoja INV-08.
Bueno esto funciona ok para ingresar pero si quiero ACTUALIZAR mis productos, un cambio de precio, o su descripción ¿cómo hacer para que busque por código y según este reeemplaze toda la fila?

1 Respuesta

Respuesta
1
Bueno para tu pregunta te doy dos posibles soluciones:
Aplicando las funciones básicas de programación la siguiente rutina te puede ayudar:
Sub Buscar()
ultimoreg = Worksheets("INV-08").Range("A65536").End(xlUp).Row + 1    'Ult. registro
codigobusq = Worksheets("INGRESO").Range("A5").Value  'Toma el codigo de la celda A5
For i = 1 To ultimoreg
If Worksheets("INV-08").Cells(i, 1).Value = codigobusq Then
Worksheets("INV-08").Select
Range("A" + Format(i) + ":P" + Format(i)).Select
Selection.Copy
Worksheets("INGRESO").Select
Range("A6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
range("A7").Value = i
i = ultimoreg
End If
Next i
End Sub
Sub Actualizar()
Range("A6:P6").Select
Selection.Copy
column=Range("A7").Value
Worksheets("INV-08").Range("A"+format(column)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= False, Transpose:=False
Application.CutCopyMode = False
End Sub
Con la rutina BUSCAR(), se supone que en la celda A5 de INGRESO digitas el código que quieres actualizar, la rutina busca el numero en la hoja INV-08 y a continuación muestra la información de dicha fila en la celda A6 de INGRESO para que la actualices; con la rutina ACTUALIZAR() se encarga de sustituir la fila de INV-08 por los nuevos datos suministrados.
Espero te ayude este aporte
Otra forma de hacer esto es con la funcion de busqueda de Excel:
With Worksheets("INV-08").Range("A3:A" + Format(ultimoreg))  'Selecciona donde buscar
Set c = .Find(codigobusq, LookIn:=xlValues)     'Busca el codigo en la lista seleccionada
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = "Alvaro Arturo Alvarez Diaz"
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Mil gracias por tu ayuda jhmh2008, fue muy precisa y puntual aunque con unos cambios míos para que se adapte a lo que yo quería todo estuvo estupendo, así quedo mi macro:
Sub ACTUALIZAR()
Dim fila As Byte
ultimoreg = Worksheets("INV-08").Range("A65536").End(xlUp).Row + 1 'ultimo registro
codigobusq = Worksheets("ACTUALIZAR").Range("C8").Value 'toma el codigo de la celda C8
For i = 1 To ultimoreg 'bucle
If Worksheets("INV-08").Cells(i, 1).Value = codigobusq Then
Worksheets("hoja3").Select
Range("A12").Value = i 'el valor de la celda A7 sera i
i = ultimoreg 'cierro el bucle
End If
Next i
Worksheets("hoja3").Select 'selecciono hoja3
Range("A10:P10").Select 'selecciono el rango
Selection.Copy 'copio el rango
Range("A11").Select 'selecciono celda A11
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'pegado especial en celda A11
Application.CutCopyMode = False 'desactivo la seleccion de copia
fila = Range("A12").Value 'el valor de Column sera A12
ActiveSheet.Rows("11:11").Copy Destination:=Sheets("INV-08").Cells(fila, 1)
'Worksheets("INV-08").Range("A" + Column).Select 'selecciono la ubicacion de la celda
'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'pegado especial
Application.CutCopyMode = False 'desactivo la seleccion de copia
Sheets("ACTUALIZAR").Select
Range("C8").Select
End Sub
Gracias una vez más y hasta pronto.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas