Creer un nouveau classeur en exportant une feuille excel et les objets VB

prorudess

XLDnaute Junior
Bonjour à tous,

Alors voilà mon problème est assez simple (à expliquer), je cherche par une macro à soit :

- Exporter une feuille d'un classeur (1) vers un nouveau classeur (2) en exportant aussi les modules (1) et les Userforms (1) liées à ma feuille.

- Enregistrer sous en supprimant les feuilles que je ne désire pas garder dans cette nouvelle copie. Cette deuxième solution est la plus simple à mettre en œuvre, mais il y a un problème, je dois pouvoir accéder encore à mon classeur d'origine car la macro doit pouvoir continuer à tourner plusieurs fois (elle répète cette opération plusieurs fois (cf.code vba joint)).

Code:
'Copier coller les valeurs
Application.ScreenUpdating = False
Feuil2.Range("A1:K90").Value = Feuil2.Range("A1:K90").Value
Application.ScreenUpdating = True

'Supprimer la feuille 1
Feuil1.Delete

'Enregistrer ce nouveau classeur
ChDir "C:\Users\moi\Desktop"
ActiveWorkbook.SaveAs Filename:="C:\Users\moi\Desktop\" & Feuil2.Range("G2").Value & ".xls" _
, FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

'Fermer la copie sans confirmation
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True

Voilà si quelqu'un à un bout de code me permettant de faire cela je suis preneur.

D'avance merci de votre aide.

Bon dimanche
 

Papou-net

XLDnaute Barbatruc
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

Bonjour prorudess,

Qu'entends-tu par "Userforms (1) liées à ma feuille" ?

Sinon, la première solution est la plus simple. Tu peux insérer la macro ci-dessous dans un module standard :

Code:
Sub MacroCopie()
Dim wkb As Workbook

Set wkb = ActiveWorkbook
    ActiveSheet.Copy
    wkb.Activate
End Sub

Ce code copiera la feuille active dans un nouveau fichier et réactivera le classeur d'origine à l'écran.

Les contrôles et le code attachés à cette feuille seront également copiés.

Espérant avoir répondu.

Cordialement.
 

prorudess

XLDnaute Junior
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

Merci pour ta réponse,

J'ai donc essayé ce code, il me copie bien la feuille active sur un nouveau classeur mais pas les modules et userforms du classeur d'origine alors que j'en ai besoin.
 

Papou-net

XLDnaute Barbatruc
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

RE :

Peux-tu joindre un fichier bidon avec tes modules et userforms car, comme je te le disais, je ne vois pas comment tu peux attacher des UF à des feuilles de calcul ?

Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

RE :

Essaie en recopiant le code ci-dessous :

Code:
Sub MacroCopie()
Dim wkb As Workbook, UF

Set wkb = ActiveWorkbook
    ActiveSheet.Copy
    For Each UF In ThisWorkbook.VBProject.vbcomponents
      If UF.Type = 3 Then
        ThisWorkbook.VBProject.vbcomponents(UF.Name).Export "MonUF.frm"
        ActiveWorkbook.VBProject.vbcomponents.Import "MonUF.frm"
      End If
    Next
    wkb.Activate
End Sub
Sans pousser trop loin, chez moi ça semble fonctionner.

Espérant qu'il en sera de même chez toi.

Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

RE :

Rectification : ce code réutilise les macros du fichier d'origine. Pour contrer celà, j'ai remplacé tes boutons issus des contrôles Formulaire par des boutons ActiveX. Pour ma part, je préfère toujours utiliser ces derniers, le cas présent renforce ma conviction.
Pour les contrôles Formulaires, il faut modifier l'appel à la macro, qui est lié à la feuille d'origine, et qui conduit donc à relancer le fichier initial même si ce dernier est fermé. Dans le cas des ActivesX, les boutons font appel directement au module de feuille, donc plus de problème.

Je t'envoie donc ton fichier modifié pour essai.

Cordialement.
 

Pièces jointes

  • Copie de Export.xls
    49 KB · Affichages: 52
  • Copie de Export.xls
    49 KB · Affichages: 58
  • Copie de Export.xls
    49 KB · Affichages: 52

prorudess

XLDnaute Junior
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

Re,

Lorsque je clique sur "Exporter Feuille" le programme me renvoie une erreur (L'accès par programme au projet Visual Basic n'est pas fiable) apparemment cela vient de la ligne
Code:
For Each UF In ThisWorkbook.VBProject.vbcomponents
 

YANN-56

XLDnaute Barbatruc
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

Bonsoir à vous, et à ceux qui passeront par là,

Pardon de m'immiscer, mais je regarderais plutôt avec ceci:

DimTRANSFERT As Object
SetTRANSFERT = CreateObject("scripting.filesystemobject")
TRANSFERT.MoveFileSource:=CHEMIN COMPLET DE MON CLASSEUR ACTIF, _
Destination:=CHEMINCOMPLET DU DOSSIER DE DESTINATION + LE NOM DU CLASSEUR

La suppression des feuilles inutiles pourra se faire avant ou après l'opération,
suivant les besoins.

Il y a un morceau de temps que je n'ai pas pratiqué cette manœuvre.
Mais si tu n'as pas eu solution à ta question dans les heures qui viennent,
je pourrai regarder à te faire un exemple.

Amicalement,

Yves
 

prorudess

XLDnaute Junior
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

Merci beaucoup Yves,
Je cherche toujours une solution avec mon fidèle ami google (mais pour l'instant rien ...)
Je ne connais pas cette procédure.
Pourrais tu m'en dire plus à l'occasion
 

Papou-net

XLDnaute Barbatruc
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

RE :

Salut Yves, ça faisait longtemps que je ne t'ai vu sur le forum,

@ prorudess :

Est-ce que cela se produit sur le fichier que je t'ai envoyé ou sur la macro précédente que tu as copiée sur ton classeur ?

Sinon, regarde du côté du niveau de protection des macros. Chez moi, il est réglé sur "Activer toutes les macros ..." et ça fonctionne sans problème. Ou encore, essaie de recopier directement le code ci-dessous dans ton classeur.

Code:
Sub MacroCopie()
Dim wkb As Workbook, UF

Set wkb = ActiveWorkbook
    ActiveSheet.Copy
    For Each UF In ThisWorkbook.VBProject.vbcomponents
      If UF.Type <= 3 Then
        ThisWorkbook.VBProject.vbcomponents(UF.Name).Export "MonUF.frm"
        ActiveWorkbook.VBProject.vbcomponents.Import "MonUF.frm"
      End If
    Next
    wkb.Activate
End Sub

Cordialement.
 

YANN-56

XLDnaute Barbatruc
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

Bonsoir à Prorudess, Papou-net:), et aux visiteurs aussi,

Papou, je ne suis plus trop présent ici, car il y a trop dequestions
relatives aux clignotements de cellules et autres recherches pour épater les copains.

Dans mon idée le transport des vbcomponents est automatique avec le "MoveFileSource"
car c'est l'ensemble du Fichier que l'on déplace, avec la totalité des objets et leur code VBA.

Les appels "Famine" de mon bidon m'obligeant….
Je m'attellerai à construire unexemple un peu plus tard.

Je vous dis donc à ce soir, comme je le pense, ou au pire à demain au saut du lit J

Amicalement,

Yves
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Creer un nouveau classeur en exportant une feuille excel et les objets VB

Bonjour à tous,

Prorudess : Pour ton # 8, il est peut-être nécessaire de cocher "Faire confiance au projet VBA" dans la sécurité des macros.

Capture_1.png

Puis-je me permettre... Le "Enregistrer sous" inclue toutes les feuille le VBA. Il suffira de supprimer les feuilles non souhaitées et de ré-enregistrer le fichier. Mais ai-je compris la demande ?

A + à tous
 

Pièces jointes

  • Capture_1.png
    Capture_1.png
    13.4 KB · Affichages: 196
  • Capture_1.png
    Capture_1.png
    13.4 KB · Affichages: 197
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 335
Membres
103 524
dernier inscrit
Smile1813