Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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é
non ce n'est pas au niveau de la feuille
je cherche a faire une macro qui me recherche si doublon il y a en partant de mon userform2 et en fonction des valeurs de mes textbox, justement pour eviter de verifier dans la feuille
 

vgendron

XLDnaute Barbatruc
vu que tu restes avec ton fichier vide mon aide se limitera à ceci
pour chaque ligne de la feuille
si cellule A = texbox1 ET cellule B=Textbox3 ET celluleC=textbox4 alors
doublon
sortie boucle
fin si
next ligne
 

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
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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…