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