Copie automatique macro vers un nouveau classeur
Bonjour,
Je m'appelle Charles, après avoir passé des heures entières sur ce forum il me reste quelques interrogations. Voila pourquoi je suis nouveau parmi vous. je vous remercie pour votre acceuil et pour votre aide future dans ce forum qui me semble très actif.
j'ai crée un userfom qui me permet de créer un nouveau classeur à partir du document initial et en cliquant sur le bouton valider du userform.
- Mon classeur initial s'appelle "AFI essai macro V3"
- Le classeur créé est nommé en fonction des informations rentrées dans le userfom (Nom1 et Nom2), ce qui nous donne dans le code :
- Ensuite, je copie les onglets du classeur initial vers le classeur crée
Voici ma problématique:
Ces onglets possèdent des macro en version userform et module. Le problème est que je n'arrive pas à copier ni le code d'un userform, ni celui d'un module vers le nouveau document.
Pour résumer, ma question est : Comment copier les macros des onglets sur un classeur nouvellement crée?
- Quand je lance la macro, un troisième classeur excel se crée en plus du classeur appelé "Synthèse Financière" & " " & Nom2 & " " & Nom1
- Ce troisième classeur contient bien contient bien ma macro du userfom. Je souhaiterais cependant que ce troisième classeur ne soit pas crée et que la macro soit directement copiée dans mon classeur "Synthèse Financière" & " " & Nom2 & " " & Nom1.
Voici la macro:
'activation du bouton valider'
Private Sub CommandButton_valider_Click()
'on cree et on renomme un nouveau classeur'
'création de l'objet excel'
Dim Nom1 As String
Dim Nom2 As String
Nom1 = TextBox_nom_de_la_societe
Nom2 = TextBox_nature_de_l_operation
'copie onglets'
Worksheets(Array(" Données initiales", " Liasse", "Contrôles liasses", "Retraitement", "Actif", "Passif", "Compte de résultat", "BFR", "Flux", "Ratios", "Synthèse")).Copy
'nomination du nouveau dossier'
ActiveWorkbook.SaveAs "Synthèse Financière" & " " & Nom2 & " " & Nom1
C'est ici que ca bug
'essai copie un userform'
Private Sub CommandButton1_Click()
Workbooks("AFI essai macro V3.xlsm").VBProject.VBComponents("Userform1").Expo rt "frmtoto"
Sheets(1).Copy
ActiveWorkbook.VBProject.VBComponents.Import "frmtoto"
'fermer le userform'
Unload UserForm_creation_synthese
'message enregistrement nouveau dossier'
Call MsgBox("Veuillez enregistrer ce dossier nouvellement crée", , "Nouvelle synthèse créée")
End Sub
Je vous remercie
Bonjour Devaux le forum
bon j'ai pas lu jusqu’au bout de ton post mais , je pense que tu as un souci car le fait de copier une feuille normalement le code est copié avec!!!
alors si tu peux passe moi ton fichier avec les explications dedans et je te regarde cela
a+
papou
Bonjour,
Voici mon document initial auquel j'y ai rajouté des explications sur le premier onglet
Je vous remercie
Charles
Pour information,
Ne vous inquiétez pas pour les liaisons, mes modèles ne sont pas encore définitifs, mais ce n'est pas la problématique aujourd'hui
Merci
Charles
Bonjour
En attendant la réponse de Paritec (que je salue)
Modification de la macroPrivate Sub CommandButton_valider_Click() dans le code de UserForm_creation_synthese
merci,
j'ai passé mon après midi dessus et ca a l"air de marcher ,
voici ce que j'ai modifié
Workbooks("AFI essai macro V4.xlsm").VBProject.VBComponents.Item("UserForm_ajouter_année").Export "essai"
ActiveWorkbook.VBProject.VBComponents.Import "essai"
Je vais regarder votre document avec attention vous avez surrement trouvé une solution plus intéréssante que la mienne
Je vous remercie
Charles
Bonjour Banzai64,
jai regardé votre dossier,
De ce que j'ai compris, la différence entre votre document et le mien et que vous précisez le nom de l'export avant, à savoir :
Nom = "c:\Userform_ajouter_année.frm"
WbkA.VBProject.VBComponents("Userform_ajouter_année").Export Nom
et là la macro plante et le message 'export ne fonctionne pas' s'affiche
En fait, je ne comprends pas cettre expression :
c:\Userform_ajouter_année.frm
dans Nom = "c:\Userform_ajouter_année.frm"
Est le nom ou l'adresse ? Si c'est l'adresse , comment cela se traduit il? Un fichier est il créé automatiquement ?
Cordialement
Charles
Bonjour
Même principe que tu utilises
Moi j'indique le chemin et le nom
J'ai testé chez moi avant de l'envoyer et j'obtiens bien un autre fichier avec les deux Usf
Pour info, Je te joins le fichier que j'ai obtenu
Edit:
Erreur de frappe (on ne voit pas les deux points ) mais c'est
Nom = "c:\Userform_ajouter_année.frm"
Bonsoir Banzaï
bon alors j'arrive après la bataille mais je vous salue tous les deux, et comme c'est résolu
a+
papou
Bonsoir Parictec
hé non ce n'est pas résolu
J'attends sa réponse
Mais si tu as une solution n'hésites pas
Amicalement
Bonjour Banzaï
bon alors je vais regarder de plus prêt ce que tu as déjà fait et proposé à Devaux
a+
papou
Bonjour Devaux Banzaï
bon alors le premier Userform c'est bien le Création Nouvelle Synthèse? si oui pourquoi ne pas faire une copie du classeur et après retirer la feuille "Création de Synthése" ?? là tu aurais toutes tes macros et Userform, et au besoin après tu fais le ménage.
Enfin c'est comme cela que je vois la chose, plus simple et plus rapide, qu'en pensez vous Charles et Banzaï (et les autres aussi)
a vous relire
a+
papou
Bonjour,
ca marche mais je n'arrive pas à tuer et supprmier ce fichier de transition appelé Nom.frx. Il se truve dans "mes documents" c'est embetant car l'utilisateur final sera étonné de retrouver ce fichier dans sesdocuments .
Je rencontre un autre problème. Le nouveau fichier crée est automatiquement enregistré dans mes documents en .xls. Je demande justement à l'utilisateur de l'enregistrer dans sur son ordinateur. Savez vous s'il est possible de faire en sorte pour ne pas que ce nouveau fichier créé s'enregistre automatiquement dans mes documents,?
je vous renvoie mon fichier excel
Cordialement
Charles
Bonjour
Regardes avec cette macro
Private Sub CommandButton_valider_Click()
'on cree et on renomme un nouveau classeur'
'création de l'objet excel'
Dim Nom1 As String
Dim Nom2 As String
Nom1 = TextBox_nom_de_la_societe
Nom2 = TextBox_nature_de_l_operation
'copie onglets'
Worksheets(Array(" Données initiales", " Liasse", "Contrôles liasses", "Retraitement", "Actif", "Passif", "Compte de résultat", "BFR", "Flux", "Ratios", "Synthèse")).Copy
'nommination du nouveau dossier
' Ajouter l'extension adéquate (ou avec SaveAs voir les options avec 2007)
ActiveWorkbook.SaveAs "Synthèse Financière" & " " & Nom2 & " " & Nom1 & ".xls"
'ajout des macro
Workbooks("AFI essai macro V4.xlsm").VBProject.VBComponents.Item("UserForm_ajouter_année").Export "Nom"
ActiveWorkbook.VBProject.VBComponents.Import "Nom"
Kill "Nom"
Kill "Nom.frx"
Workbooks("AFI essai macro V4.xlsm").VBProject.VBComponents.Item("Données_initiales").Export "Nom"
ActiveWorkbook.VBProject.VBComponents.Import "Nom"
Kill "Nom"
Workbooks("AFI essai macro V4.xlsm").VBProject.VBComponents.Item("UserForm_supprimer_année").Export "Nom"
ActiveWorkbook.VBProject.VBComponents.Import "Nom"
Kill "Nom"
Kill "Nom.frx"
'fermer le userform'
Unload UserForm_creation_synthese
' Sauvegarde du fichier crée et fermeture
With ActiveWorkbook
.Save
.Close
End With
End SubMerci Banzai64,
Ca marche, le fichier qui enregistre la macro nom ou nom.frx est bien supprimé. Merci pour ton aide.
J'ai rajouté Kill "Name.frx" après les "kill name
Par contre, j'ai toujours mon document crée en doublon dans mes document, je ne sias pas s'il y a un moyen de le supprimer. cela reste un détail.
Charle
Bonjour
Bizarre
devaux a écrit :j'ai toujours mon document crée en doublon dans mes document
J'ai fait des tests avec la macro modifiée et je n'ai qu'un seul fichier dans "Mes documents"
Quel nom porte le doublon ?
Vérifies bien
selon la fin de mon code, l'utilisateur enregistre son nouveau document dans le fichiers qu'il souhaite car j'active l'ouverture de l'onglet "enregistrer sous"
je souhaiterai dès lors pouvoir supprimer automatiquement mon document enregistré automatiquement qui se trouve dans mes documents pour éviter les doublons.
En effet, mon utilisateur n'enregistre son fichier dans mes documents mais directement dans le dossier de son choix
'ferme le usf si clique sur annuler'
Private Sub CommandButton_annuler_Click()
Unload Me
End Sub
'activation du bouton valider'
Private Sub CommandButton_valider_Click()
'on cree et on renomme un nouveau classeur'
'création de l'objet excel'
Dim Nom1 As String
Dim Nom2 As String
Dim Nom As String
Nom1 = TextBox_nom_de_la_societe
Nom2 = TextBox_nature_de_l_operation
'copie onglets'
Worksheets(Array(" Données initiales", " Liasse", "Contrôles liasses", "Retraitement", "Actif", "Passif", "Compte de résultat", "BFR", "Flux", "Ratios", "Synthèse")).Copy
'nommination du nouveau dossier'
ActiveWorkbook.SaveAs "Synthèse Financière" & " " & Nom2 & " " & Nom1
'ajout des macro
Workbooks("AFI essai macro V4.xlsm").VBProject.VBComponents.Item("UserForm_ajouter_année").Export "Nom"
ActiveWorkbook.VBProject.VBComponents.Import "Nom"
Kill "Nom"
Kill "Nom.frx"
Workbooks("AFI essai macro V4.xlsm").VBProject.VBComponents.Item("Données_initiales").Export "Nom"
ActiveWorkbook.VBProject.VBComponents.Import "Nom"
Kill "Nom"
Workbooks("AFI essai macro V4.xlsm").VBProject.VBComponents.Item("UserForm_supprimer_année").Export "Nom"
ActiveWorkbook.VBProject.VBComponents.Import "Nom"
Kill "Nom"
Kill "Nom.frx"
'fermer le userform'
Unload UserForm_creation_synthese
'message enregistrement nouveau dossier'
Call MsgBox("Veuillez enregistrer en format EXCEL PRENANT EN CHARGE LES MACRO", , "Important")
CommandBars(1).Controls(1).Controls(5).Execute
End Sub
Private Sub UserForm_Click()
End Sub