Intégration de plusieurs champs dans un ConboBox
Bonsoir,
J'alimente un ComboBox avec le code ci-dessous
> Il affiche les données filtrées de la 1re colonne de ma feuille de données
Pouvez-vous me donner un piste pour qu'il affiche aussi la 3ieme colonne par exemple.
Je pense qu'il faut déclarer 2 colonnes dans la propriété du ComboBox...
Option Explicit
Dim tbl()
Private Sub ComboBox1_Change()
Dim n
n = Application.VLookup(ComboBox1.Value, tbl, 2, False)
MsgBox n
Erase tbl
End Sub
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim rng As Range, Cell As Range
Dim I As Long
Application.ScreenUpdating = False
Set ws = Worksheets("Approvisionnement")
With ws
.AutoFilterMode = False
.Cells(1).CurrentRegion.AutoFilter Field:=6, Criteria1:="FAUX"
With .AutoFilter.Range
On Error Resume Next
Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
End With
End With
If rng Is Nothing Then
'
Else
ReDim tbl(1 To rng.Cells.Count, 1 To 2): I = 1
For Each Cell In rng
tbl(I, 1) = Cell.Value
tbl(I, 2) = Cell.Row
Me.ComboBox1.AddItem Cell.Value
I = I + 1
Next Cell
End If
ws.ShowAllData
Set rng = Nothing: Set ws = Nothing
End Sub
Bonjour Mim,
Avec un fichier exemple, on aurait pu faire des tests, s'assurer qu'il n'y avait pas de cas particuliers ... et peut-être comprendre certains points de ton code (tu garnis un tableau avec les valeurs de ta première colonne et les n° de lignes ... mais tu ne l'utilises pas par la suite ... en tout cas pas dans cette partie du code?)
Tu peux effectivement définir que ta liste compte deux colonnes:
- soit en mode création de ton UserForm, dans la propriété ColumnCount de la ComboBox1 (Fenêtre des propriétés)
- soit dans ton code (avant de garnir ta liste), avec Me.ComboBox1.ColumnCount = 2
Ensuite, juste après ton Me.ComboBox1.AddItem Cell.Value, tu peux ajouter:
Me.ComboBox1.List(I - 1, 1) = Cell.Offset(0, 2)... S'il s'agit bien d'afficher, dans une seconde colonne de ta ComboBox, les valeurs situées 2 colonnes à droite de ta première colonne
Bonjour,
C'est exactement ce que je souhaitais
En fait dans la suite de l'histoire (voir code ci-dessous) je stocke la valeur de la ligne correspondante à la sélection du ComboBox pour un usage ultérieur....
Comme beaucoup de débutants je tente d'arriver à mes fin sans toujours utiliser le chemin le plus court, et ce forum est précieux pour cela.
Merci beaucoup pour ton aide!
Michel
Private Sub ComboBox1_Change()
Dim n
n = Application.VLookup(ComboBox1.Value, tbl, 2, False)
If IsError(n) Then
MsgBox "Valeur inexistante"
End If
'MsgBox n
'On stocke cette valeur pour usage ultérieur
Sheets("Approvisionnement").Range("U2").Value = nBonsoir,
Ça vaut ce que ça vaut (et rien ne dit que tu repasseras par ici, ni que j'ai compris ce que tu veux faire)
De cette manière, l'info est disponible dès que tu sélectionnes un élément dans ta liste, sans devoir faire une recherche dans ton tableau en mémoire.
Bonjour,
Merci beaucoup pour cette précision.
Pour le moment je vais poursuivre au niveau que je me suis fixé avant d'optimiser le code.
Bonne journée