Mon Combobox n'affiche qu'une partie des éléments de ma liste

Freddfbb - 15 févr. 2016 à 15:51
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 16 févr. 2016 à 17:30
Bonjour,

De l'aide pour avoir le code pouvant me permettre d'afficher tous les éléments de ma liste sur mon combobox. Sur les 300 éléments, seuls les 81 premiers sont affichés.

merci de votre aide.

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 15/02/2016 à 16:53
Bonjour,
Impossible de t'aider sans voir (il est quand-même fort du café d'avoir à te le demander) le code par lequel cette combobox est alimentée !
Et précise-nous également si elle est sur une feuille Excel ou sur un userform, ainsi que ses propriétés d'affrichage (style)

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Bonjour,

Juste pour confirmer que le combo se trouve sur un Userform. Il récupère les informations sur la feuille "Prestations_2eme_ligne" et le nom du combo est "Prestations". Voir les codes ci-dessous :

Private Sub UserForm_Initialize()

Dim Lig As Integer, drLig As Integer
Dim Lig2 As Integer, drLig2 As Integer

With Sheets("FOSA")
drLig = .Range("C3").End(xlDown).Row
For Lig = 3 To drLig
Me.Fosa_Provenance.AddItem .Range("C" & Lig)
Next Lig
End With

With Sheets("Prestations_2eme_ligne")
drLig2 = .Range("B2").End(xlDown).Row
For Lig2 = 2 To drLig
Me.Prestations.AddItem .Range("B" & Lig2)
Next Lig2
End With

With Sheets("FOSA")
drLig = .Range("C3").End(xlDown).Row
For Lig = 3 To drLig
Me.Fosa_Orientation.AddItem .Range("C" & Lig)
Next Lig
End With

End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 16/02/2016 à 06:31
Re,

1) La règle est ici de toujours montrer une copie rigoureusement exacte (un COPIER/COLLER rigoureux) du code écrit dans le projet.
Il est évident que celui que tu montres n'est pas une telle copie. Car si cela en était une, ce ne seraient pas tes "81 articles seulement", qui seraient affichés, mais ... AUCUN.
Et pour cause : ta combo "prestation est alimentée par une boucle For ... to drLig et non drlig2
2) corrigé en drlig2, il affiche bien ce que tu lui demandes d'afficher (jusqu'à la ligne drlig2, telle, donc, que tu l'as déterminée ici :
 drLig2 = .Range("B2").End(xlDown).Row 

Et il te suffisait d'un Msgbox drlig2 pour constater que tel est bien le cas.
3) j'en conclus donc que ce n'est pas un "problème d'affichage", comme tu le dis, mais un problème de détermination de drlig2 !
Tel que tu l'as déterminée, drlig2 n'est pas la dernière ligne remplie, mais la première ligne vide rencontrée à partir de la ligne 2
La dernière ligne remplie de ta colonne B est
drlig2 = .Range("B" & Rows.Count).End(xlUp).Row


Voilà ! Et ton titre aurait donc dû être non pas "Mon Combobox n'affiche qu'une partie des éléments de ma liste", mais "Ma combobox n'affiche pas tous les article d'une colonne de ma feuille de calcul" ... ou, encore mieux (car c'est là le problème réel) : "détermination de la dernière ligne remplie d'une colonne".
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
16 févr. 2016 à 14:48
Bonjour,

En fait, il peut y avoir 81 éléments si dans la feuille FOSA, il y a bien 80 éléments puisque drLig a été calculée dans la boucle précédente et conserve sa valeur...

Ceci dit, nul besoin d'utiliser Lig2 et drLig2 qui ne font que créer un risque de se mélanger les pinceaux comme c'est le cas ici... ;)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 16/02/2016 à 19:48
Bonjour, cs_MPI,
Tout-à-fait, en effet.

Et pour cela également :
Ceci dit, nul besoin d'utiliser Lig2 et drLig2 qui ne font que créer un risque de se mélanger les pinceaux comme c'est le cas ici... ;)

Des comboboxes liées éviteraient ces boucles.et leur lenteur induite
Il faudrait ainsi également déterminer la dernière ligne de la plage, bien entendu. Et également (toujours bien entendu) nul besoin de 3 variables. Une seule suffit, initialisée pour chaque besoin distinct
0
Rejoignez-nous