Vérification si doublon pendant la saise

  • Initiateur de la discussion Initiateur de la discussion apt
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

apt

XLDnaute Impliqué
Bonsoir à tous,

J'ai trouvé ce code sur xld.

Code:
Set r = Sheets("BD").Columns(1).Find(Target.Value, , xlValues, xlWhole, , , False)    'définit la recherche
    If Not r Is Nothing Then    'condition : si il existe au moins une occurrence dans la colonne A de l'onglet "BD"
        MsgBox "Le N° " & r.Value & " est déjà saisie dans la ligne " & r.Row, vbCritical, "DOUBLON"    'message d'ereur
        Target.Value = ""    'efface la valeur éditée
        Target.Select    'place le curseur dans la cellule Active
    Else
        Target.NumberFormat = "0###"" ""##"" ""##"" ""##"
    End If    'fin de la condition

Mais voila, ça ne marche pas et la dernière ligne saisie est toujours considérée comme doublon et elle est signalée et effacée (r.Row prend toujours la dernière ligne)

Merci.
 
Dernière édition:
Re : Vérification si doublon pendant la saise

Bonjour,

As-tu essayé quelque chose comme :

VB:
Dim Plage As Range, C As Range, DerLig As Long
With Feuil1
    DerLig = .Range("A65000").End(xlUp).Offset(-1, 0).Row
    Set Plage = Intersect(Target, .Range("A6", "A" & DerLig))
    For Each C In Plage
        If C <> "" Then
            Set Trouve = Plage.Find(What:=C.Text, After:=C, _
                         LookIn:=xlValues, lookat:=xlPart, _
                         searchdirection:=xlNext)
            If Trouve.Address <> C.Address Then
                'ton code s'il y a doublon
                MsgBox Trouve.Row
            End If
        End If
    Next
End With
 
Re : Vérification si doublon pendant la saise

Bonsoir MichD,

Ca na pas marché vu que Plage=nothing

Edit :

J'ai essayé d'adapter le code, mais rien d'obtenu :

Code:
Set Plage = Range([A6], [A65000].End(xlUp).Offset(-1, 0))
Set Trouve = Plage.Find(What:="0" & Target.Value, After:=Target.Offset(1, 0), _
                        LookIn:=xlValues, lookat:=xlPart, _
                        searchdirection:=xlNext)
If Not Trouve Is Nothing Then
    If Trouve.Address <> Target.Address Then
        '---
        MsgBox "Le N° 0" & Trouve.Value & " est déjà saisi à la ligne " & Trouve.Row, vbCritical, "DOUBLON"    'message d'erreur
        Target.Value = ""    'efface la valeur éditée
        Target.Select    'place le curseur dans la cellule Active
    End If
End If

Et comme le format de la première cellule est :

Code:
Target.NumberFormat = "0###"" ""##"" ""##"" ""##"

Alors vous pouvez remarquez un "0" ajouter devant le mot recherché dans Plage.find
 
Dernière édition:
Re : Vérification si doublon pendant la saise

La procédure a été corrigée.

Il y avait un problème sur cette ligne de code :
Set Plage = Intersect(Range("A6"), .Range("A6", "A" & DerLig))

Il fallait remplacer le premier A6 par Target
Set Plage = Intersect(Target, .Range("A6", "A" & DerLig))

La procédure du message précédent a été corrigée.
 
Re : Vérification si doublon pendant la saise

La section complète de Case 1

VB:
        Case 1
          '-- Partie pour eviter de saisir des doublons

            With Feuil1
                DerLig = .Range("A65000").End(xlUp).Row
                Set Plage = .Range("A6", "A" & DerLig)
                Set Rg = Intersect(Target, .Range("A6", "A" & DerLig))
                For Each C In Rg
                    If C <> "" Then
                        Set Trouve = Plage.Find(What:=C.Text, After:=C, _
                            LookIn:=xlValues, lookat:=xlPart, searchOrder:=xlByColumns, _
                            searchdirection:=xlNext)
                        If Trouve.Address <> C.Address Then
                            'ton code s'il y a doublon
                            MsgBox "La donnée existe déjà là : " & "A" & Trouve.Row
                            'Vider la cellule
                            C.ClearContents
                            C.Select
                        Else
                            C.NumberFormat = "0###"" ""##"" ""##"" ""##"
                        End If
                    End If
                Next
        End With       '--- Fin partie traitment des saisies
 
Re : Vérification si doublon pendant la saise

Salut

pas ouvert ton fichier. Si... tu as Target, tu dois certainement utiliser une évènnementielle. Essaie les procédures suivantes (une après l'autre)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim P As Range, R As Range
  Set P = Range("A6:A" & Target.Row - 1)
  Set R = P.Find(Target.Value, LookIn:=xlFormulas, LookAt:=xlWhole)
    If Not R Is Nothing Then
      MsgBox "Le N° " & R.Value & " est déjà saisie dans la ligne " & R.Row, vbCritical, "DOUBLON"
      Application.EnableEvents = False
      Target.Value = ""
      Application.EnableEvents = True
      Target.Select
    Else
      Target.NumberFormat = "0###"" ""##"" ""##"" ""##"
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim R As Range
  For Each R In Range("A6:A" & Target.Row + 1)
    If R = Target Then
        MsgBox "Le N° " & R.Value & " est déjà présente dans la ligne " & R.Row, vbCritical, "DOUBLON"
        Application.EnableEvents = False
        Target = ""
        Application.EnableEvents = True
        Target.Select
        Exit For
    Else
        Target.NumberFormat = "0###"" ""##"" ""##"" ""##"
    End If
  Next
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
  If Application.CountIf(Range("A6:A" & Cells(Rows.Count, 1).End(xlUp).Row), Target) = 1 Then
    Target.NumberFormat = "0###"" ""##"" ""##"" ""##"
  Else
    MsgBox "valeur déjà présente !", vbCritical, "Saisie refusée ..."
    Application.EnableEvents = False
    Target = ""
    Application.EnableEvents = True
  End If
End Sub
 
Re : Vérification si doublon pendant la saise

Bonsoir MichD, SI...

MichD : Ca marche ta solution, merci.

SI... : Merci pour tes trois alternatives.

Elles marchent tous.

Mais pour la troisième solution, comment peut-on savoir la ligne du doublon ?

Merci.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

F
Réponses
20
Affichages
5 K
funcky222
F
C
Réponses
6
Affichages
2 K
C
Retour