Créer macro WORKBOOK dans nouveau classeur

chris6999

XLDnaute Impliqué
Bonjour

Je souhaiterais ajouter un code dans un fichier créé sur copie d'une feuille

Mon fichier initial crée un fichier et l'enregistre

Sub CREATION_DU_FICHIER()

Application.DisplayAlerts = False
'enregsitre la copie de la feuille

Dim Chemin As String, Fichier As String
Chemin = "mon chemin"
Nom = "mon nom"
extension = ".xlsm"
Sheets("ma feuille").Copy
ActiveWorkbook.SaveAs Filename:=Chemin & Nom & extension , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

Application.DisplayAlerts = True
End Sub

Je souhaiterais intégrer à ce nouveau fichier un code qui se lancera lors de l'ouverture
Cela permettra aux utilisateur de consulter un fichier provisoire sans rester sur le nouveau fichier créé.
Il faudrait donc mettre ce code dans le WORKBOOK au moment de l'enregistrement.

Private Sub Workbook_Open()
Application.DisplayAlerts = False
Sheets("ma feuille").Copy
Dim Chemin As String, Fichier As String
Chemin = "mon nouveauchemin"
Nom = "mon nouveau nom"
extension = ".xlsm"
'enregsitre la copie de la feuille
ActiveWorkbook.SaveAs Filename:=Chemin & Nom & extension, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
ThisWorkbook.Close true
'Application.DisplayAlerts = True
End Sub

Je ne sais pas trop comment m'y prendre.
J'espère que c'est possible car l'avenir de mon projet réside dans cette possibilité.

Merci d'avance cordialement
 

Pièces jointes

  • test fichier ouverture.xlsm
    16.5 KB · Affichages: 27

chris6999

XLDnaute Impliqué
Bonjour le FORUM

Il va de soi qu'avant de poster je fais des recherches préalables pour trouver la solution par moi même.
Mais dans le cas précis je n'ai pas trouvé de fils en adéquation avec ma problématique (où alors j'ai peut-être mal cherché...vraiment pas douée du coup!).

Hier soir j'ai trouvé un code qui pourrait faire son office si je n'avais pas quelques bug.
Voici ce que j'ai mis sur le WORKBOOK before save pour ceux que cela intéresserait.

Mon fichier finalisé en PJ

Bonne soirée à tous


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

'CODE A METTRE DANS LE Private Sub Workbook_BeforeSave

Application.DisplayAlerts = False
'enregistre la copie de la feuille sur un chemin accessible aux utilisateurs

Dim Chemin As String, Fichier As String
Chemin = "D:\UTILISATEURS\UR91700048\Desktop\" 'mon chemin où s'enregistre la copie
Nom = "Nouveau fichier créé" 'nouveau nom à donner au fichier à partir de la feuille copiée
extension = ".xlsm"
Sheets("mafeuille").Copy 'nom de la feuille dans le fichier d'origine
ActiveWorkbook.SaveAs Filename:=Chemin & Nom & extension, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

'ce code va s'incrémenter dans le Private Sub Workbook_Open du nouveau fichier créé
'ainsi ' l'ouverture de ce nouveau fichier créé le système va créer une autre copie dans les fichiers temporaires
'l'utilisateur ne travaillera pas sur le nouveau fichier mais sur la copie du nouveau fichier

Dim CODE(10)
CODE(0) = "Private Sub Workbook_Open()"
CODE(1) = "Dim Chemin As String, Nom As String, extension As String"
CODE(2) = "Application.DisplayAlerts = False"
CODE(3) = "Sheets(""mafeuille"").Copy" '
CODE(4) = "Chemin = ""C:\TEMP\""" 'à l'ouverture crée une copie dans fichiers temporaires
CODE(5) = "Nom = ""Copie de mon Nouveau fichier créé"""
CODE(6) = "extension = "".xlsm"""
CODE(7) = "ActiveWorkbook.SaveAs Filename:=Chemin & Nom & extension, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False"
CODE(8) = "ThisWorkbook.Close True"
CODE(9) = "Application.DisplayAlerts = True"
CODE(10) = "End sub"
For i = 0 To 10
s = s & CODE(i) & Chr(10)
Next
Set MyVB = Workbooks("Nouveau fichier créé.xlsm").VBProject.VBComponents("ThisWorkBook").CodeModule
MyVB.AddFromString s

Application.DisplayAlerts = True

'après avoir enregistré le nouveau fichier il le ferme
Workbooks("Nouveau fichier créé.xlsm").Close SaveChanges:=True

End Sub
 

Pièces jointes

  • Copie de test fichier ouverture.xlsm
    22.9 KB · Affichages: 20

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Bonjour le FORUM
Il va de soi qu'avant de poster je fais des recherches préalables pour trouver la solution par moi même.
Cela irait de soi si c'était clairement indiqué dans le premier message ;)
Or ceci
Je ne sais pas trop comment m'y prendre.
J'espère que c'est possible car l'avenir de mon projet réside dans cette possibilité.
est bien loin de vouloir dire:
"Malgré mes recherches dans les archives du forum et sur le web, je ne trouve pas comment faire pour ..."

Un exemple de discussion pouvant mettre sur la piste
(lien trouvé avec la recherche présente dans mon premier message)
https://www.excel-downloads.com/threads/vba-problème-avec-la-fonction-addfromstring.20016006/
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Ceci dit je ne comprends pas pourquoi tu veux faire une copie d'une copie du classer actif ??

Sinon, si j'étais moi, j'écrirai ta macro de cette façon
VB:
Sub Macro1()
Dim Chemin As String, Fichier As String
Chemin = "C:\abcd\" 'à modifier avec le vrai chemin
Fichier = Chemin & ".xlsm"
Sheets("ma feuille").Copy
'enregsitre la copie de la feuille
ActiveWorkbook.SaveAs Fichier, 52
ThisWorkbook.Close True
End Sub
 

chris6999

XLDnaute Impliqué
Je te remercie Staple1600 d'avoir pris le temps de me faire une proposition.

En effet le fait de vouloir générer une copie d'une copie peut paraître étrange.
En fait le fichier de départ est régulièrement mis à jour.
Une vue partielle de ce fichier (donc ma fameuse feuille copiée) est en consultation d'un autre groupe d'utilisateur.
Lors d'une mise de mon classeur initial je souhaite également mettre à jour mon fichier de consultation.
Sauf que si mon groupe d'utilisateur est déjà dessus cette mise à jour ne sera pas possible.
C'est pourquoi j'ai prévu un code qui à l'ouverture de ce fichier de consultation crée une nouvelle copie qui s'enregistre dans les fichiers temporaires et ferme le fichier consultation.
Du coup mon fichier consultation n'est pas occupé et peut être mis à jour...
C'est un peu tiré par les cheveux mais je ne vois pas comment faire autrement pour l'instant.

Concernant mes recherches préalables avant de poster, je le mentionne rarement car cela me semble la moindre des choses à faire avant de faire appel aux lumières et à l'investissement des spécialistes du FORUM. Question de savoir vivre sans doute.
En général je me rabats sur le FORUM au bout de plusieurs heures de recherche mais il faut dire que mon niveau VBA (plus que limité) rend difficile l'adaptation de certains codes car illisibles pour moi.

J'essaierai d'être plus exhaustive dans mes prochains messages et je n'omettrai pas de préciser que mes recherches n'ont pas abouti.

Je te souhaite une bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
312 109
Messages
2 085 386
Membres
102 880
dernier inscrit
ADEL N