Empêche la saisie d'un doublon

Bonjour,

Je vous explique mon problème. J'ai une Userform ("Nouveau") dans laquelle, je rentre différentes infos qui vont venir s'incrémenter dans ma base de donnée. J'aurais voulu rajouter une option lors de la saisie du code produit, qui m'empêche la validation de cette valeur si elle est déjà présente dans ma base. J'ai déjà bidouillé un code mais celui-ci ne semble pas fonctionner, du moins il ne fonctionne pas comme je le voudrais. Pouvez-vous m'aider?

Voici mon fichier :

Cordialement,

U_goffu

Je vais répondre au titre du sujet :

pour empêcher la saisie d'un doublon, dans Excel, il suffit avec une validation conditionnelle de nombre (nb.si) de valeurs égales à celle saisie est inférieure à 1 (ou 2 si la cellule saisie est dans la plage)

Après, là, c'est du vba tellement bourrin que je n'arrive même pas à ouvrir le fichier sans que cela fasse planter excel en boucle et qu'il faille tuer l'application. (tout ce que j'aime quoi). Du coup, bon courage :p

Ah mince,

voici mon code au cas ou :

Private Sub TextBox1_Change()

Application.ScreenUpdating = False

Dim derligne As Long

Dim i As Integer

derligne = Sheets("Stock").Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To derligne

If Cells(i, 1) = TextBox1.Value Then

MsgBox ("Ce code produit est déjà présent dans la base de donnée!!")

Me.TextBox1.Value = ""

End If

Next

Application.ScreenUpdating = True

End Sub

Merci en tout cas et désolé pour ton plantage de PC.

Bonjour,

Voici le code que j'ai essayé de mettre en place mais celui-ci ne fonctionne pas et j'aurais voulu savoir pourquoi. S'il y a une âme charritable qui peut m'aider sa serait cool .

Private Sub CommandButton1_Click() 'validation

Application.ScreenUpdating = False

Worksheets("Stock").Activate

Dim ctrl As Control

Dim derligne As Long

Dim i As Integer

Dim derligne1 As Long

derligne = Sheets("Stock").Range("A" & Rows.Count).End(xlUp).Row

If (TextBox1 = Empty Or TextBox2 = Empty Or TextBox4 = Empty Or TextBox5 = Empty Or TextBox6 = Empty Or TextBox7 = Empty Or TextBox8 = Empty Or TextBox10 = Empty) Then

MsgBox ("Renseigner les différents champs")

Else

For i = 2 To derligne

'

If Me.TextBox1.Value = Cells(i, 1).Value Then

MsgBox "Ce code produit existe déjà"

TextBox1.Value = ""

UserForm_Initialize

Exit Sub

End If

Next

If MsgBox("Etes_vous sur de vouloir continuer?", vbYesNo, "Attention!") = vbYes Then

derligne1 = Sheets("Stock").Range("A65000").End(xlUp).Row + 1

Cells(derligne, 1) = TextBox1.Value 'code produit

Cells(derligne, 2) = TextBox4.Value 'description

Cells(derligne, 3) = TextBox7.Value 'date recep

Cells(derligne, 4) = TextBox5.Value 'fournisseur

Cells(derligne, 5) = TextBox10.Value 'code fournisseur

Cells(derligne, 6) = TextBox6.Value 'délai de livraison

Cells(derligne, 7) = TextBox2.Value 'quantité

Cells(derligne, 8) = TextBox8.Value 'BL

Cells(derligne, 9) = TextBox9.Value 'rangement

ActiveWorkbook.RefreshAll

Nouveau.Hide

Mon_menu.Show

End If

End If

For Each ctrl In Me.Controls

If TypeOf ctrl Is MSForms.TextBox Then ctrl.Value = ""

Next

ActiveWorkbook.Save

ActiveWorkbook.RefreshAll

End Sub

bonjour,

moi je remplacerai la TextBox1_Change comme ça :

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim derligne As Long
Dim i As Integer

derligne = Sheets("Stock").Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To derligne
        If CStr(Sheets("Stock").Cells(i, 1)) = TextBox1 Then
        Cancel = True
            MsgBox ("Ce code produit est déjà présent dans la base de donnée!!")
            Me.TextBox1.Value = ""
        End If
    Next
End Sub

Attention toutefois quand tu envoies des instructions du type :

Cells(derligne, 1) = ... 'suppose que la Sheets("Stock") est active sinon utiliser :
Sheets("Stock").Cells(derligne, 1)) 

A+

Merci galopin01. tout fonctionne comme il faut.

Encore merci et bonne journée.

Rechercher des sujets similaires à "empeche saisie doublon"