XL 2013 Liste déroulante sans doublons triée alphabétiquement

  • Initiateur de la discussion Initiateur de la discussion goube
  • 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 !

goube

XLDnaute Accro
Bonsoir à tous,
bonsoir @job75 ,

J'ai cherché à adapter votre proposition https://excel-downloads.com/threads...passer-par-un-colonne-intermediaire.20069369/
à une demande d'aide.
J'obtiens bien une liste déroulante, onglet Accueil cellule G23, mais celle-ci fait apparaitre des données qui semblent être des caractères inclus dans les libellés.
Je ne vois pas d'où peut provenir l'erreur. Si vous avez une idée.
D'avance merci.
Cordialement.
 

Pièces jointes

Bonsoir goube,

C'est bien simple.

La liste de validation en G23 est construite en dur par concaténation de cellules avec la virgule comme séparateur.

Or certaines cellules en G9:G967 de la feuille BDD_Stock contiennent des virgules, celles-ci sont donc considérées comme des séparateurs pour la liste de validation.

Une solution est de remplacer ces virgules par des points.

A+
 
Bonjour job75,

Début de la liste déroulante
1671027702090.png


Début de la liste alpha issue du filtre
1671027708017.png

de plus, la validation de données saute lors de l'ouverture du fichier.

Cordialement.
 

Pièces jointes

de plus, la validation de données saute lors de l'ouverture du fichier.
Oui Excel supprime la liste de validation parce qu'il "répare" le fichier.

Je ne sais pas pourquoi mais d'évidence Excel n'aime pas du tout cette liste.

Alors il ne faut pas être plus royaliste que le roi, utilisez cette macro :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range, r As Range, f$, a
Set cel = [G20] 'à adapter
cel.Validation.Delete 'RAZ
If Target.Address <> cel.Address Then Exit Sub
Set r = Feuil2.Range("G9", Feuil2.Range("G" & Rows.Count).End(xlUp)) 'à adapter
If r.Row < 9 Then Exit Sub
For Each r In r
    If r <> "" Then If InStr(f & Chr(1), Chr(1) & r & Chr(1)) = 0 Then f = f & Chr(1) & r
Next
a = Split(Mid(f, 2), Chr(1))
tri a, 0, UBound(a)
[J:J].ClearContents 'colonne masquée
[J1].Resize(UBound(a) + 1) = Application.Transpose(a) 'Transpose est limitée à 65536 lignes
cel.Validation.Add xlValidateList, Formula1:="=$J$1:$J$" & UBound(a) + 1 'création de la liste
End Sub
La liste est maintenant définie à partir de la plage en colonne J (masquée).

Il n'est plus question de virgules, je les ai donc remises en colonne G de la feuille BDD_Stock.

Pour cela j'ai dû afficher toutes les lignes qui étaient filtrées.
 

Pièces jointes

- 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

C
Réponses
7
Affichages
4 K
Erwan
E
Retour