Création du Userform VBA

Bonjour,

Je cherche à créer un UserForm dans Excel qui affiche une liste de tous les classeurs Excel ouverts et permet de copier le nom du classeur sélectionné dans une cellule, par exemple en B2. Le code que j'ai écrit fonctionne, cependant, la mise à jour des classeurs ouverts ou fermés prend du temps. Je me demandais s'il était possible d'ajouter une commande qui permettrait à Excel de mettre à jour cette liste de manière plus réactive. Je vous joins le code auquel je suis parvenu.

Private Sub UserForm_Initialize()

    Me.ListBox1.Clear

    For Each Workbook In Application.Workbooks
     Me.ListBox1.AddItem Workbook.Name
    Next Workbook

End Sub

Private Sub CommandButton1_Click()
    If Me.ListBox1.ListIndex <> -1 Then
        ' Afficher le nom du classeur sélectionné dans la cellule C3
        ThisWorkbook.Sheets("DONNEES").Range("F6").Value = Me.ListBox1.Value
        Unload Me
    Else
        MsgBox "Veuillez sélectionner un fichier.", vbExclamation, "Sélectionner un fichier"
    End If

End Sub

Private Sub CommandButton2_Click()

 Me.Tag = "Cancelled"
 Me.Hide

End Sub

Votre code est bon (1ère partie), mais vous aviez un défaut de structure.
Essayez ceci :

8exemple.xlsm (27.56 Ko)

Pour ce qui est des mises à jour, il faudra détailler.

Merci beaucoup Optimix pour votre réponse, ce userform est intégré dans une autre macro ce qui me génère un nouveau problème comment faire un exit sub lorsque l'utilisateur ferme la fenêtre du userform? j'ai essayé une solution avec un If not userform1.visible then exit sub, mais le problème c'est que exit sub se lance aussi lorsque le userform sélectionne un fichier car le user est fermé après la sélection. Si vous auriez une solution miracle 🙏

Difficile sans le code complet.
Essayez ceci :

Private Sub UserForm_Activate()
    Dim nbClasseurs As Integer
    Dim wb As Workbook, wbs As Workbooks

    nbClasseurs = Workbooks.Count
    If nbClasseurs > 1 Then
        Me.ListBox1.Clear

        Set wbs = Application.Workbooks
        For Each wb In wbs
            If wb.Name <> ThisWorkbook.Name Then Me.ListBox1.AddItem wb.Name
        Next wb
    Else
        MsgBox "bla...bla...bla..."
    End If
End Sub

Le code complet est celui-ci et est un code d'un module classique et non pas d'un privatesub. La difficulté est que je veux que le code de cette macro s'arrête si le UserForm est abandonné.

Sub ExecuterMacros2()
    ' Exécuter la macro AfficherUserForm
    UserForm1.Show

    If Not UserForm1.Visible Then
        Exit Sub
    Else

    ' Exécuter la macro collernom
    Call collernom2

    ' Exécuter la macro Splitdata
    Call Splitdata2

    ' Exécuter la macro CopierValeurs
    Call CopierValeurs2

    ThisWorkbook.Sheets("DONNEES").Range("F6:F7").ClearContents
    ThisWorkbook.Sheets("DONNEES").Range("J6:J7").ClearContents
    ThisWorkbook.Sheets("DONNEES").Range("C4").ClearContents

    End If

End Sub
Rechercher des sujets similaires à "creation userform vba"