Liste déroulante + interdire les doublons

Bonsoir,

J'ai consulté beaucoup de sites et forums traitant de mon sujet. Je pensais trouver une réponse simple et rapide mais ce ne fût absolument pas le cas.

C'est très simple. J'aimerais définir une liste déroulante sur une plage de cellules en ajoutant la condition que chaque valeur de la liste déroulante ne peut être saisie qu'une seule et unique fois. Autrement dit, si je saisis une seconde fois la même valeur dans une cellule différente, Excel devra me signifier une erreur comme quoi les doublons sont interdits.

Comment fait-on cela ?

J'ai joins un cas exemple en PJ. Ce serait sympa de l'utiliser pour me montrer la solution

Merci d'avance !

Joris

242cas-exemple.xlsx (10.47 Ko)

Bonsoir le forum,

Cela est possible avec une validation des données.

Mais en sélectionnant : Personnalisé à la place de liste.

Avec listes déroulantes.

Bonjour,

Tu peux utiliser une macro évènementielle pour empêcher les doublons.

A essayer :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range, v, n%
    If Target.Count > 1 Or Target = "" Then Exit Sub
    On Error GoTo fin
    If Target.Validation.Type = xlValidateList Then
        v = Target.Value
        For Each c In Target.SpecialCells(xlCellTypeSameValidation)
            If c.Value = v Then n = n + 1
        Next c
        If n > 1 Then Target.ClearContents
    End If
fin:
End Sub

Se place dans le module de la feuille concernée.

Cordialement.

Bonjour,

Sans VBA avec liste différence: on ne fait apparaître que ceux qui n'ont pas été choisis.

Ceuzin

1'010copie-de-cas-exemple.zip (10.28 Ko)

Bonjour,

Avec VBA sur l'évènement "Change" :

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column <> 2 Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub

    If Application.CountIf(Range("B:B"), Target.Value) > 1 Then MsgBox "Erreur car doublon !"

End Sub

Bonjour Ceuzin,

J'ai le même besoin et ce que tu proposes me convient parfaitement.

Cependant, je n'arrive pas le reproduire dans mon fichier.

En effet, je ne comprends pas dans l'onglet "Critères" les éléments ci-dessous. Où est ce que ces formules doivent être mises en place ?

Nom de champs

choisis ='CA par commerciaux'!$B$3:$B$13

Reste =DECALER(Critères!$E$3;;;SOMMEPROD(--(Critères!$E$3:$E$13<>"")))

tous =Critères!$D$3:$D$13

Merci pour ton éclairage,

Flavzzz

Je joins le fichier pour que cela soit plus explicite.

Je souhaiterais que dans l'onglet "Plages horaires interviews" que les l'on puisse chosir 1 seul et unique horaire dans chaque colonne de dates, qui commencent au 3 avril

Merci d'avance pour les éclairages

Bonjour,

Le dispositif de Ceuzin consiste à constituer une liste différentielle de choix constituée par la liste initiale de laquelle on ôte les choix déjà utilisés dans une colonne...

Dans ton fichier, tu veux appliquer cette méthode sur 8 colonnes, distinctement. Si la liste initiale est la même pour chaque colonne, la liste différentielle sera propre à chacune. Il te faut donc en constituer 8 en l'état de ton fichier...

En outre, il semblerait que pour chaque colonne date, le choix doive également dépendre de l'intervenant figurant en colonne Qui, point qui demeure à préciser... ?

Dans ce contexte, j'opterais pour ma part pour une détection des doublons par macro (évènementielle Change), pour bloquer un choix déjà fait dans une même colonne pour un même intervenant.

Ou bien à partir d'une évènementielle SelectionChange, composer au cas par cas la liste différentielle utilisable dans la cellule choisie...

Cordialement.

Rechercher des sujets similaires à "liste deroulante interdire doublons"