Détection d'un doublon dans une liste en cours de saisie

Bonjour,

J'ai régulièrement besoin de listes de personnes, établies à partir de la fonction "Validation de données", option "Liste". Ce qui fonctionne parfaitement.

Je voudrais y rajouter un contrôle qui détecterait et m'alerterait lorsqu'un nom que je viens de saisir est déjà présent dans la liste.

Je ne trouve pas de fonction de base dans Excel (ou de combinaison de fonctions) qui pourrait le faire. Mais il est difficile de fouiller dans la foule de possibilités offertes par Excel.

Quelqu'un a-t-il une idée ? D'avance un grand merci.

Catroun

Salut Catroun,

Question : tu désires vérifier qu'un nom existe déjà dans ta liste ou qu'un nom de la liste est déjà utilisé dans ta feuille de travail ?
Quoi qu'il en soit, un fichier-exemple de ce que tu fais et de ce que tu désires faire est toujours un plus !!


A+

Bonjour,

Oui bien sûr je prépare cela.

A plus

Catroun

Bonjour le fil,

Pour ce genre de demande, pas besoin de fichier, c'est mieux, mais pas nécessaire

Voici le code à mettre dans la feuille concernée

Private Sub Worksheet_Change(ByVal Target As Range)
  If Application.WorksheetFunction.CountIf(Target.EntireColumn, Target.Value) > 1 Then
    ' Petit message en cas de doublon
    MsgBox "Attention cette valeur à déjà été saisie !", vbCritical, "OUPS..."
    ' On peut effacer la valeur saisie
    Application.EnableEvents = False
    Application.Undo
    Application.EnableEvents = True
  End If
End Sub

@+

Voilà, j'ai inventé un exemple qui illustre bien (je crois) le problème posé.

Fichier en PJ

Merci de ton aide.

Bonjour à tous,

Supposons que la validation doit porter sur la cellule A1, alors il est même possible d'y parvenir en cliquant sur A1 puis en se rendant sur Données/Validation de données/Autoriser : Personnalisé et en saisissant la formule suivante :

=NB.SI(INDIRECT("Liste");A1)=0

où Liste est le nom de la liste contenant les données.

Cdlt,

Bonjour,

Ou alors, sauf si je n'ai pas compris ...

essai

Merci beaucoup,

J'ai également trouvé une solution via les mise en formes conditionnelles qui me permet de colorier les cellules des valeurs en double.

Merci à vous tous.

Catroun

Merci "Joyeux Noël". Ta solution est également une bonne idée, et rejoint celle que j'avais trouvé.

Bon défilé à tous.

Catroun

Salut Catroun,
Salut les as,

vie de famille, quand tu nous (re)tient...
Solution VBA qui ne fournit à ta liste de validation QUE les noms n'ayant pas encore été choisis.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Not Intersect(Target, Columns(2)) Is Nothing Then
    If Target.Count = 1 Then
        Application.ScreenUpdating = False
        Cells.Validation.Delete
        If Target.Row > 2 And Target.Offset(-1, 0) <> "" Then
            Columns(6).ClearContents
            Columns(6).Font.Color = RGB(255, 255, 255)
            For x = 2 To Range("D" & Rows.Count).End(xlUp).Row
                If WorksheetFunction.CountIf(Columns(2), Range("D" & x).Value) = 0 Then _
                    Range("F" & IIf([F1] = "", 1, Range("F" & Rows.Count).End(xlUp).Row + 1)).Value = Range("D" & x).Value
            Next
            Target.Validation.Add Type:=xlValidateList, Formula1:="=F1:F" & Range("F" & Rows.Count).End(xlUp).Row
        End If
        Application.ScreenUpdating = True
    End If
End If
'
End Sub
14catroun.xlsm (16.66 Ko)


A+

Milles Mercis Curulis57,

Cette solution est d'une élégance inouïe, eh oui, rien que ça !

Mais n'ayant pas encore pénétré le monde magique des Macros et du VBA, je ne sais pas où, ni comment, tu as caché ce code dans le fichier que tu m'as envoyé. Si tu as encore un peu de temps, merci de m'expliquer.

Et d'une façon générale, comment récupérer et mettre en oeuvre, dans un fichier, les codes qui sont publiés sur le forum...

Catroun

Salut Catroun,

vaste sujet dont on ne pourra pas faire le tour ici !
VBA repose essentiellement sur des événements (clic, change, open...) qui entraînent alors le code correspondant.
Sans entrer dans le détail des emplacements des codes (très variables selon le contexte), et pour faire dans le très simple (vraiment très simple, hein!), un code est placé dans le module VBA de la feuille où se déroule l'événement.
Ici, le clic se passant dans la 'Feuil1', le code est en... 'Feuil1" et l'événement est Worksheet_SelectionChange().

ALT-F11 pour entrer dans VBA et double-clic sur 'Feuil1' pour afficher le code.

Là encore, tu peux contrôler l'exécution du code selon tes conditions. Ici :
- il faut qu'une seule cellule soit sélectionnée ;
- que la sélection soit dans la colonne (2), de la 2e à la première ligne vide.

Quant à récupérer le code, ce n'est que du texte : tu copies, tu colles là où c'est nécessaire en adaptant le code à la nouvelle situation, un code étant rarement interchangeable sans modif'.

Rien n'est foncièrement compliqué : il faut avoir une vision complète de son programme, la connaissance la plus complète possible des fonctions VBA et pouvoir réfléchir de façon LOGIQUE, maître-mot !

Vaste programme, n'est-ce pas ?

A+

EDIT: il y a d'ailleurs une coquille dans mon code..

If Target.Row > 2 And Target.Offset(-1, 0) <> "" Then

La trouveras-tu ?

Merci beaucoup,

Je sais que j'ai beaucoup de travail devant moi. Je vais tenté de m'y mettre rapidement, pour progresser en la matière. J'ai vu qu'il y a un enseignement copieux sur le site....

A + et encore merci

Catroun

Correction à apporter :

If Target.Row > 1 And Target.Offset(-1, 0) <> "" Then

Bon courage !


A+

Merci car je n'avais pas trouvé !

Du coup j'ai acheté et téléchargé le cours VBA.

Cordialement.

Catroun

Bonjour,

Une petite précision pour la solution de Curulis57.

Dans l’hypothèse d’une sélection de plusieurs ou toutes les cellules, j’utilise la ligne de code "If Target.CountLarge <> 1 Then" pour éviter le bug après la sélection.

Il y a certainement d’autres possibilités.

Rechercher des sujets similaires à "detection doublon liste cours saisie"