Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
bouton option affichage dans une listeBox des feuilles ayant le même nom
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 !
Voila je souhaite afficher une ListeBox dans un Userform. le contenu d'une feuille.
Le choix de la feuille se fait par des boutons option, le problème est que les feuilles possèdent le même nom
Re : bouton option affichage dans une listeBox des feuilles ayant le même nom
Bonsoir à Tous
Il y des espaces devant tes noms d'onglets.
Code:
Private Sub OptionButton1_Click()
With Sheets("Tableau (2)")
Me.TextBox1 = .[D4]
Me.ListBox1.List = .Range("D5:D" & .Range("D65536").End(xlUp).Row).Value
End With
End Sub
Re : bouton option affichage dans une listeBox des feuilles ayant le même nom
Re,
Fichier (2) nettement plus sophistiqué avec une macro paramétrée :
Code:
Private Sub OptionButton1_Click()
Affiche "Tableau"
End Sub
Private Sub OptionButton2_Click()
Affiche "Tableau (2)"
End Sub
Private Sub OptionButton3_Click()
Affiche "Tableau (3)"
End Sub
Private Sub OptionButton4_Click()
Affiche "Tableau (4)"
End Sub
Sub Affiche(NomFeuille As String)
Dim liste As Range
With Sheets(NomFeuille)
TextBox1 = .[D4]
Set liste = .Range("D5", .[D65536].End(xlUp)) 'liste dynamique
If liste.Row < 5 Then ListBox1.Clear: Exit Sub 'si liste vide
ListBox1.List = liste.Value
End With
End Sub
Re : bouton option affichage dans une listeBox des feuilles ayant le même nom
Re
Avec un combobox pour le choix des onglets.
Code plus court ??
Code:
Private Sub UserForm_Initialize()
For i = 2 To Sheets.Count
Me.ComboBox1.AddItem Sheets(i).Name
Next i
End Sub
Private Sub ComboBox1_Change()
m = Me.ComboBox1
With Sheets(m)
Me.TextBox1 = .[D4]
Me.ListBox1.List = .Range("D5:D" & .Range("D65536").End(xlUp).Row).Value
End With
End Sub
Re : bouton option affichage dans une listeBox des feuilles ayant le même nom
Bonjour le fil, le forum,
Autre solution avec une ComboBox , plus compliquée à comprendre :
Code:
Dim tablo() 'mémorisation
Private Sub ComboBox1_Change()
Dim liste As Range
ListBox1.Clear
If ComboBox1.ListIndex = -1 Then Exit Sub
With Sheets(tablo(1, ComboBox1.ListIndex))
Set liste = .Range("D5", .[D65536].End(xlUp)) 'liste dynamique
End With
If liste.Row = 5 Then ListBox1.List = liste.Value
End Sub
Private Sub UserForm_Initialize()
Dim w As Worksheet, n As Integer
For Each w In Worksheets
If w.Name Like "Tableau*" Then
ReDim Preserve tablo(1, n) 'base 0
tablo(0, n) = w.[D4]
tablo(1, n) = w.Name
n = n + 1
End If
Next
ComboBox1.List = Application.Transpose(tablo)
End Sub
Fichier (3).
Edit : si l'on veut afficher aussi le nom de la feuille, il suffit de mettre à 2 la propriété ColumnCount de la ComboBox.
Re : bouton option affichage dans une listeBox des feuilles ayant le même nom
Re,
Et en mettant à 2 la propriété BoundColumn de la ComboBox plus besoin de mémoriser tablo :
Code:
Private Sub ComboBox1_Change()
Dim liste As Range
ListBox1.Clear
If ComboBox1.ListIndex = -1 Then Exit Sub
With Sheets(ComboBox1.Value)
Set liste = .Range("D5", .[D65536].End(xlUp)) 'liste dynamique
End With
If liste.Row = 5 Then ListBox1.List = liste.Value
End Sub
Private Sub UserForm_Initialize()
Dim w As Worksheet, tablo(), n As Integer
For Each w In Worksheets
If w.Name Like "Tableau*" Then
ReDim Preserve tablo(1, n) 'base 0
tablo(0, n) = w.[D4]
tablo(1, n) = w.Name
n = n + 1
End If
Next
ComboBox1.List = Application.Transpose(tablo)
End Sub
Re : bouton option affichage dans une listeBox des feuilles ayant le même nom
Re,
En poussant le bouchon un peu loin, on peut même trier alphabétiquement les titres des listes :
Code:
Sub tri(a, gauc, droi) ' Quick sort aménagée
Dim ref, g, d, temp
ref = a(0, (gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(0, g) < ref: g = g + 1: Loop
Do While ref < a(0, d): d = d - 1: Loop
If g <= d Then
temp = a(0, g): a(0, g) = a(0, d): a(0, d) = temp
temp = a(1, g): a(1, g) = a(1, d): a(1, d) = temp
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Par ailleurs j'ai amélioré la restitution dans UserForm_Initialize :
Code:
If n = 1 Then
ComboBox1.AddItem tablo(0, 0)
ComboBox1.List(0, 1) = tablo(1, 0)
ElseIf n Then
Call tri(tablo, 0, n - 1)
ComboBox1.List = Application.Transpose(tablo)
End If
End Sub
Re : bouton option affichage dans une listeBox des feuilles ayant le même nom
Bonsoir
Merci Job75 & Regueiro, super !
Je retiens les deux codes suivant
Code:
Private Sub UserForm_Initialize()
For i = 2 To Sheets.Count
Me.ComboBox1.AddItem Sheets(i).Name
Next i
End Sub
Private Sub ComboBox1_Change()
m = Me.ComboBox1
With Sheets(m)
Me.TextBox1 = .[D4]
Me.ListBox1.List = .Range("D5:D" & .Range("D65536").End(xlUp).Row).Value
End With
End Sub
et
Code:
Private Sub OptionButton1_Click()
Affiche "Tableau"
End Sub
Private Sub OptionButton2_Click()
Affiche "Tableau (2)"
End Sub
Private Sub OptionButton3_Click()
Affiche "Tableau (3)"
End Sub
Private Sub OptionButton4_Click()
Affiche "Tableau (4)"
End Sub
Sub Affiche(NomFeuille As String)
Dim liste As Range
With Sheets(NomFeuille)
TextBox1 = .[D4]
Set liste = .Range("D5", .[D65536].End(xlUp)) 'liste dynamique
If liste.Row < 5 Then ListBox1.Clear: Exit Sub 'si liste vide
ListBox1.List = liste.Value
End With
End Sub
Job75, j'avoue je décroche sur tes dernières solutions qui sont plus compliqués à comprendre
notamment :"Application.Transpose(tablo)"
- 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