Liste déroulante avec longueur (Mid)

Jefekoi

XLDnaute Junior
Bonjour,

Un peu trop tard mais Meilleur vœux à vous tous.

Je ne vais pas dire que je suis débutant en macro Excel (car c'est ce que l'on retrouve le plus souvent dans divers forum de demande d'aide)

Je n'arrive pas à me concentrer pour trouver la solution :

Faire une liste déroulante sans doublon et en récupérant les 5 première lettres des cellules.
Je vous laisse mon exemple, vous comprendrez surement mieux que mes commentaires à 2 balles.

Merci à tous

Eric
 

Pièces jointes

  • essai.xlsm
    9.8 KB · Affichages: 16

job75

XLDnaute Barbatruc
Bonjour JB,

Merci pour ta solution pour ceux qui utilisent MAC.

Mais pourquoi ne pas restituer la collection dans la feuille ?

Car en utilisant :
Code:
Target.Validation.Add xlValidateList, Formula1:=Join(a, ",")
il ne faut pas que Formula1 dépasse la limite de 8192 caractères.

A+
 

Jefekoi

XLDnaute Junior
Merci pour la version MAC

Je voudrais modifier une chose

Ceci :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Le mettre dans un Sub et non pas dans un Private sub ...

Quelqu'un pourrait m'aider ?

Je pense que vous avez compris ma demande car moi et les termes d'Excel ...

Merci

PS: En fait je n'ai pas besoin d'actionner cette liste pour qu'elle en prenne compte vu que j'ai un bouton pour valider à coté....


Voici la source
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$G$5" Then
      Set f = Sheets("feuil2")
      Dim a()
      a = Application.Transpose(f.Range("D1:D" & f.[D65000].End(xlUp).Row).Value)
      For i = 1 To UBound(a): a(i) = Left(a(i), 5): Next i
      a = SansDoublonsMAC(a())
      Target.Validation.Delete
      Target.Validation.Add xlValidateList, Formula1:=Join(a, ",")
     End If
End Sub
Function SansDoublonsMAC(a())
   Dim Maliste As New Collection
   On Error Resume Next
   For i = LBound(a) To UBound(a)
     Maliste.Add Item:=a(i), Key:=a(i)
   Next i
   On Error GoTo 0
   Dim b(): ReDim b(1 To Maliste.Count)
   For i = 1 To Maliste.Count
     b(i) = Maliste(i)
   Next i
   SansDoublonsMAC = b
End Function
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
230