Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Insertion dans la Listfillrange d'un combobox

  • Initiateur de la discussion Initiateur de la discussion Xavier
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

X

Xavier

Guest
Bonjour à tous,

Tout d'abord, je vous souhaite un Joyeux Noel et une Bonne Année.

Explication : VBA refuse de remplir un listfillrange d'un combobox.

But de la macro

En appuyant sur un bouton, la macro remplit un combobox avec les "X" premières lignes d'une série. La dernière ligne reprise ("X") est défini dans la cellule sheet3!D5. En résumé, cela permet d'avoir un contenu de combobox volatile.

La macro que voici tourne correctement (J'ai testé dans un autre fichier excel)

Private Sub CommandButton2_Click()

Sheet9.Visible = xlSheetVisible
Sheet3.Visible = xlSheetVisible
Sheet3.Select
Sheet3.Cells(5, 4).Select
test = ActiveCell
Sheet9.Select
Sheet9.ComboBox1.ListFillRange = "Sheet1!a2:a" & test
Sheet3.Visible = xlSheetHidden
End Sub


Le problème : en remplacant la sheet1 par la "sheet11" (où se trouve réellement ma liste de données), la macro refuse de remplir la listfillrange du combobox.

Ma question : Est il possible que la feuille11 ou bien celle qui contient le combobox aie une propriété qui empêche la création d'un lien entre le combobox et la sheet11?


Pour vous aider, j'ai pu remarquer que si je tape manuellement sheet1!a2:a4 dans la propriété listfillrange, vba l'accepte alors que si je tape sheet11!a2:a4, vba refuse et l'efface directement.

Je vous remercie d'avance pour votre aide.

Xavier
 
Bonjour Xavier, Bonjour les ami(e)s du Forum !

J'espère que vous avez tous passé un bon Noël... Moi j'ai été cloué au lit toute la journée d'hier...

Ton code me parait on ne peut plus bizzare Xavier... "La macro que voici tourne correctement " ... çà me parait vraiment impossible que çà tourne !

Dès la première ligne :
Sheet9.Visible = xlSheetVisible

"Sheet9" ... doit déjà planter ! car en VBA on doit mentionner les objets proprement.

Soit c'est :
Sheets("Sheet9").Visible = xlSheetVisible
Dans ce cas "sheet9" est le nom de la feuille

Soit c'est :
Sheets(9).Visible = xlSheetVisible
Dans ce cas Sheets(9) est le numéro d'index de la feuille

Ensuite "ListFillRange" (tout comme "RowSource") accepte des données de type "String" pour retourner une plage de cellules (Exemple Sheets(2).ComboBox1.ListFillRange = "feuil2!a2:a10")

Maintenant ton exemple avec une variable "Test" pourrait marcher à la condition formelle que "Test" retourne un numéro de Ligne... Et ce qui ne sempbla pas être le cas dans ton exemple.

Voici deux exemples
Private Sub CommandButton2_Click()
test = ActiveCell.Row
Sheets(2).ComboBox1.ListFillRange = "feuil2!a2:a" & test
End Sub
Danc ce cas c'est le numéro de ligne de la cellule active qui sera retournée

Private Sub CommandButton2_Click()
test = Sheets(1).Range("D5").Value
Sheets(2).ComboBox1.ListFillRange = "feuil2!a2:a" & test
End Sub
Danc ce cas c'est la valeur de la cellule D5 de la feuille indexée en 1 qui sera retournée comme numéro de dernière ligne de ta combobox, NB si ce n'est pas une valeur numérique entier en D5, rien ne sera retourné dans ta combobox

Voilà en espérant t'avoir éclairé un peu dans ton problème Xavier

Bonne Journée
@+Thierry
 
Bonjour le Forum,

Je te souhaite un bon rétablissement, Thierry et te remercie pour tes explications.

Il est probable que mes macros soient bizarres. Il est vrai que j'apprend en testant enormement et donc que je n'utilise probablement pas les codes conventionnels

Tout d'abord, la cellule que "d5" contient effectivement bien le numéro d'une ligne ce qui me permet d'avoir des données de type string.


J'insère ici un fichier reprenant ma macro. Vous pourrez constater qu'elle tourne.

Cependant, le problème est le suivant:

Si vous remplacez
Sheet1.ComboBox1.ListFillRange = "Sheet11!b1:b" & test
par
Sheet1.ComboBox1.ListFillRange = "Sheet12!b1:b" & test

Vous pourrez constater que la macro ne tourne plus.

De plus si vous allez dans les propriétés de la combobox à listfillrange et que vous insérez manuellement un code se référant à la sheet12, vous pourrez constater vba refuse de le garder.

Mon problème ne se rapporte donc pas à l'écriture de ma macro mais, je suppose à une propriété de mes feuilles ou du combox ou bien encore du logiciel VBA.

Est ce quelqu'un a déjà rencontré ce problème?

Joyeux Noel

Xavier
 

Pièces jointes

ton problème vient essentiellement de ce que ta façon de faire n'est efectivement guère orthodoxe : il faut cliquer sur un bouton dans une feuille pour que l'a liste s'actualise sur une deuxième feuille avec des données provenant d'une troisième, aucune n'ayant un nom bien parlant. Résultat, tu t'es emmêlé les pédales et tu n'utilises pas les bonnes références, à la fois de feuille et de plage. Pas étonnant que ça ne marche pas donc.

Pour garder ta façon de faire, remplace ton workbook_open par celui-ci

Private Sub Workbook_Open()
Dim Test As Long, Test1 As String
Test = Sheet3.Range("B4").Value
Test1 = "Sheet2!A1:A" & Test
Sheet1.ComboBox1.ListFillRange = Test1
End Sub

et ton commandButton_click par celui-là

Private Sub CommandButton1_Click()
Dim Test As Long
Test = Sheet3.Range("B4").Value
Sheet1.ComboBox1.ListFillRange = "Sheet11!b1:b" & Test
'si tu veux aller sur la feuille 1
'sheet1.Select
End Sub

et ça marchera.
 
ah ben Tiens çà alors !!

en ce 26 Décembre 2002 je viens d'apprendre qu'on pouvait faire :

sheet1.select !!!

lol

çà alors, tellement bête et discipl(us)iné j'ai toujours fait depuis des siècles :
Sheets("Sheet1").Select !!!

Remarquez que j'ai pris tellement l'habitude que je ne m'y ferais jamais !!!
et puis au milieu d'un code style roman... si la feuille s"appelle Toto, je serai vraiment dans la mouise !!!

Enfin merci, on apprend tous les jours !!!!
donc autant pour moi ton code fonctionne et sûrement mieux avec les modifs de Ti !!

Bonne fin de Journée
@+Thierry
 
Arf j'ai compris !!!

Tu dois faire çà Xavier !!!
Sheet1.ComboBox1.ListFillRange = "DONNEE!b1:b" & test

LOL

c'est bien un piège à C... cette histoire d'utiliser les noms de feuilles en tant qu'objets au lieu des noms d'Onglets.... Pour RowSource ou ListFillRange c'est le nom de l'onglet !!!!

çà fait un vrai moyen de ne plus savoir où on en est cette histoire lol

voilà !!! c'est à force de regarder ton truc pour comprendre cette histoire de sheet1.select !!! que d'un coup çà m'a sauté aux yeux !!

voilà où est ton problème ...
bonne fin d'aprèm
@+Thierry
 
je confirme. Dans certains cas, il peut être intéressant de sélectionner une feuille directement par son nom d'objet, mais moi aussi je préfère la qualifier avec Worksheets("NomFeuille"). Comme Thierry, je suis bête et discipliné et je fais comme j'ai pris l'habitude de faire 🙂
 
Un grand merci.

Effectivement avec vos modifications, cela fonctionne à merveille.

Encore deux questions:

1- N'y aura t'il pas des problèmes dans les macros en utilisant les codes "Worksheets("NomFeuille")" si, par la suite, des utilisateurs, autres que le programmeur, changent les noms des feuilles?


2- Y a t'il moyen de classer les élements d'un combobox par ordre alphabétique ou numérologique?

Merci

bon wk

Xavier
 
Re : Insertion dans la Listfillrange d'un combobox

1-je pense que si un utilisateur change le nom de la feuille, étant marqué en dur dans le code, Excel ne retrouvera pas la feuille.

2-pour classer tes données de liste par ordre alphabétique, essaye de trier directement tes données sources, à l'aide des filtres. Je n'ai pas essayé mais ça devrait fonctionner
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…