Alimenter combobox

Bonjour à tous,

Voilà mon petit problème. Je suis entrain de créer un logiciel excel vba pour le boulot.

Pour alimenter un combobox, j'ai fait une formule qui marche très bien.

La voici:

Private Sub UserForm_Initialize()

'Alimenter la combobox, le 14/11/2016 par Guillaume

'si la dernière ligne est supérieure à 256 déclarer i et x en Integer

Dim i As Byte, x As Byte

i = Sheets("para").Range("A65536").End(xlUp).Row

For x = 2 To i

With ComboBox1

.AddItem Sheets("para").Range("A" & x)

End With

Next x

End Sub

Mais afin de l'améliorer, je souhaiterai qu'il y est une rechercher horizontal par rapport à l'intitulé de la colonne.

Pourriez-vous m'indiquer la solution.

Merci d'avance.

Guillaume

Bonsoir,

Juste pour que cela ait meilleure allure :

Private Sub UserForm_Initialize()
    Dim n%, i%
    With Worksheets("para")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To n
            ComboBox1.AddItem .Cells(i, 1)
        Next i
    End With
End Sub

Maintenant pour y introduire une recherche de colonne sur la ligne d'en-tête, il faudrait d'abord que tu fournisses les informations nécessaires : quoi chercher par exemple !

Cordialement.

Bonjour,

Merci encore pour ta réponse MFerrand.

Voila ce que je souhaite. Dans ma feuille "para", j'ai plusieurs colonne avec des intitulés (dans mon exemple, l'intitulé de la colonne est "centre". Je souhaiterais donc que dans le code, la combobox soit alimenté par la désignation de la colonne et non par la lettre de la colonne. Comme ça si je suis obligé de déplacé la colonne, l'alimentation se fait toujours.

Peux-tu m'aider stp?

Cordialement,

Guillaume

Par exemple pour alimenter avec la colonne "centre" :

Private Sub UserForm_Initialize()
    Dim n%, i%, k%
    With Worksheets("para")
        n = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For i = 1 To n
            If .Cells(1, i) = "centre" Then
                k = i: Exit For
            End If
        Next i
        If k > 0 Then
            n = .Cells(.Rows.Count, 1).End(xlUp).Row
            For i = 2 To n
                ComboBox1.AddItem .Cells(i, k)
            Next i
        End If
    End With
End Sub

Bonjour,

Dsl pour le message tardif, mais encore un grand merci MFerrand. Cela fonctionne super bien.

Et pour alimenté une autre combobox dans le même userform mais avec une colonne différente, je dois faire de la même manière, dans ce dernier code ou dois-je recréer un privatsub?

Guillaume

Bonjour,

Les procédure d'évènements sont toujours uniques. Si tu as une autre Combo à alimenter lors de l'initialisation, c'est dans la même proc. Initialize que ça se passe.

Cordialement.

J'ai fait un copier collé de ton code en changeant les lettres et la désignation. Cela fonctionne, mais je viens de m’apercevoir que si je rajoute une valeur à ma 2ème colonne, la combobox ne l'affiche pas.

Voici mon code:

Private Sub UserForm_Initialize()

'Alimenter la combobox, le 14/11/2016 par Guillaume

'si la dernière ligne est supérieure à 256 déclarer i et x en Integer

Dim n%, i%, k%

With Worksheets("para")

n = .Cells(1, .Columns.Count).End(xlToLeft).Column

For i = 1 To n

If .Cells(1, i) = "centre" Then

k = i: Exit For

End If

Next i

If k > 0 Then

n = .Cells(.Rows.Count, 1).End(xlUp).Row

For i = 2 To n

ComboBox1.AddItem .Cells(i, k)

ComboBox2.AddItem .Cells(i, k)

Next i

End If

End With

Dim m%, j%, l%

With Worksheets("para")

m = .Cells(1, .Columns.Count).End(xlToLeft).Column

For j = 1 To m

If .Cells(1, j) = "agents" Then

l = j: Exit For

End If

Next j

If l > 0 Then

m = .Cells(.Rows.Count, 1).End(xlUp).Row

For j = 2 To m

ComboBox3.AddItem .Cells(j, l)

Next j

End If

End With

End Sub

Bonjour,

Private Sub UserForm_Initialize()
    Dim n%, i%, k0%, k1%
    With Worksheets("para")
        n = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For i = 1 To n
            If .Cells(1, i) = "centre" Then
                k0 = i
            ElseIf .Cells(1, i) = "agents" Then
                k1 = i
            End If
        Next i
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To n
            If k0 > 0 Then
                ComboBox1.AddItem .Cells(i, k0)
                ComboBox2.AddItem .Cells(i, k0)
            End If
            If k1 > 0 Then ComboBox3.AddItem .Cells(i, k1)
        Next i
    End With
End Sub

De cette façon tu ne parcours qu'une fois les colonnes et les lignes de ta feuille, petit gain de temps, et tu ne doubles pas la longueur de ta procédure pour faire la même chose.

Prend aussi l'habitude de déclarer systématiquement toutes tes variables en tête de procédure, et inutile de les multiplier quand elles peuvent servir à plusieurs usages analogues successifs (dès lors qu'après une utilisation, leur valeur n'a nul besoin d'être conservée).

Quant à ton rajout de valeur, je ne le vois pas dans ton code ? Chaque Combo n'a qu'une colonne. Si tu veux un Combo à plusieurs colonnes, il te faut définir sa propriété ColumnCount à la conception (dans la fenêtre de propriétés), éventuellement sa propriété ColumnWidths si tu veux les voir toutes, et l'alimentation sera un peu différente, soit AddItem pour la première et 2e colonne avec List(ligne, colonne), soit List pour intégrer l'ensemble des 2 colonnes en même temps, à voir selon la source...

Cordialement.

Bonjour,

Super ça marche nickel.

Pour cet exemple, je n'ai pas besoin de 2 colonnes dans ma combo.

Encore merci

Guillaume

Rechercher des sujets similaires à "alimenter combobox"