Interdire les Doublons
Bonjour à vous,
Je vous reercie d'avance pour votre aide et soutient. J'ai actuellement une base de donées qui est géré par des userform. J'ai un un userform permettant la création de données et un permettant la modification des données. Ce que je tente de faire c'est lorsque nous créons une données, qu'il y ait un controle sur le numéro de la commande (texbox0) qui permet de rechercher dans la basse de données en colone A (feuille ''BD'') si le numéro de commande existe déjà. Si la ocmmande est existante j'aimerais bloquer la transsaction en indiquant que la commande est déjà exisatane et qu'il faut rechercher et modifier.
Je ne sais pas vraiment par où commencer pour faire le tout. Je vous copie mon code qui permet de créé les commandes.
Merci pour votre soutiens c'est très aprécié.
Private Sub Enregistrer_Click()
'ont s'assure d'ouvrir le menu BD
Sheets("Bd").Select
Dim lr As Integer
Dim ws As Worksheet
Dim user As String
Dim mdp As Variant
Dim cnf As Variant
Set ws = Sheets("Bd")
lr = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
PO = Me.TextBox0
Poste = Me.TextBox1
Prove = Me.ComboBox1
Comgen = Me.TextBox2
DateRel = Me.TextBox3
Raison = Me.TextBox4
Problematique = Me.ComboBox2
entreprise = Me.TextBox12
priorite = Me.ComboBox3
secteur = Me.ComboBox4
If PO = "" Or Poste = "" Or Prove = "" Or entreprise = "" Or Date = "" Or Raison = "" Or Problematique = "" Or priorite = "" Then
MsgBox "Veuillez remplir tous les champs obligatoire (tous sauf commentaires généraux)."
Else
If MsgBox("Êtes-vous certain de vouloir enregistrer une nouvelle relance? Avez-vous validé que cette relance ou ce numéro de PO n'existe pas?", vbYesNo, "Création du compte") = vbYes Then
With ws
.Cells(lr, 1) = PO
.Cells(lr, 2) = Poste
.Cells(lr, 3) = Prove
.Cells(lr, 4) = Comgen
.Cells(lr, 5) = DateRel
.Cells(lr, 6) = Raison
.Cells(lr, 7) = "-"
.Cells(lr, 8) = "-"
.Cells(lr, 9) = "-"
.Cells(lr, 10) = "-"
.Cells(lr, 11) = "-"
.Cells(lr, 12) = Problematique
.Cells(lr, 13) = entreprise
.Cells(lr, 14) = priorite
.Cells(lr, 15) = secteur
ActiveWorkbook.Save
MsgBox "Votre relance à été enregistré."
End With
End If
End If
End Sub
Bonjour,
Supposant que ce fameux numéro de commande correspond à la variable Comgen
, exportée en colonne 4 de la feuille. Un essai :
With ws
If Application.CountIf(.Range("D:D"),Comgen) > 0 Then
MsgBox "Le numéro de commande existe déjà !"
Exit Sub 'Quitter la macro (optionnel)
Else
.Cells(lr, 1) = PO
.Cells(lr, 2) = Poste
.Cells(lr, 3) = Prove
.Cells(lr, 4) = Comgen
.Cells(lr, 5) = DateRel
.Cells(lr, 6) = Raison
.Cells(lr, 7) = "-"
.Cells(lr, 8) = "-"
.Cells(lr, 9) = "-"
.Cells(lr, 10) = "-"
.Cells(lr, 11) = "-"
.Cells(lr, 12) = Problematique
.Cells(lr, 13) = entreprise
.Cells(lr, 14) = priorite
.Cells(lr, 15) = secteur
ActiveWorkbook.Save
MsgBox "Votre relance à été enregistré."
End If
End With
J'avais pris soin de mettre un extrait exhaustif de code et pas seulement mon ajout pour voir comment l'intégrer dans le code...
L'objet Range
ne peut débuter par un "." que s'il est inclus dans la structure With ws ... End With
, sinon il faut préciser ws
devant.
Par ailleurs, si vous ne mettez ni End If
, ni Else
à la suite des 3 lignes ajoutées, le reste ne sera jamais exécuté...
Je suis désolé mais je ne suis pas certain de faire la bonne chose. J'ai tenté ces deux codes mais je ne réussis pas à faire exécuter la formule.
Private Sub Enregistrer_Click()
'ont s'assure d'ouvrir le menu BD
Sheets("Bd").Select
Dim lr As Integer
Dim ws As Worksheet
Dim user As String
Dim mdp As Variant
Dim cnf As Variant
Set ws = Sheets("Bd")
lr = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
po = Me.TextBox0
Poste = Me.TextBox1
Prove = Me.ComboBox1
comgen = Me.TextBox2
DateRel = Me.TextBox3
Raison = Me.TextBox4
Problematique = Me.ComboBox2
entreprise = Me.TextBox12
priorite = Me.ComboBox3
secteur = Me.ComboBox4
If po = "" Or Poste = "" Or Prove = "" Or entreprise = "" Or Date = "" Or Raison = "" Or Problematique = "" Or priorite = "" Then
MsgBox "Veuillez remplir tous les champs obligatoire (tous sauf commentaires généraux)."
Else
If MsgBox("Êtes-vous certain de vouloir enregistrer une nouvelle relance? Avez-vous validé que cette relance ou ce numéro de PO n'existe pas?", vbYesNo, "Création du compte") = vbYes Then
If Application.CountIf(ws.Range("d:d"), comgen) > 0 Then
MsgBox "Le numéro de commande existe déjà !"
Exit Sub 'Quitter la macro (optionnel)
End If
Else
With ws
.Cells(lr, 1) = po
.Cells(lr, 2) = Poste
.Cells(lr, 3) = Prove
.Cells(lr, 4) = comgen
.Cells(lr, 5) = DateRel
.Cells(lr, 6) = Raison
.Cells(lr, 7) = "-"
.Cells(lr, 8) = "-"
.Cells(lr, 9) = "-"
.Cells(lr, 10) = "-"
.Cells(lr, 11) = "-"
.Cells(lr, 12) = Problematique
.Cells(lr, 13) = entreprise
.Cells(lr, 14) = priorite
.Cells(lr, 15) = secteur
ActiveWorkbook.Save
MsgBox "Votre relance à été enregistré."
End With
End If
End If
End Sub
Et celui ci
Private Sub Enregistrer_Click()
'ont s'assure d'ouvrir le menu BD
Sheets("Bd").Select
Dim lr As Integer
Dim ws As Worksheet
Dim user As String
Dim mdp As Variant
Dim cnf As Variant
Set ws = Sheets("Bd")
lr = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
po = Me.TextBox0
Poste = Me.TextBox1
Prove = Me.ComboBox1
comgen = Me.TextBox2
DateRel = Me.TextBox3
Raison = Me.TextBox4
Problematique = Me.ComboBox2
entreprise = Me.TextBox12
priorite = Me.ComboBox3
secteur = Me.ComboBox4
If po = "" Or Poste = "" Or Prove = "" Or entreprise = "" Or Date = "" Or Raison = "" Or Problematique = "" Or priorite = "" Then
MsgBox "Veuillez remplir tous les champs obligatoire (tous sauf commentaires généraux)."
Else
If MsgBox("Êtes-vous certain de vouloir enregistrer une nouvelle relance? Avez-vous validé que cette relance ou ce numéro de PO n'existe pas?", vbYesNo, "Création du compte") = vbYes Then
With ws
If Application.CountIf(.Range("d:d"), comgen) > 0 Then
MsgBox "Le numéro de commande existe déjà !"
Exit Sub 'Quitter la macro (optionnel)
End With
End If
Else
With ws
.Cells(lr, 1) = po
.Cells(lr, 2) = Poste
.Cells(lr, 3) = Prove
.Cells(lr, 4) = comgen
.Cells(lr, 5) = DateRel
.Cells(lr, 6) = Raison
.Cells(lr, 7) = "-"
.Cells(lr, 8) = "-"
.Cells(lr, 9) = "-"
.Cells(lr, 10) = "-"
.Cells(lr, 11) = "-"
.Cells(lr, 12) = Problematique
.Cells(lr, 13) = entreprise
.Cells(lr, 14) = priorite
.Cells(lr, 15) = secteur
ActiveWorkbook.Save
MsgBox "Votre relance à été enregistré."
End With
End If
End If
End Sub
Néanmoins, je n'arive pas au résultats que je recherche.
Il vous suffisait de copier directement le code que j'avais proposé...
C'est soit End If
, soit Else
, pas les 2 !
C'est logique
Merci énormément pour votre soutient