XL 2016 Problème remplissage ListBox variable

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
    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 ...

sousou

XLDnaute Barbatruc
Bonjour
Tu utilises des tableaux tu peu faire comme ceci pour l'option 1 et idem pour les autres
Sheets("feuil1").ListBox1.ListFillRange = "Données!" & Sheets("données").ListObjects("Tableau15").DataBodyRange.Address
 

job75

XLDnaute Barbatruc
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

  • Problème remplissage ListBox(1).xlsm
    36.7 KB · Affichages: 7

fanch55

XLDnaute Barbatruc
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 ...
 

job75

XLDnaute Barbatruc
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

  • Remplissage Label(1).xlsm
    37.6 KB · Affichages: 5

bilbinou

XLDnaute Nouveau
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 :)
 

Statistiques des forums

Discussions
315 124
Messages
2 116 460
Membres
112 748
dernier inscrit
Pboiusquet