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

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

2 solutions par formule et par VBA dans les fichiers joints.

A+
 

Pièces jointes

  • essai par formule(1).xlsx
    17.5 KB · Affichages: 9
  • essai par VBA(1).xlsm
    24.2 KB · Affichages: 13

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
En tout cas vous m'aidez déjà bien merci à vous deux en plus j'aurais les 2 versions, bien que je préfère bosser sur la MAC histoire de confort comme vous pouvez voir sur la photo
 

Pièces jointes

  • IMG_4983.jpg
    617.7 KB · Affichages: 21

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
283
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…