Ayuda en macro buscar y reemplazar

Que tal buenas tardes expertos, el motivo de mi mensaje es el siguiente, para ver si alguien seria tan amable de poder asesorarme en la siguiente duda.
Tengo una macro que me busca un folio en una hoja (que se llama consecutivo"), la macro me funciona bien para buscar, el problema es que una vez que encontró el folio no he podido perfeccionar la instrucción para que me seleccione la fila en donde se encuentra la celda que estaba buscando y que en esa fila me reemplace los nuevos cambios que realice, en esta macro me marca error al momento de seleccionar la varable "n" creo que ahí es en donde esta el error.
Ejemplo
Si yo busco el folio 85 me aparecen los siguientes datos:
Folio cliente importe iva total
85 cliente 1 10 5 10.50
Y lo quiero remplazar por lo siguientes datos:
Folio cliente importe iva total
85 cancelada 0 0 0
Espero puedan ayudarme muchas gracias
El código es el siguiente:
Sub buscar_y_guardar()
Dim n As Range
    folio_a_buscar = InputBox("Ingresar el folio de la factura", "Buscador")
    If folio_a_buscar = "" Then Exit Sub
    Set n = Worksheets("consecutivo").Cells.Find(what:=folio_a_buscar)
    If n Is Nothing Then
        MsgBox "No existe el folio."
    Else
MsgBox "Folio encontrado:  " & UCase(folio_a_buscar) & "."
n.select    'selecciona el registro encontrado
fila = n.Row  
    Application.ScreenUpdating = False
ActiveSheet.Unprotect
Range("a11:g35").Select
Selection.Copy
Sheets("consecutivo").Select
Range("a65536").End(xlUp).Offset(0, 1).Select
i = ActiveCell.Row
Range("a" & i).Value = Worksheets("remplazar").Range("l2").Value
Range("b" & i).Value = Worksheets("remplazar").Range("l8").Value
Range("C" & i).Value = Worksheets("remplazar").Range("e11").Value
Range("d" & i).Value = Worksheets("remplazar").Range("l46").Value
Range("e" & i).Value = Worksheets("remplazar").Range("l48").Value
Range("f" & i).Value = Worksheets("remplazar").Range("l50").Value
Range("g" & i).Value = Worksheets("remplazar").Range("B1").Value
Range("h" & i).Value = Worksheets("remplazar").Range("B2").Value
Range("i" & i).Value = Worksheets("remplazar").Range("Q5").Value
Range("j" & i).Value = Worksheets("remplazar").Range("Q8").Value
Range("k" & i).Value = Worksheets("remplazar").Range("Q11").Value
Range("l" & i).Value = Worksheets("remplazar").Range("b3").Value
Sheets("remplazar").Select
Range("b18:i40").Select
Selection.ClearContents
MsgBox "Se guardo correctamente la factura", vbInformation, " Facnetov 2009 "
Range("e11").Select
    End If
End Sub

1 Respuesta

Respuesta
1
Por lo que veo parece que quieres encontrar el folio en la página 'consecutivo' y modificar sus datos con los que aparece en la página 'reemplazar'.
Si es eso, la macro que has puesto funciona, aunque tendría alguna cosilla que corregir (¿para qué usas la variable fila, por ejemplo?).
Si no es eso, será que no he entendido el problema o dónde/porqué tiene el error.
Que tal buenos días, eres muy amabble al revisar m pregunta y mira si acertadamente entendiste bien el problema solo que no he encontrado la manera de poder hacer que en la fila en la que se encuentra el folio me guarde los datos nuevos, lo de la variable fila lo utilce por que en asesorías anteriores me comentaron queutilizara esa linea, pero la verdad no he podido acoplar la macro para que realice el reemplazo, podrías ayudarme a realizar el reemplazo o si gustas te puedo enviar un archivo en donde tengo el ejemplo.
Gracias por la atención
Saludos y buen día
Lo más sencillo es que me enviases el archivo porque aparentemente esa macro debería funcionar.
No sé si conoces la forma de ejecutar las macros 'paso a paso' en lugar de hacerlo de un tirón. Se hace usando la tecla <F8> y te va marcando en amarillo la instrucción que va a ejecutar.
La ventaja: sabes exactamente lo que va haciendo y te permite colocar el ratón encima de las variables para ver el valor que tienen. Es muy útil para revisar un código.
Bueno, lo dicho, si quieres mandame un 'zip' con una clave a:
- [email protected] (si ocupa menos de 500 Kb)
- [email protected] (si ocupa más)
El problema es que en mixmail tengo muy poco espacio y por eso, si es grande, prefiero recibirlo en hotmail.
No olvides ponerme tu nick en el correo para saber de quién me viene.
Avisame cuando lo hayas mandado.
Que tal buenos días acabo de enviarte el archivo al primer correo, estamos en contacto, gracias
A ver, la hoja que me envías se supone que quiere reemplazar los datos de la factura 23 (o la que sea) por los nuevos, no ponerla como cancelada. De todas formas, cancelarla sería relativamente fácil; luego lo vemos.
Un consejo, procura que las instrucciones 'if...' no tengan demasiadas líneas porque al final no sabes ni la condición que se puso. Por ello, te aconsejaría que después de buscar la factura comprobases si existe y salgas directamente si no la encuentras.
También hay una serie de líneas que no entiendo para qué están:
    ActiveSheet. Unprotect
    Range("a11:g35").Select 
    Selection.Copy          
    Range("a65536").End(xlUp).Offset(0, 0).Select ' aqui cambi el 0,1 por 0,0
Más cosas, es posible que la instrucción 'n. Select' de un error si la página activa no es 'consecutivo', por lo que hay que activarla antes de seleccionar 'n'.
Resumiendo, creo que la macro que intentas hacer sería esta:
Option Explicit
Sub reemplazar()
    Dim n As Range
    Dim i As Long
    Dim folio_a_buscar As String
    folio_a_buscar = InputBox("Ingresar el folio de la factura", "Buscador")
    If folio_a_buscar = "" Then Exit Sub
    Set n = Worksheets("consecutivo").Cells.Find(what:=folio_a_buscar)
    If n Is Nothing Then MsgBox "No existe el folio.": Exit Sub
    ' Encontrado... modificamos sus datos
    MsgBox "Folio encontrado:  " & UCase(folio_a_buscar) & "."
    Sheets("consecutivo").Select
    n.Select
    i = n.Row
    Range("a" & i).Value = Worksheets("remplazar").Range("l2").Value
    Range("b" & i).Value = Worksheets("remplazar").Range("l8").Value
    Range("C" & i).Value = Worksheets("remplazar").Range("e11").Value
    Range("d" & i).Value = Worksheets("remplazar").Range("l46").Value
    Range("e" & i).Value = Worksheets("remplazar").Range("l48").Value
    Range("f" & i).Value = Worksheets("remplazar").Range("l50").Value
    Range("g" & i).Value = Worksheets("remplazar").Range("B1").Value
    Range("h" & i).Value = Worksheets("remplazar").Range("B2").Value
    Range("i" & i).Value = Worksheets("remplazar").Range("Q5").Value
    Range("j" & i).Value = Worksheets("remplazar").Range("Q8").Value
    Range("k" & i).Value = Worksheets("remplazar").Range("Q11").Value
    Range("l" & i).Value = Worksheets("remplazar").Range("b3").Value
    ' Volvemos a la página reemplazar para borrar los datos
    Sheets("remplazar").Select
    Range("b18:i40").Select
    Selection.ClearContents
    Range("e11").Select
    ' Se terminó...
    MsgBox "Se guardo correctamente la factura", vbInformation, " Facnetov 2010 "
End Sub
Para terminar, te dije que anular la factura sería fácil. El procedimiento es casi el mismo modificando las líneas Range("a"&i)..., Range("b"&i)..., etc... poniendo directamente los valores 'cancelada', 0 o lo que corresponda.
Espero que sea eso. Sino... ya sabes, insiste que a veces no acabamos de ver lo que queréis hacer.
Experto agradezco de antemano haberme asesorado, ya lo intente y realice unas modificaciones y me funciono a la perfección, muy amable de tu parte te deseo un feliz año, gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas