ListBox pour sélectionner les feuilles à enregistrer séparemment

Bonjour,

en parcourant le forum je suis tombé sur ce poste : https://forum.excel-pratique.com/excel/copier-plusieurs-feuilles-d-un-classeur-vers-un-autre-t76823....
J'ai repris le code de ThauThème qui fonctionne bien en l'état.

Mon but final est que les feuilles sélectionnées s'enregistre indépendamment dans des nouveaux classeurs.

Avant de faire cela je voulais tester une version ou les feuilles sélectionnées sont copier dans un nouveau classeur nommé "EXPORT_BOM.xlsx".
En modifiant le code pour créer le classeur "EXPORT_BOM.xlsx" automatiquement et non pas manuellement, un message d'erreur '9' apparait au moment de copier les feuilles dans ce classeur nouvellement créé alors que s'il est déjà existant au lancement de la macro cela fonctionne !

Voici le code rajouté pour créer ce classeur

' Création du fichier d'exportation des BOM selectionnées
NameCD = "EXPORT_BOM.xlsx"
Set CD = Workbooks.Add
CD.SaveAs (ThisWorkbook.Path & "\" & NameCD)

et le code complet de cette fonction:

Private CS As Workbook 'déclare la variable CS (Classeur Source)
Private CD As Workbook 'déclare la variable CD (Classeur Destination)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm2
Dim O As Worksheet ''déclare la variable O (Onglets)

' Création du fichier d'exportation des BOM selectionnées
NameCD = "EXPORT_BOM.xlsx"
Set CD = Workbooks.Add
CD.SaveAs (ThisWorkbook.Path & "\" & NameCD)

Set CS = ThisWorkbook 'définit le classeur source CS
Set CD = Workbooks("EXPORT_BOM.xlsx") 'définit le classeur destination CD (à adapter)
For Each O In CS.Sheets 'boucle sur tous les onglets du classeur source CS
    Me.ListBox1.AddItem O.Name 'ajoute le nom de l'onglet à la ListBox1
Next O 'prochain onglet de la boucle
End Sub

Private Sub CommandButton1_Click() 'bouton "Copier"
Dim TOS() As Variant 'déclare la variable TOS (Tableau des Ongles Sélectionnées)

With Me.ListBox1 'prend en compte la ListBox1
    For I = 0 To .ListCount - 1 'boucle  sur tous les éléments
        If .Selected(I) = True Then 'condition : si l'élément est sélectionné
            ReDim Preserve TOS(J) 'redimensionne le tableau TOS
            TOS(J) = .List(I) 'récupère le nom de l'onglet sélectionné
            J = J + 1 'incrémente J
        End If 'fin de la condition
    Next I 'prochain élément de la boucle
End With 'fin de la prise en compte de la ListBox1

'copie les onglets du tableau TOS après le dernier onglet du classeur de destination CD
Sheets(TOS).copy After:=CD.Sheets(CD.Sheets.Count)
Unload Me 'vide et ferme l'UserForm1
End Sub

Private Sub CommandButton2_Click() 'bouton "Annuler"
Unload Me 'vide et ferme l'UserForm2
End Sub

Si certains on une idée je suis preneur.

Et si par grande bonté vous aviez également une idée pour que la Listbox (ou autre solution) permette l'enregistrement indépendant des feuilles sélectionnées ça m'éviterai un prochain poste sur ce forum

Merci d'avance.

Hello,

Dans ton bouton il ne connais pas ta variable CD.

Les variables public ne fonctionnent pas dans un module usf, il faut ajouter un module classique à part avec tes variables public

R@g

Bonsoir R@g.

Je ne comprend pas ta réponse car sans le code rajouté pour la création du classeur, la variable CD est également défini en amont et la macro fonctionne de la même façon !

ça me semble bizarre cette histoire ...

Il faudrait voir avec le fichier

Rechercher des sujets similaires à "listbox selectionner feuilles enregistrer separemment"