Evitar duplicados al introducir en un formulario

balou11 -  
michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   -
Hola a todos,

Les presento mi problema (he intentado encontrar la solución en la red, pero en vano)
Aquí va: tengo una base de datos en Excel, en la columna B está el apellido, en la columna C está el nombre, y en la columna A tengo una fórmula que concatena los dos.

Ejemplo: escribo en B: DUPONT
en C: ALAIN
En A: DUPONT ALAIN (eso se completa solo)

Pero, voy llenando esta base mediante un formulario (que funciona muy bien), por otro lado me gustaría, mediante VBA, prohibir la entrada de duplicados; sería imposible volver a introducir un DUPONT ALAIN.
Habría que hacer que ese código de prohibición se ejecute después de ingresar ALAIN, ya que el usuario debe introducir primero el apellido.

De antemano, gracias.

3 respuestas

  1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
     
    Hola,

    a poner en el módulo de la hoja:

    Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Application.WorksheetFunction.CountIf(Range("B:B"), Target.Value) > 1 Then MsgBox "Nom déja employé" Target.Value = "" Target.Select End If End Sub 


    --
    @+ Le Pivert
    0
  2. balou11
     
    Primero, gracias por la respuesta, Señor "el pájaro carpintero"!

    Pero eso no funciona, puedo crear perfectamente DUPONT PASCALE, lo que haría falta es que el código pueda mirar en la columna (A) que concatena el nombre y el apellido (DUPONT ALAIN).

    Haría falta que el usuario, en el campo "nom", indique "DUPONT".

    Luego, que pueda indicar el nombre (el prénom), pero que si en la columna A, que concatena ambos (nombre y apellido), aparece un mensaje. ¡Merci encore à tous de prendre de votre temps!
    0
    1. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730
       
      Rectificación para la columna A que contiene nombre y apellido A colocar en el userForm: Option Explicit Private Sub CommandButton1_Click() Dim DerniereLigneUtilisee As Long DerniereLigneUtilisee = Range("A" & Rows.Count).End(xlUp).Row + 1 Range("C" & DerniereLigneUtilisee).Value = TextBox1 ' prénom Range("B" & DerniereLigneUtilisee).Value = TextBox2 ' nom Range("A" & DerniereLigneUtilisee).Value = Range("C" & DerniereLigneUtilisee).Value & " " & Range("B" & DerniereLigneUtilisee).Value End Sub a colocar en la hoja correspondiente: Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Application.WorksheetFunction.CountIf(Range("A:A"), Target.Value) > 1 Then MsgBox "Nom déjà utilisé" Target.Value = "" Range("B" & Target.Row) = "" Range("C" & Target.Row) = "" Target.Select End If End Sub Voilà
      0
      1. balou11 > cs_Le Pivert Mensajes publicados 8437 Estado Colaborador
         
        Señor "el Ardilla"

        no, todavía no es mejor, he probado con otras modificaciones, pero eso no funciona, ¡ni siquiera puedo crear nombres desconocidos en la base de datos! ! !

        Debo decir que no es simple,
        Gracias por sus respuestas
        0
      2. cs_Le Pivert Mensajes publicados 8437 Estado Colaborador 730 > balou11
         
        Publica tu cuaderno anonimizado en este sitio. Luego pega el enlace en este mensaje:

        https://www.cjoint.com/

        @+ El Pivert
        0
  3. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
     
    Hola

    Para obligar a un pedido de captura (primer nombre luego apellido o al revés !..)

    utiliza la propiedad de los textbox: enabled
    en la ayuda de VBA


    mientras que "nombre" no esté informado, no puedes escribir en "apellido"
    0
    1. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
       
      Si no tienes la costumbre de manipular formularios (UserForm), tienes este tutorial muy detallado de SilKyroad, antiguo MVP de Microsoft
      https://excel.developpez.com/cours/?page=prog#userform
      0