Alimenter Combobox
Bonjour,
Grâce à ce forum, j'ai peu alimenter mes Combobox. Mais le problème est que lorsque que je clic que l'une d'elles, toutes les données ne s'y mette pas.
Voici le code:
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) = "agent" Then
k1 = i
End If
Next i
n = .Cells(.Rows.Count, n).End(xlUp).Row
For i = 2 To n
If k0 > 0 Then
ComboBox2.AddItem .Cells(i, k0)
ComboBox3.AddItem .Cells(i, k0)
End If
If k1 > 0 Then ComboBox1.AddItem .Cells(i, k1)
Next i
End With
Pouvez-vous m'aider?
Cordialement,
Guillaume
Bonsoir Guillaume, bonsoir le forum,
Mais le problème est que lorsque que je clic que l'une d'elles, toutes les données ne s'y mette pas : pas très clair !...
Ton code semble correct même si utiliser la même variable n pour deux choses différentes n'est pas forcément une bonne idée. Reste à savoir où il est placé ? Il est dommage que tu n'est pas mis le code complet...
À tout hasard, essaie comme ça, avec Value (même si je doute fort que ça marche) :
Sub Macro1()
Dim COL%, i%, k0%, k1%, LI%
With Worksheets("para")
COL = .Cells(1, .Columns.Count).End(xlToLeft).Column
For i = 1 To COL
If .Cells(1, i) = "centre" Then
k0 = i
ElseIf .Cells(1, i) = "agent" Then
k1 = i
End If
Next i
LI = .Cells(.Rows.Count, COL).End(xlUp).Row
For i = 2 To LI
If k0 > 0 Then
ComboBox2.AddItem .Cells(i, k0).Value
ComboBox3.AddItem .Cells(i, k0).Value
End If
If k1 > 0 Then ComboBox1.AddItem .Cells(i, k1).Value
Next i
End With
End Sub
Sans le fichier, difficile de dire mieux...
Bonjour ThauThème,
Merci pour ta réponse, mais cela ne change rien.
Je t'ai mis en pj mon fichier. Lorsque tu es sur l'accueil, clic que "prêt matériel" et ensuite tape n'importe quoi dans numéro de commande (c'est pour débloquer l'userform).
A partir de là, lorsque tu déroule les combobox, tu t’aperçois qu'elles ne sont pas complètes par rapport à la feuil "para".
bonsoir Guithou51, thauThème et le forum
essai ceci dans l'initialisation de l'userform1
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%, k0%, k1%
With Worksheets("para")
n = .Cells(1, .Columns.Count).End(xlUp).Row + 1
For i = 1 To n
If .Cells(1, i) = "centre" Then
k0 = i
ElseIf .Cells(1, i) = "agent" Then
k1 = i
End If
Next i
n = .Cells(.Rows.Count, n).End(xlUp).Row + 1
For i = 2 To n
If k0 > 0 Then
ComboBox2.AddItem .Cells(i, k0)
ComboBox3.AddItem .Cells(i, k0)
End If
If k1 > 0 Then ComboBox1.AddItem .Cells(i, k1)
Next i
End With
'Régler largeur des colonnes de la ListBox le 22/12/2016, par Guillaume
ListBox1.ColumnWidths = "100;30;500"
End Sub
et bon Noël
Bonjour grisan29,
Merci pour ta formule.
Mais dsl ça ne marche pas. Lorsque je change mon intitulé (par ex: agent en agres qui est dans la feuil "para"), la combobox ne me donne aucunes données.
Bonsoir le fil, bonsoir le forum,
Je ne comprends pas où tu veux en venir avec ton code ? Mais l'erreur est là :
n = .Cells(.Rows.Count, n).End(xlUp).Row + 1
Cette variable n doit être égale à k0 ou k1 mais avec ta conditionnelle Si > 0 ça fout la m***de.
Essaie comme ça :
Dim COL%, I%, LI%
With Worksheets("para")
COL = .Cells(1, .Columns.Count).End(xlUp).Row + 1
For I = 1 To COL
If .Cells(1, I) = "centre" Then
LI=.Cells(Rows.Count, I).End(xlUp).Row
Me.ComboBox2.List = .Range(.Cells(2, I), .Cells(LI, I).Value
Me.ComboBox3.List = .Range(.Cells(2, I), .Cells(LI, I).Value
ElseIf .Cells(1, I) = "agent" Then
LI=.Cells(Rows.Count, I).End(xlUp).Row
Me.ComboBox1.List = .Range(.Cells(2, I), .Cells(LI, I).Value
End If
Next i
End With
Bonjour,
Dsl le code ne fonctionne pas, mais merci tout de même.
Oui effectivement c'est bien le "n" qui fout la merde.
Ce que je souhaite, c'est d'alimenter les combobox par recherche de la désignation de la valeur. Pour si je déplace la colonne dans "para", cela ne change rien.
J'espère que tu comprends un peu mon désire...
Bonjour,
Je comprends tout à fait maintenant ce que tu veux faire avec le code...
Comme l'exemple que tu as fourni ne correspondait pas avec le code (une seule ComboBox ?), je navet (si, si, dans ce cas on peut...) pas testé. Il manquait juste des parenthèses pour fermer les Range.
Le code corrigé et testé (avec trois ComboBoxes) :
Private Sub UserForm_Initialize()
Dim COL%, I%, LI%
With Worksheets("para")
COL = .Cells(1, .Columns.Count).End(xlUp).Row + 1
For I = 1 To COL
If .Cells(1, I) = "centre" Then
LI = .Cells(Rows.Count, I).End(xlUp).Row
Me.ComboBox2.List = .Range(.Cells(2, I), .Cells(LI, I)).Value
Me.ComboBox3.List = .Range(.Cells(2, I), .Cells(LI, I)).Value
ElseIf .Cells(1, I) = "agent" Then
LI = .Cells(Rows.Count, I).End(xlUp).Row
Me.ComboBox1.List = .Range(.Cells(2, I), .Cells(LI, I)).Value
End If
Next I
End With
End Sub
Sinon, prend l'habitude quand un code ne marche pas, de dire quel est le message d'erreur et d'indiquer la ligne de code qui plante et qui est surlignée de jaune... Parce que "ça marche pas", ça ne nous aide pas beaucoup...
Super ça fonctionne nickel
Oui c'est vrai je n'ai pas vraiment précisé l'erreur. J'y penserai pour la prochaine fois.
A bientôt
Cordialement,
Guillaume