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

  • 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

Discussions similaires

Statistiques des forums

Discussions
314 486
Messages
2 110 114
Membres
110 670
dernier inscrit
Mangouste