XL 2021 Verifier les doublons dans feuille avant validation

BLACKHAYES

XLDnaute Impliqué
Bonjour le forum,

Je suis dans la tourmente car je n'arrive pas a créer mon code vba de mon bouton sur mon "userform2" pour qu'il vérifie si "doublon dans la colonne "A"; "F" et "G" de ma feuille "Base de données" et si doublon alors message d'alerte dans tel colonne et demander si valider ou non et si non alors vider les textbox (sauf la textbox9 qui me sert a afficher la date)

Je mets si dessous mon code de départ qui me sert a valider mes texbox de mon userform2

Private Sub CommandButton1_Click()

' Référence à la feuille "Base de données"
Dim ws As Worksheet
Dim dernièreLigne As Long

Set ws = ThisWorkbook.Sheets("Base de données")

' Trouver la première ligne vide dans la colonne A
dernièreLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

' Insérer la valeur de TextBox3 dans la cellule de la colonne A à la première ligne vide
ws.Cells(dernièreLigne, "A").Value = UserForm2.TextBox3.Value

' Insérer la valeur de TextBox4 dans la cellule de la colonne B à la première ligne vide
ws.Cells(dernièreLigne, "B").Value = UserForm2.TextBox4.Value

' Insérer la valeur de TextBox2 dans la cellule de la colonne C à la première ligne vide
ws.Cells(dernièreLigne, "C").Value = UserForm2.TextBox2.Value

' Insérer la valeur de TextBox6 dans la cellule de la colonne D à la première ligne vide
ws.Cells(dernièreLigne, "D").Value = UserForm2.TextBox6.Value

' Insérer la valeur de TextBox8 dans la cellule de la colonne E à la première ligne vide
ws.Cells(dernièreLigne, "E").Value = UserForm2.TextBox8.Value

' Insérer la valeur de TextBox5 dans la cellule de la colonne F à la première ligne vide
ws.Cells(dernièreLigne, "F").Value = UserForm2.TextBox5.Value

' Insérer la valeur de TextBox7 dans la cellule de la colonne G à la première ligne vide
ws.Cells(dernièreLigne, "G").Value = UserForm2.TextBox7.Value


' Fermer UserForm2
Unload UserForm2

' Ouvrir UserForm1
UserForm1.Show


End Sub


alors si vous avez une solution a mon problème, car j'ai essayer un nombre de code mais rien n'y fait, soit il voit des doublons dans toutes les colonnes ou bien toujours dans la "G"
Bref je seche

vous remerciant d'avance
 

BLACKHAYES

XLDnaute Impliqué
bonjour

dans ton code, je ne vois nulle part où tu cherches les doublons..?
plutot que du code en vrac, peux tu poster un fichier en guise d'exemple
comme indiquer j'ai remis mon code au depart ou je ne vérifiais pas les doublons

voici mon code pour les doublons, mais avec des bug

Private Sub CommandButton1_Click()
' Référence à la feuille "Base de données"
Dim ws As Worksheet
Dim ctrl As Control
Dim doublonTrouve As Boolean
Dim valeurTextBox As String
Dim colonneDoublon As String
Dim i As Long, j As Long
Dim reponse As VbMsgBoxResult
Dim derniereLigne As Long
Dim colonnes As Variant

' Désactiver CommandButton1 avant l'enregistrement
CommandButton1.Enabled = False

' Référence à la feuille "Base de données"
Set ws = ThisWorkbook.Sheets("Base de données")

doublonTrouve = False

' Définir les colonnes à vérifier (A, F, G)
colonnes = Array(1, 6, 7)

' Vérifier les doublons dans les colonnes A, F et G pour chaque TextBox sauf TextBox9
For Each ctrl In UserForm2.Controls
If TypeName(ctrl) = "TextBox" And ctrl.Name <> "TextBox9" Then
valeurTextBox = ctrl.Value
For i = LBound(colonnes) To UBound(colonnes)
For j = 1 To ws.Cells(ws.Rows.Count, colonnes(i)).End(xlUp).Row
If ws.Cells(j, colonnes(i)).Value = valeurTextBox Then
doublonTrouve = True
colonneDoublon = Split(ws.Cells(1, colonnes(i)).Address, "$")(1) ' Obtenir la lettre de la colonne
Exit For
End If
Next j
If doublonTrouve Then
Exit For
End If
Next i
If doublonTrouve Then
Exit For
End If
End If
Next ctrl

' Si un doublon est trouvé, afficher un message d'alerte
If doublonTrouve Then
reponse = MsgBox("Attention, doublon trouvé dans la colonne " & colonneDoublon & " de la feuille 'Base de données'. Voulez-vous valider quand même?", vbExclamation + vbYesNo, "Doublon Détecté")

If reponse = vbNo Then
' Effacer les TextBox sauf TextBox9
For Each ctrl In UserForm2.Controls
If TypeName(ctrl) = "TextBox" And ctrl.Name <> "TextBox9" Then
ctrl.Text = ""
End If
Next ctrl

' Réactiver CommandButton1 pour nouvelle saisie
CommandButton1.Enabled = True
Exit Sub
End If
End If

' Code pour enregistrer les TextBox dans la feuille "Base de données"
' Ce code ne sera exécuté que si aucun doublon n'est trouvé ou si l'utilisateur choisit de valider
derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1

' Enregistrer les valeurs des TextBox dans la nouvelle ligne
' Assurez-vous de mapper chaque TextBox à la colonne correcte
ws.Cells(derniereLigne, 1).Value = UserForm2.TextBox3.Value ' Colonne A (TextBox3)
ws.Cells(derniereLigne, 2).Value = UserForm2.TextBox4.Value ' Colonne B (TextBox4)
ws.Cells(derniereLigne, 3).Value = UserForm2.TextBox2.Value ' Colonne C (TextBox2)
ws.Cells(derniereLigne, 4).Value = UserForm2.TextBox6.Value ' Colonne D (TextBox6)
ws.Cells(derniereLigne, 5).Value = UserForm2.TextBox8.Value ' Colonne E (TextBox8)
ws.Cells(derniereLigne, 6).Value = UserForm2.TextBox7.Value ' Colonne F (TextBox7)
ws.Cells(derniereLigne, 7).Value = UserForm2.TextBox5.Value ' Colonne G (TextBox5)

' Afficher un message de confirmation
MsgBox "Enregistrement effectué avec succès !", vbInformation

' Vider les TextBox sauf TextBox9 pour nouvelle saisie
For Each ctrl In UserForm2.Controls
If TypeName(ctrl) = "TextBox" And ctrl.Name <> "TextBox9" Then
ctrl.Text = ""
End If
Next ctrl

' Réactiver CommandButton1 pour nouvelle saisie
CommandButton1.Enabled = True
End Sub
 

BLACKHAYES

XLDnaute Impliqué
ok, merci pour ce code je vais essayer de l'integrer
Mais je ne comprends pas ce que vous voulez dire par fichier vide
si c'est ma base de données avec les cellules vides, alors oui c'est volontaire car je pensais que la personne qui testerais mon fichier renseignerait mon userform2 avec des valeurs et les valider pour test
Maintenant si il faut que je lui intègre quelques valeurs pour test, alors voila j'ai renseigné 3 lignes pour test.
 

Pièces jointes

  • Module Test.xlsm
    40.1 KB · Affichages: 1

cathodique

XLDnaute Barbatruc
ok, merci pour ce code je vais essayer de l'integrer
Mais je ne comprends pas ce que vous voulez dire par fichier vide
si c'est ma base de données avec les cellules vides, alors oui c'est volontaire car je pensais que la personne qui testerais mon fichier renseignerait mon userform2 avec des valeurs et les valider pour test
Maintenant si il faut que je lui intègre quelques valeurs pour test, alors voila j'ai renseigné 3 lignes pour test.
Bonsoir,

Il faut toujours garder à l'esprit que les personnes qui aident font partie de la communauté. Donc c'est de l'entraide bénévole.
Le retour de @vgendron est en rapport avec ce que tu as joint et demandé.
Et si on ne comprend pas tes attentes (surtout avec un fichier incomplet), on te donnera des solutions approximatives par rapport à ce qu'on a compris.

Que veux-tu faire au juste?
 

cathodique

XLDnaute Barbatruc
@BLACKHAYES : tu t'es emmêlé les pinceaux. Tu as édité un code qui n'existe pas dans ton fichier joint. Il y a aussi un appel à un userform non présent dans ton fichier.
ensuite dans ton tu fais référence à la colonne 9 alors que cette colonne n'est utilisé.
Fais-toi comprendre pour qu'on puisse t'aider.
perso, jusqu'à l'heure actuelle je demande de l'aide quand ça coince.

Bonne soirée.
 

Discussions similaires

Réponses
9
Affichages
340
Réponses
0
Affichages
351

Statistiques des forums

Discussions
315 057
Messages
2 115 788
Membres
112 542
dernier inscrit
J-c2417