Modificar un dato por otro, desde UserForm

En un libro de Excel tengo una hoja en donde en las columnas A y E se registran los códigos de unos productos, dichos productos se repiten varias veces en las mismas columnas, por ejemplo el producto que tiene el código 0010 puede encontrarse en varias filas de la hoja, y así con diferentes referencias; en ocasiones se hace necesario modificar el código de dicho artículo y esta tarea normalmente se hace manualmente, por ejemplo buscando el código 0010 y cambiándolo por el 00100; por lo extenso del trabajo se intenta modificar dicho dato mediante un formulario, en donce en el TextBox1 se escribe el código actual del producto (0010), y en el TextBox2 se indica el nuevo código por el cual se desea cambiar (00100), la macro que realiza el cambio es la siguiente:

Worksheets("HOJA_CÓDIGOS").Select
ActiveSheet.Unprotect "XXX"
Range("A:A,E:E").Select
Selection.Replace What:=TextBox1, Replacement:="" & TextBox2, lookat:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True
ActiveSheet.Protect "XXX"
Range("A1").Select
Sheets("HOJA_CÓDIGOS").Select
Range("A1").Select
El problema que se tiene es que al realizar la tarea se modifican otros items que coinciden en parte con el dato indicado en el TextBox1, por ejemplo, se reemplazan los códigos 010, 10, 01000, etc, todos se cambian por el nuevo código que se ha indicado.

Cómo podría modificar la instrucción para que solamente se reemplacen por el nuevo dato los códigos que coinciden exactamente con el dato indicado en el Textbox1?

1 respuesta

Respuesta
1

¿Puedes subir una captura de pantalla de tus datos?, hay una forma más simple usando coincidir y contar. Si, la segunda fórmula cuenta cuantos criterios cumplen con el dato que quieres cambiar y la primera te indicara en que fila se encuentra el registro luego solo se programa la macro para que trabaje con estos dos parámetros para que cambie solo en ellos el código. La forma en que tu realizas la búsqueda busca dentro de las celdas también por ejemplo si si buscas 20 y quieres cambiar solo lo que tenga 20, tu macro buscara 20, 020, 2020,1020,2010,120 etc y realizara el cambio sobre todos ellos.

Si puedes sube una pantalla para ver que se puede hacer.

Gracias por responder, la tabla tiene miles de registros, es por eso que es demasiado dispendioso el proceso, esta es solo una muestra.

El formulario seria así

j

Y este seria el código, ira buscando en todas las columnas con datos el valor que este en el textbox1 y si lo encuentra lo reemplazara con el valor del textbox2, pruébalas y comenta.

Private Sub CommandButton1_Click()
Set datos = Range("A1").CurrentRegion
valor = TextBox1.Text
If TextBox1.Text = Empty Or TextBox2 = Empty Then End
With datos
    cuenta = WorksheetFunction.CountIf(.Columns(1), valor) * 2
For i = 1 To cuenta
    If i = 1 Then Set busca = .Find(valor)
    If i > 1 Then Set busca = .FindNext(busca)
    celda = busca.Address
    Range(celda) = TextBox2.Text
Next i
End With
End Sub

Mil gracias por la respuesta, funciona perfecto, quiero preguntarle si hay riesgo que si en alguna otra columna diferente de la A y E tiene el dato que se pretende reemplazar este lo cambia?, por ejemplo yo quiero reemplazar el código 1000, y dicho dato está también en la columna C (cantidad), con la macro tambíen me reemplazaría dicho dato en esa columna?

La respuesta a tu pregunta es si, si tienes por ejemplo .0002 en la columna H y G y haces el cambio por .0001 también los cambiara, no lo hará si es parte de un entero por ejemplo 10.0002 en esta caso no cambiara nada, la programación original que te propuse no funciona debido a que manejas el código por decimales y las funciones que iba a emplear para hacer una búsqueda más exacta interpretan esos valores como 0.

Si tus valores fueran enteros la otra macro funcionaria perfectamente solo buscaría en dos columnas y harai el cambio sobre esas dos.

Perfecto mil gracias, voy a mirar si puedo mejorar el proceso con los datos que me ha suministrado, igual me sirve mucho para avanzar un poco más hasta conseguir el propósito.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas