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

XL 2019 liste déroulante sans doublons, sans vide, sans passer par un colonne intermédiaire.

frederic78

XLDnaute Nouveau
Bonjour,
existe t-il un moyen de créer une liste déroulante sans passer une colonne intermédiaire pour éviter les doublons ?
merci de votre aide
 

job75

XLDnaute Barbatruc
Bonjour frederic78, Jean-Marie,

La solution classique passe par une plage supplémentaire avec une formule matricielle.

Si vous n'en voulez pas il faut du VBA.

Voyez le fichier joint et cette macro qui construit la liste en dur :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range, r As Range, f$
Set cel = [A2] 'à adapter
cel.Validation.Delete 'RAZ
If Target.Address <> cel.Address Then Exit Sub
Set r = Range("C2", Range("C" & Rows.Count).End(xlUp)) 'à adapter
If r.Row < 2 Then Exit Sub
For Each r In r
    If r <> "" Then If InStr(f & ",", "," & r & ",") = 0 Then f = f & "," & r
Next
cel.Validation.Add xlValidateList, Formula1:=Mid(f, 2) 'création de la liste en dur, elle est limitée à 8192 caractères
End Sub
Comme toutes les formules cette liste est limitée à 8192 caractères.

Edit : non, c'est 255 caractères, voyez ce fil :

https://excel-downloads.com/threads/macro-liste-deroulante-bug.20083737/#post-20651694

A+
 

Pièces jointes

  • Classeur(1).xlsm
    16.4 KB · Affichages: 11
Dernière édition:

frederic78

XLDnaute Nouveau
Merci beaucoup Job75, effectivement c'est plus simple
mes connaissances VBA ne me permettaient de trouver ou d'adapter cette formule, d'ailleurs si ma liste déroulante est sur une autre feuille j'adapte comment cette macro
merci
 

job75

XLDnaute Barbatruc
d'ailleurs si ma liste déroulante est sur une autre feuille j'adapte comment cette macro
La macro doit être placée dans le module de la feuille où l'on crée la liste de validation puisque c'est une SelectionChange.

Si la liste originale est dans une autre feuille il faut préciser cette feuille pour définir la plage r.

Et ajouter cette macro dans le même module que la SelectionChange :
VB:
Private Sub Worksheet_Activate()
Worksheet_SelectionChange ActiveCell
End Sub
 

Discussions similaires

Réponses
3
Affichages
149
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…