XL 2016 Problème remplissage ListBox variable

  • Initiateur de la discussion Initiateur de la discussion bilbinou
  • 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 !

bilbinou

XLDnaute Nouveau
Bonjour à tous !

Je viens vers vous aujourd'hui car je n'arrive pas à trouver solution à mon problème qui parait pourtant si simple.

J'ai crée sur une feuille excel un système 'd'onglets' qui permet à l'utilisateur d'aller en cliquant sur les boutons "options" là où il veut (voir capture d'écrans). Pour chacune de ces options, il y a une ListBox qui présente des phrases que l'utilisateur viendra sélectionner pour ensuite les exporter vers un document Word via le Bouton "exporter".

J'ai pensé en premier lieu à créer plusieurs ListBox (pour chaque onglets) ainsi que plusieurs boutons Exporter. Mais au vue du nombre d'onglets que j'ai sur le fichier excel de mon projet, je me suis dit que qu'il était plus judicieux d'avoir une seule ListBox et un seul bouton Exporter.

J'ai donc changer la propriété de ces deux composants en "ne pas déplacer ou dimensionner avec les cellules".

Sauf que le problème maintenant, c'est que je ne vois pas comment remplir la ListBox avec les données qui correspondent à l'onglet choisi (ces données se trouvent sur la deuxième feuille du classeur ci-joint).

Je n'arrive pas à trouver l'instruction en VBA qui dirait : si tu as cliquer sur l'onglet 'option1' ou si le sub Option1_cliquer est réalisé, remplit la ListBox avec les lignes de B4 à B7 de la feuille Données
Si tu as cliqué sur l'onglet 'option2', remplit la ListBox avec les lignes de B11 à B13 de la feuille Données etc ...

J'ai pourtant essayé : If Option1_cliquer = True then mais je pense que je n'ai pas compris comment utiliser cette propriété.

Quelqu'un pourrait-il m'éclairer ?

Merci à tous ceux qui se pencheront sur mon problème
icon_smile.gif
 

Pièces jointes

  • Problème remplissage Listbox onglet1.JPG
    Problème remplissage Listbox onglet1.JPG
    45.8 KB · Affichages: 23
  • Problème remplissage listBox onglet2.JPG
    Problème remplissage listBox onglet2.JPG
    47 KB · Affichages: 20
  • Problème remplissage ListBox.xlsm
    Problème remplissage ListBox.xlsm
    29.9 KB · Affichages: 10
Solution
Bonjour à Tous,
J'avais juste simplifié la proposition de @sousou :
VB:
[ListBox1].ListFillRange = [Tableau15].ListObject.DataBodyRange.Address(External:=True)

Mince, le fil a déjà évolué,
@job75 a donné une bonne proposition simplifiée et une remarque pertinente :
la listbox n'est pas forcément ce qu'il faudrait selon le contexte ...
Bonjour bilbinou, sousou,

Dans le fichier joint j'utilise des OptionButtons :
VB:
Private Sub OptionButton1_Click()
ListBox1.ListFillRange = [Option1].Address(External:=True)
ListBox1.Width = 620
End Sub

Private Sub OptionButton2_Click()
ListBox1.ListFillRange = [Option2].Address(External:=True)
ListBox1.Width = 2200
End Sub

Private Sub OptionButton3_Click()
ListBox1.ListFillRange = [Option3].Address(External:=True)
ListBox1.Width = 1870
End Sub
Il faut préciser la largeur car il n'y a pas de barre de défilement horizontale.

A+
 

Pièces jointes

Bonjour à Tous,
J'avais juste simplifié la proposition de @sousou :
VB:
[ListBox1].ListFillRange = [Tableau15].ListObject.DataBodyRange.Address(External:=True)

Mince, le fil a déjà évolué,
@job75 a donné une bonne proposition simplifiée et une remarque pertinente :
la listbox n'est pas forcément ce qu'il faudrait selon le contexte ...
 
Bonjour fanch55,
la listbox n'est pas forcément ce qu'il faudrait selon le contexte ...
Oui le mieux ici est d'utiliser un Label :
VB:
Option Explicit

Private Sub OptionButton1_Click()
Liste [Option1]
End Sub

Private Sub OptionButton2_Click()
Liste [Option2]
End Sub

Private Sub OptionButton3_Click()
Liste [Option3]
End Sub

Sub Liste(R As Range)
Dim i&, x$
For i = 1 To R.Rows.Count
    If R(i, 1) <> "" Then x = x & vbCrLf & R(i, 1)
Next
Application.ScreenUpdating = False
With Label1
    .AutoSize = False
    .Width = 363
    .Height = 10000
    .Caption = Mid(x, 3)
    .AutoSize = True
End With
End Sub
A+
 

Pièces jointes

Bonjour à tous,

Tout d'abord, merci grandement pour vos réponses et implications.
Le code donné par @sousou et @fanch55 fonctionne très bien et correspond à ce que je voulais faire.
Bonjour fanch55,

Oui le mieux ici est d'utiliser un Label :
VB:
Option Explicit

Private Sub OptionButton1_Click()
Liste [Option1]
End Sub

Private Sub OptionButton2_Click()
Liste [Option2]
End Sub

Private Sub OptionButton3_Click()
Liste [Option3]
End Sub

Sub Liste(R As Range)
Dim i&, x$
For i = 1 To R.Rows.Count
    If R(i, 1) <> "" Then x = x & vbCrLf & R(i, 1)
Next
Application.ScreenUpdating = False
With Label1
    .AutoSize = False
    .Width = 363
    .Height = 10000
    .Caption = Mid(x, 3)
    .AutoSize = True
End With
End Sub
A+

Concernant le label, il n'y a plus la possibilité pour l'utilisateur de sélectionner le texte qu'il voudra envoyé vers le Word ? La listBox me paraissait la plus approprié car elle laisse la possibilité de choisir ce que l'on veut.
Je marque cette discussion comme résolue et vous remercie de nouveau.

Bonne continuation à vous 🙂
 
- 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

Discussions similaires

Réponses
16
Affichages
841
Réponses
10
Affichages
235
Réponses
2
Affichages
211
Réponses
25
Affichages
1 K
Retour