deux listes deroulante dans une liste deroulante

chaelie2015

XLDnaute Accro
Bonjour Forum
Je souhaite concaténer deux listes déroulantes (NOM et PRENOM) dans une cellule pour créer une liste déroulante
salutations
 

Pièces jointes

  • charlie 2 liste deroulate.xlsx
    8.7 KB · Affichages: 44

merinos

XLDnaute Accro
Salut Chaelie,

La Solution de PierreJean me semble celle que tu as demandé...

Mais je mettrais un bemol: Comment va tu travailler si ta liste deviens fort longue.


J'ai developpé en son temps une macro qui permettais de selectionner façilement sur base de critères au sein d'une liste.


Comment voir le résultat: entre "1000" ou "Jean" .
A chaque caractère ajouté la liste des clients va se réduire ... et tu peux sélectionner celui qui te conviens .

voir le fil


Merinos
 

Pièces jointes

  • combobox lié à liste 0.10.xlsm
    63.5 KB · Affichages: 31

job75

XLDnaute Barbatruc
Re,

Il faut avoir compris une fois pour toutes qu'une liste de validation de données n'a que 2 possibilités :

- soit la liste est définie "en dur" (comme le fait pierrejean) et dans ce cas la liste est limitée à 255 caractères (y compris les séparateurs ";")

- soit la liste est définie par une plage de cellules dans la feuille (comme le fait JHA) ou dans une autre feuille.

On peut utiliser une ComboBox qui offre 3 méthodes de définition de sa liste : AddItem, ListFillRange, List.

Voyez le fichier joint avec la méthode AddItem (qui prend plus de temps que les 2 autres) :
Code:
Private Sub ComboBox1_GotFocus()
Dim t, i&
t = [A1].CurrentRegion.Resize(, 2)
ComboBox1.Clear 'RAZ
For i = 2 To UBound(t)
  ComboBox1.AddItem t(i, 1) & " " & t(i, 2)
Next
ComboBox1.DropDown
End Sub
A+
 

Pièces jointes

  • ComboBox(1).xlsm
    27.1 KB · Affichages: 31
Dernière édition:

job75

XLDnaute Barbatruc
Re, salut Lone-wolf,

Il vaut beaucoup mieux utiliser la méthode List, elle est très rapide :
Code:
Private Sub ComboBox1_GotFocus()
Dim t, a$(), i&
t = [A1].CurrentRegion.Resize(, 2)
If UBound(t) = 1 Then ComboBox1.Clear: Exit Sub
ReDim a(1 To UBound(t) - 1)
For i = 2 To UBound(t)
  a(i - 1) = t(i, 1) & " " & t(i, 2)
Next
ComboBox1.List = a
ComboBox1.DropDown
End Sub
Fichier (2).

A+
 

Pièces jointes

  • ComboBox(2).xlsm
    27.8 KB · Affichages: 27

job75

XLDnaute Barbatruc
Re,

@ Lone-wolf : avant de déposer un fichier il faut le tester !!!

L'évènement Click est créé uniquement quand on clique dans la liste (donc déjà chargée).

Et avec la méthode AddItem si l'on supprime ComboBox1.Clear les items s'ajoutent à ceux qui existent.

A+
 

Lone-wolf

XLDnaute Barbatruc
Re job :)

Oui, je l'ai remarqué et changé par Change. J'ai ajouté à la fin Combobox1.Select pour enlever le focus(enfin je crois que c'est comme ça quon dit)

VB:
Option Explicit

Private Sub ComboBox1_Change()
    If ComboBox1.Text <> "" Then
        Call Insert
    Else
        Exit Sub
    End If
End Sub

Sub Insert()
Dim t, a$(), i&
    t = [A1].CurrentRegion.Resize(, 4)
    If UBound(t) = 1 Then ComboBox1.Clear: Exit Sub
   
    ReDim a(1 To UBound(t) - 1)
   
    For i = 2 To UBound(t)
        a(i - 1) = t(i, 1) & " - " & t(i, 2) & " - " & t(i, 3) & " - " & t(i, 4)
    Next
    ComboBox1.List = a
   
    ComboBox1.Select
End Sub
 

job75

XLDnaute Barbatruc
Re,

Avec la méthode AddItem quand je clique sur la flèche de la ComboBox seul le 1er item apparaît.

Il faut 2 autres clics pour que la liste se déroule correctement.

Cela est dû à ComboBox1.Clear (indispensable) et je ne vois pas comment y remédier.

Par contre la liste se déroule bien quand je clique dans la zone de texte.

Avec la méthode List il n'y a aucun problème.

A+
 

job75

XLDnaute Barbatruc
Bonsoir Nicole,

Je n'avais pas vu votre post, excusez-moi.
PS: La longueur maxi d'une liste données/validation créée par VBA est de 8.000 caractères depuis Excel 97 et non pas 255
Effectivement 255 c'est pour une chaîne de caractères entrée manuellement.

Si la chaîne est entrée par VBA elle est limitée à 8190 caractères (2^13 - 2).

Edit : sur le fichier de pierrejean cela permet de tirer la liste jusqu'à la ligne 494.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le forum,

Un autre phénomène rédhibitoire avec la méthode AddItem.

Chez moi les durées des chargements augmentent quand on les multiplie.

Testez ce fichier (1 bis) avec un tableau de 10 000 lignes.

A+
 

Pièces jointes

  • ComboBox(1 bis).xlsm
    206.2 KB · Affichages: 28

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 197
Membres
103 153
dernier inscrit
SamirN