Mensaje de alerta en macro para repetidos

Sras.. Muy buenas noches.

Tengo una plantilla con varias macros, para entrada de productos, edición etc., el asunto es que quiero meterle un mensaje de alerta sobre existencia de productos, cuando ingreso nuevo producto, edito etc.. Es una plantilla muy personal, no tengo ninguna empresa ni trabajo en esto, mi trabajo ahora es en casa con mis 72 primaveras y jubilado, pero quiero meter algunas cosas que tengo en casa en esa plantilla para mas tarde no "parir" valga la redundancia buscando donde carrizo está cierta cosa

Encuesta (pregunta): ¿Sobre cual es lo indicado colocar el mensaje ¿sobre el código o el nombre existente?

3 respuestas

Respuesta
2

El mensaje puede colocarse al final de validar los dos datos, de tal suerte que al encontrar uno u otro dato existente la macro debe pasar sobre el disparador del mensaje.

El mensaje puede ser genérico algo si como: "Código o Producto ya existe, valide su información a ingresar".

Si se requiere un mensaje mas preciso Tendría que considerarse otras variantes.

Guardar el resultado encontrado en una variable para Código y el resultado encontrado en otra variable para Producto. Va una macro a manera de ejemplo:

Sub buscar()
        nombrehoja = ActiveSheet.Name
        Set b = Sheets(nombrehoja)
        UF = b.Range("B" & Rows.Count).End(xlUp).Row
        b.AutoFilterMode = False
        Codigo = txtCod.Text
        producto = txtProd.Text
        For i = 2 To UF
            Cod = b.Cells(i, 1).Value
            Prod = b.Cells(i, 2).Value
            Prod = RTrim(Prod)
            If UCase(txtProd.Text) = UCase(Prod) And UCase(txtCod.Text) = UCase(Cod) Then
                Mensage = MsgBox("El producto " & txtProd.Text & " y el codigo " & txtCod.Text & " ya existe." & vbCrLf & vbCrLf & _
                "Puede escribir nuevo nombre y seguir, o en otro proceso editar datos", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
                txtProd.Text = ""
                    Exit Sub
            ElseIf UCase(txtProd.Text) <> UCase(Prod) And UCase(txtCod.Text) = UCase(Cod) Then
                Mensage = MsgBox("El codigo " & txtCod.Text & "ya existe." & vbCrLf & vbCrLf & _
                "Puede escribir nuevo nombre y seguir, o en otro proceso editar datos", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
                txtProd.Text = ""
                Exit Sub
            ElseIf UCase(txtProd.Text) <> UCase(Prod) And UCase(txtCod.Text) <> UCase(Cod) Then
            End If
        Next i
End Sub
Respuesta
1

Puedes utilizar el método Find para buscar en una hoja y en una columna si existe cierto dato.

Sub test()
  Dim f As Range, dato As String
  dato = "el producto"
  Set f = Sheets("Hoja1").Range("A:A").Find(dato, , xlValues, xlWhole)
  If Not f Is Nothing Then
    MsgBox "Ya existe"
  End If
End Sub

Hola Dante

La cosa es que la macro tiene alerta si el nombre existe, pero aunque le de nombre nuevo al producto, y el mismo código que ya existe en la hoja, sobrescribe toda la linea del producto existente porque le doy el mismo código.

Averiguando concluyo que:

Si colocas nuevo nombre (inexistente en la hoja), pero el mismo código ya existente, te sobrescribe el existente y eso está mal así.

Debe verificar el nombre pero dejar que el código sea el mismo

Eje.: Ya existe Queso Amarillo en B con el código quesovario en A

Dejarme agregar nuevo producto (Queso de cabra) con el mismo código quesovario en A

Busco en el buscador Queso Amarillo selecciono la hoja, criterio a buscar y escribo en Texto a buscar "que" y me vá a mostrar todos los tipos de queso o otros productos que comience por que

En la plantilla (hoja) puede haber varios productos con el mismo código, no varios códigos con el mismo producto

Código que hace referencia a una rama de productos, alambre hay varios tipos, lo mismo clavos, cerraduras, cauchos, queso, alcaparras, aceitunas, etc. etc. y un grande etc.

Porque hay otros formularios, uno para agregar producto cuando algunos en las hojas están a punto de quedar en existencia 0 pero no nuevo en la hoja, si no productos que ya existen. El mismo formulario para egresos cuando retiro algún producto de alguna de las hojas.

LA MACRO CONOCIDA POR TI

Private Sub cbtNueClien_Click()
    On Error Resume Next
    Dim fila As Integer
    Set ws = ActiveSheet
    If cboHojas.Value = "" Then
        MsgBox "NO HA SELECCIONADO HOJA"
        Exit Sub
    Else
'Viene de la Function valida(wtext As MSForms.Control, num)
    If MINCaracter(txtCod, "Cod/Producto", 10) = False Then Exit Sub ''AQUI 10 DIGITOS MINIMO
''''''''''''''
    If Application.CountIf(ActiveSheet.Range("B2:B50000"), txtProd.Value) Then 'Busca en la columna B si existe el contacto
Rem Si existe la rutina llega solo al If mensage. si no existe, brinca despu?s de Else para insertar los datos.
        Mensage = MsgBox("El producto " & txtProd.Text & " ya existe." & vbCrLf & vbCrLf & _
                "Puede escribir nuevo nombre y seguir, o en otro proceso editar datos", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
        txtProd.Text = "" 'Si te d? mensage, Limpia el TextBox
        If Mensage = vbOK Then Exit Sub 'Del mensage presionas OK y hasta el Exit Sub llega la rutina
    Else
''''
'Inserta datos de nuevo cliente
    With ws
       fila = .Range("A2:A25000").Find(txtCod, lookat:=xlWhole).Row
       If Err.Number = 91 Then
          fila = .Range("b" & .Rows.Count).End(xlUp)(2).Row
          Call ingresar_datos(fila)
          Exit Sub
       End If
       Call ingresar_datos(fila) 'aquí actúa otra macro
    End With
    End If
    End If
    Buscar.Enabled = False
End Sub

Quiero que valide el nombre si pero que me deje usar el mismo código que ya exista

Yo solamente te puse un ejemplo

Debes adaptarlo a tus necesidades.

Y digo debes adaptarlo, porque en tu petición original no mencionas qué vas a buscar, en dónde lo vas a buscar, qué hacer si lo encuentras, qué hacer si no lo encuentras.

Ya has publicado muchas preguntas en el foro, y debe ser consciente, si no proporcionas información específica, no habrá una respuesta específica.

Ayuda a los expertos a ayudarte.

R e c u e r d a, tú estás pidiendo ayuda, así que en tus próximas peticiones, procura ser muy claro con lo que necesitas.

Pon ejemplos, imágenes, tienes muchas herramientas para que te proporcionemos una ayuda puntual.

Solamente pediste esto:

Encuesta (pregunta): ¿Sobre cual es lo indicado colocar el mensaje ¿sobre el código o el nombre existente?

En realidad con eso no se puede entregar una respuesta, prácticamente hay que adivinar todo, en cuál hoja buscar, en cuál columna buscar, qué dato buscar, es completo o parte de una celda, es texto o numérico, etc, etc, etc.

Hola Dante.

Según el titulo, respondiste en una pregunta y si una otra pregunta que formule que no es esta donde estás respondiendo, pero ok, no importa.

Disculpa y gracias por hacerte perder tu tiempo

Si les
Encuesta (pregunta): ¿Sobre cual es lo indicado colocar el mensaje ¿sobre el código o el nombre existente?

la finalidad de la pregunta: ¿sobre el código o el nombre existente?

R. Sobre el codigo

o

R: SObre el nombre

Que por cierto, PARECE que la eliminaron o mandaron, ¿quién? No puedo saber

Además para respuesta, estaba bien formulada

Ahora no entendí.

Pero supongo que ya encontraste la solución.

Respuesta

Fíjate si algo de esto puede aportar algo más

https://macrosenexcel.com/macro-alerta-de-evento-parpadeo-de-celda

https://macrosenexcel.com/msgbox-de-alerta-o-aviso 

Si requieres buscar datos esto puede se de ayuda

https://youtu.be/8ofRt-SDpfc

https://youtu.be/SiYG7sBH7zo 

https://youtu.be/0xqYY1R8UxM

https://youtu.be/of5u7VXoIk8

https://youtu.be/xz-p04lQ1-Y 

Mas sobre busqueda en excel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas