Buscar datos en libro y Reemplazar en celda especifica VBA

Solicito en la medida de lo posible una ayuda mediante una macro que no se realizar para que me busque en todo el libro unos datos que llamo desde un Userform llamado (Userform_Buscar_Reemplazar) mediante un Textbox1 (Donde coloco el dato a buscar) cuando encuentra el dato buscado mediante el dato en el textbox2 (Valor a reemplazar) me lo pega en la columna M de la misma fila y necesito que me valla cambiando todos los datos que valla encontrando en la columna C de todas las hojas del libro, he creado una macro que me ejecuta el cambio en todas las hojas pero el primer dato encontrado las demas me lo cambia en la columna C, cuando deveria de cambiar en la columna M.

Application.ScreenUpdating = False
Dim nombreHoja1 As String
nombreHoja1 = TextBox3
If TextBox1 = "" Then
TextBox1.BackColor = &HFF8&
MsgBox Space(10) & "EL CAMPO ESTA VACIO, POR FAVOR RELLENELO PARA PODER CONTINUAR." + Chr(13) + "   ***   TÍTULO   ***", vbExclamation
Exit Sub
TextBox1.BackColor = &H80000005
TextBox1.SetFocus
End If
If TextBox2 = "" Then
TextBox2.BackColor = &HFF8&
MsgBox Space(10) & "EL CAMPO ESTA VACIO, POR FAVOR RELLENELO PARA PODER CONTINUAR." + Chr(13) + "   ***   TÍTULO   ***", vbExclamation
Exit Sub
TextBox2.BackColor = &H80000005
TextBox2.SetFocus
End If
testValue = TextBox1
For x = 1 To ActiveWorkbook.Worksheets.Count
Worksheets(x).Select
Set foundcell = ActiveSheet.Cells.Find(testValue)
If foundcell Is Nothing Then
MsgBox "No se encontró el valor"
Else
'MsgBox "El valor se encontró en la celda" & foundcell.Address
Range(foundcell.Address).Select
ActiveCell.Offset(0, 10) = TextBox2.Value 'Select
Cells.Replace What:=TextBox1, Replacement:=TextBox2, LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
       ReplaceFormat:=False
End If
Next x
Sheets(nombreHoja1).Select
MsgBox "Se han realizado los cambios con exito"
End Sub

1 respuesta

Respuesta
1

Ya no entendí en tu descripción. Dime qué necesitas:

a) ¿Buscar en toda la hoja y cambiar todo lo que encuentre sin importar la columna?

b) ¿Buscar solamente en la columna C y cambiar el dato en la columna C?

c) ¿Buscar solamente en la columna M y cambiar el dato en la columna M?

d) ¿Buscar en la columna C y cambiar en M?

e) Buscar en M y cambiar C?

¿Cuál opción necesitas?

Buenas tardes,

En primer lugar muchas gracias por contestar tan rápido.

Necesito Buscar en todas las hojas a partir de la hoja 40 el dato que está en el textbox1 opción d)

Buscar en la columna C a partir de la fila 34 recorrer columna y cuando encuentre el dato que está en el textbox1 reemplazar o pegar el dato de la misma fila en la columna M correspondiente al texto del textbox2, y así recorrer la columna C hasta que encuentre el mismo valor y hacer la misma operación y así en todas las hojas del libro.

Espero haberme explicado bien.

Un Cordial Saludo

David Calleja

Te anexo la macro actualizada.

No entendí si es para todas las hojas o para las hojas de la 40 en adelante.

Te anexo la macro para todas las hojas:

Private Sub CommandButton1_Click()
'Act.Por.Dante Amor
    If TextBox1 = "" Then
        TextBox1.BackColor = &HFF8&
        MsgBox Space(10) & "EL CAMPO ESTA VACIO, POR FAVOR RELLENELO PARA PODER CONTINUAR." + Chr(13) + "   ***   TÍTULO   ***", vbExclamation
        TextBox1.BackColor = &H80000005
        TextBox1.SetFocus
        Exit Sub
    End If
    If TextBox2 = "" Then
        TextBox2.BackColor = &HFF8&
        MsgBox Space(10) & "EL CAMPO ESTA VACIO, POR FAVOR RELLENELO PARA PODER CONTINUAR." + Chr(13) + "   ***   TÍTULO   ***", vbExclamation
        TextBox2.BackColor = &H80000005
        TextBox2.SetFocus
        Exit Sub
    End If
    '
    existe = False
    For hoja = 1 To Sheets.Count
        Set h = Sheets(hoja)
        Set r = h.Range("C34:C" & h.Range("C" & Rows.Count).End(xlUp).Row)
        Set b = r.Find(TextBox1.Value, lookat:=xlWhole)
        If Not b Is Nothing Then
            celda = b.Address
            Do
                'detalle
                h.Cells(b.Row, "M").Value = TextBox2.Value
                existe = True
                Set b = r.FindNext(b)
            Loop While Not b Is Nothing And b.Address <> celda
        End If
    Next
    If existe Then
        MsgBox "Se han realizado los cambios con éxito"
    Else
        MsgBox "No se encontró el valor"
    End If
End Sub

Si quieres que sea de la 40 en adelante entonces cambia el 1 por 40 en esta línea:

For hoja = 40 To Sheets.Count

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas