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'ai une erreur de compilation lorsque je tente cette opération

capture

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

Rechercher des sujets similaires à "interdire doublons"