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é.
Je ne sais pas trop comment m'y prendre. C'est pourtant l'enfance de l''art pour qui a lu la charte du forum
J'espère que c'est possible car l'avenir de mon projet réside dans cette possibilité. Oui c'est possible
Merci d'avance cordialement
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
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
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.