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

Bonsoir,

Ç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) mais tu peux aussi stocker ton n° de ligne dans une 3e colonne de ta ComboBox; colonne qui peut être masquée (sa largeur étant définie à 0pt, par exemple).

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

Rechercher des sujets similaires à "integration champs conbobox"