Bonjour,
Si j'ai bien compris ta demande, tu as un classeur de "base" qui reste ouvert où tu souhaites importer les valeurs d'une feuille spécifique d'un autre classeur que tu veux choisir dans une liste ? Si c'est ça, code à mettre dans le module du classeur (ThisWorkbook) :
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Dim Fe As Worksheet
Dim Lst As Shape
'suppression de la liste si existante
On Error Resume Next
ActiveSheet.Shapes("ListeFeuilles").Delete
On Error GoTo 0
'ajoute une ListBox "Formulaire" sur la feuille active
ActiveSheet.ListBoxes.Add 10, 10, 200, 100
'affecte à la variable Shape pour en utiliser les propriétés
Set Lst = ActiveSheet.Shapes(1)
'rempli la liste avec les nomls des feuilles du classeur qui vient d'être activé
With Lst
.Name = "ListeFeuilles"
.OnAction = "QuelleFeuille"
For Each Fe In ActiveWorkbook.Worksheets: .ControlFormat.AddItem Fe.Name: Next Fe
End With
'affecte à la variable afin de pouvoir utiliser les valeurs dans la Sub "QuelleFeuille()"
Set ClsExemple = ActiveWorkbook
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'supprime la liste à la fermeture
On Error Resume Next
ActiveSheet.Shapes("ListeFeuilles").Delete
End Sub
Code à mettre dans un module standard du classeur de "base", c'est la procédure qui est appelée quand tu cliques dans la liste :
'variable initialisée dans la sub événementielle "Workbook_WindowDeactivate()" pour la récup des valeurs par la suite
Public ClsExemple As Workbook
Public Sub QuelleFeuille()
With ActiveSheet.Shapes(Application.Caller).ControlFormat
'pour le test, indique le nom de la feuille choisie
MsgBox .List(.ListIndex)
'et ici, la valeur située en A1 de la feuille choisie
MsgBox ClsExemple.Worksheets(.List(.ListIndex)).Range("A1").Value
End With
End Sub
C'est dans cette procédure que tu doit adapter afin de faire ce que tu désires de la feuille