VBA, utiliser une partie du nom d'une ListBox comme variable

Bonjour, (message modifié pour être plus complet)

Mon fichier étant trop lourd et tout lié, je mets un exemple avec les noms exactes des onglets et Listbox que j'ai.

J'ai 4 onglets :

  • Prog_Musculation
  • Prog_Fitness
_ Prog_Etirement

- Prog_Footing

J'ai créé 1 userform (UsfListes) qui contient 4 ListBox, qui sont nommées :

  • Lb_Musculation
  • Lb_Fitness
  • Lb_Etirement
  • Lb_Footing

Pour le moment le code VBA actuel alimente uniquement la Lb_Musculation, je souhaiterai que chaque listBox s'alimente à partir de son onglet correspondant (Lb_Musculation s'alimente depuis l'onglet Prog_Musculation, etc..) , Est-ce possible ? Si oui, avec quel code et quelle variable ?

code VBA actuel :

Sub AlimenteListbox()

Dim J As Long

Dim LISTBOX As String

Me.Lb_Musculation.Clear

'Me.Lb_Musculation.Clear (à modifier avec une variable)

With Sheets("Prog_Musculation") ' A MODIFIER... avec variable du genre : With sheets("Prog_"&mid(ListBox.name,6))'

'With Sheets("Prog_" & Mid(LISTBOX.Name, 6)) (à modifier avec une variable)

For J = 3 To .Range("B" & Rows.Count).End(xlUp).Row

If Trim(.Range("B" & J)) <> "" Then

If Me.OpBTous = True Then

Me.Lb_Musculation.AddItem .Range("B" & J)

'Me.Lb_XXXXXXXXXXXXX.AddItem .Range("B" & J) (à modifier avec une variable)

End If

End If

Next J

End With

End Sub

Je remets donc un fichier avec les bons termes cette fois-ci, pour apporter le maximum de précisions :

21exemple2.xlsm (29.38 Ko)

Merci par avance pour votre aide

Cordialement

Bonsoir,

With Worksheets(Replace(Lb_Mardi.Name, "Lb", "Prog"))

mais ça n'apporte pas grand chose... il faudrait voir le contexte d'ensemble pour définir la méthode d'écriture la plus économique...

Cordialement.

Bonjour MFerrand,

J'ai mis le fichier exemple en pièce jointe.

Merci pour ton aide.

Bonne journée

Bonjour,

Je ne vois pas très bien ce que tu veux faire exactement !

Supposons que tu veuilles initialiser la ListBox correspondant au jour :

Sub AlimenteListbox()
    Dim j&, jour$, LBox As ListBox, wsJ As Worksheet
    jour = WeekdayName(Weekday(Date))
    Set LBox = Me.Controls("Lb_" & jour)
    Set wsJ = Worksheets("Prog_" & jour)

Tu récupères le nom du jour selon date du jour, et tu t'en sers pour initialiser 2 variables objet (ListBox et feuille) correspondant au jour.

Code incomplet, car il faudra tester que ce ne soit pas un samedi ou dimanche...

Si tu veux initialiser en boucle toutes tes ListBox :

    For i = 2 to 6
        jour = WeekdayName(i)
        ...

Cordialement.

J'ai voulu faire simple avec un exemple basique (Lundi, Mardi, Mercredi...) pour éviter de rentrer dans les détails, mais au final je me rends compte que ce n'est pas judicieux car cela modifie beaucoup le but de ce que je veux faire.

Mon fichier étant trop lourd et tout lié, je vais refaire un exemple avec les noms exactes des onglets et Listbox que j'ai.

J'ai 4 onglets :

  • Prog_Musculation
  • Prog_Fitness
_ Prog_Etirement

- Prog_Footing

J'ai créé 1 userform (UsfListes) qui contient 4 ListBox, qui sont nommées :

  • Lb_Musculation
  • Lb_Fitness
  • Lb_Etirement
  • Lb_Footing

Pour le moment le code VBA actuel alimente uniquement la Lb_Musculation, je souhaiterai que chaque listBox s'alimente à partir de son onglet correspondant (Lb_Musculation s'alimente depuis l'onglet Prog_Musculation, etc..) , Est-ce possible ? Si oui, avec quel code et quelle variable ?

code VBA actuel :

Sub AlimenteListbox()
Dim J As Long
Dim LISTBOX As String

   Me.Lb_Musculation.Clear
                   'Me.Lb_Musculation.Clear (à modifier avec une variable)

With Sheets("Prog_Musculation") '   A MODIFIER... avec variable du genre : With sheets("Prog_"&mid(ListBox.name,6))'
                   'With Sheets("Prog_" & Mid(LISTBOX.Name, 6)) (à modifier avec une variable)
 For J = 3 To .Range("B" & Rows.Count).End(xlUp).Row
      If Trim(.Range("B" & J)) <> "" Then
         If Me.OpBTous = True Then
         Me.Lb_Musculation.AddItem .Range("B" & J)
                   'Me.Lb_XXXXXXXXXXXXX.AddItem .Range("B" & J) (à modifier avec une variable)
         End If
     End If
 Next J
End With
End Sub

Je remets donc un fichier avec les bons termes cette fois-ci, pour apporter le maximum de précisions :

21exemple2.xlsm (29.38 Ko)

Merci

Mettre le code cité sous balises Code est une habitude à prendre sans délai... !

Et indenter son code n'est pas destiné à faire joli, mais à pouvoir le lire plus rapidement sans erreur d'interprétation.

Cordialement.

Mettre le code cité sous balises Code est une habitude à prendre sans délai... !

Et indenter son code n'est pas destiné à faire joli, mais à pouvoir le lire plus rapidement sans erreur d'interprétation.

Cordialement.

Fait

Exemple, à essayer :

Private Sub UserForm_Initialize()
    Dim Ctrl As Control, dln%
    For Each Ctrl In Me.Controls
        If TypeOf Ctrl Is MsForms.ListBox Then
            With Worksheets(Replace(Ctrl.Name, "Lb", "Prog"))
                dln = .Range("B" & .Rows.Count).End(xlUp).Row
                If dln > 3 Then
                    Ctrl.List = .Range("B3:B" & dln).Value
                Else
                    Ctrl.AddItem .Range("B3")
                End If
            End With
        End If
    Next Ctrl
End Sub

Cordialement.

Chapeau Monsieur , cela marche parfaitement ! Je n'avais pas penser à utiliser Me.controls ....

Merci beaucoup !

Cordialement

Bonjour

a voir aussi avec les CodeName

A+

Maurice

Dim Onglet$

Private Sub UserForm_Initialize()
  Me.OpBTous = True
End Sub

Sub AlimenteListbox(Onglet)
Dim J As Long
Me.Lb_Musculation.Clear
    With Sheets(Onglet)
        For J = 3 To .Range("B" & Rows.Count).End(xlUp).Row
             Me.Lb_Musculation.AddItem .Range("B" & J)
        Next J
    End With
End Sub

Private Sub OpbJunior_Click()
  AlimenteListbox Feuil3.Name
End Sub

Private Sub OpbSenior_Click()
  AlimenteListbox Feuil2.Name
End Sub

Private Sub OpBTous_Click()
  AlimenteListbox Feuil1.Name
End Sub
Rechercher des sujets similaires à "vba utiliser partie nom listbox comme variable"