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.