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

Freddfbb - 15 févr. 2016 à 15:51 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

5 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 15/02/2016 à 16:53
0
Merci
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.
Commenter la réponse de ucfoutu
0
Merci
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
Commenter la réponse de Freddfbb
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 16/02/2016 à 06:31
0
Merci
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.
Commenter la réponse de ucfoutu
cs_MPi 3869 Messages postés mardi 19 mars 2002Date d'inscription 25 mai 2018 Dernière intervention - 16 févr. 2016 à 14:48
0
Merci
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... ;)
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 16 févr. 2016 à 17:30
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
Commenter la réponse de cs_MPi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.