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

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

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

  • gestion-stock.xlsm
    217.2 KB · Affichages: 16

job75

XLDnaute Barbatruc
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+
 

goube

XLDnaute Accro
Bonjour job75,

Début de la liste déroulante


Début de la liste alpha issue du filtre

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

Cordialement.
 

Pièces jointes

  • gestion-stock.xlsm
    212.6 KB · Affichages: 7

job75

XLDnaute Barbatruc
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

  • gestion-stock(1).xlsm
    220.7 KB · Affichages: 2

goube

XLDnaute Accro
Re,
Merci job75 pour cette proposition. Mais curieusement, les 65 virgules restantes supprimées, le fichier semble fonctionner sans problème.
Je garde ta proposition au cas où.
Encore merci, bonne soirée.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…