Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Sauvegarde dès l'ouverture fichier modèle (xltm) en fichier (xlsm ) avec modification code Workbook_Open

piga25

XLDnaute Barbatruc
Bonjour,
A partir du fichier modèle (main courante.xltm)
- j'aimerai qu'à l'ouverture de celui-ci on crée une copie (xlsm) dans le même répertoire en lui donnant le même nom (si on peut lui ajouter un 1 ou autre chose à la fin style (main courante 1.xlsm) cela serai parfait. Le tout sans que la boite de dialogue enregistrée sous apparaisse.
- à l'issue de cet enregistrement que le code de :
VB:
Private Sub Workbook_Open()
If Me.Path = ActiveWorkbook.Path Then
Application.Dialogs(xlDialogSaveAs).Show
If Me.Path = "" Then
Me.Saved = True
If Workbooks.Count = 1 Then Application.Quit Else Me.Close
End If
End If
End Sub

soit modifié comme ceci:

Code:
Private Sub Workbook_Open()
SauvegardePDF
End Sub

de manière à ce que si l'on ferme puis ouvre de nouveau le fichier seul la sauvegarde soit active dans ThisWorkbook
 

Pièces jointes

  • Main courante.xlsm
    26.5 KB · Affichages: 2

chris

XLDnaute Barbatruc
Bonjour
En principe on crée un classeur depuis un xlt.. et cela créer automatiquement un clone xls..qui porte par défaut le nom du modèle suivi d'un indice donc, sans coder, cela marche naturellement comme cela.

Il reste juste à coder l'enregistrement et un simple saveas suffit
 

piga25

XLDnaute Barbatruc
Bonjour Chris,
Effectivement un simple :
VB:
ActiveWorkbook.SaveAs FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Par contre j'ai un souci pour le chemin, il ne l'enregistre pas au même endroit que le fichier modèle, il le met par défaut dans : Documents
 

piga25

XLDnaute Barbatruc
Bonjour,
Oui c'est bien là tout mon problème.
Je me pose la question si je dois mettre le code dans thisworkbook et de lancer le code avec Workbook_Open (option 1) ou alors dans un module dont les codes se lanceraient par un clic sur un bouton (Option 2).
- Ce qui me plairait dans option 1, c'est que l'utilisateur n'aurait qu'à ouvrir le fichier modèle, ce dernier devant s'enregistrer automatiquement en xlsm dans le même répertoire et en conservant son nom de fichier avec un petit ajout pour le différencier du modèle et que ce fichier puisse être par la suite fermé et ouvert à volonté avec un code Workbook_Open modifié lors du 1er enregistrement.
Là je n'arrive pas à lui imposer le chemin lors du premier enregistrement automatique puis à modifier le code Workbook_Open (j'arrive seulement à le supprimer).

- Dans l'option 2, qui me semble peut plus facile à réaliser car les codes ne seront pas dans ThisWorkBook mais dans un module. Je fais des tests pour voir cela.
 

chris

XLDnaute Barbatruc
RE

Seul l'auteur du modèle est supposé ouvrir le modèle sinon n(importe qui le fout en l'air

Tout utilisateur est sensé créer un clone : d'ailleurs le double clic dans l'explorateur de fichier n'ouvre pas le modèle mais le clone.
Je ne vois ce qui t'empêche de définir le filename qui intègre le chemin...
 

piga25

XLDnaute Barbatruc
Je ne vois ce qui t'empêche de définir le filename qui intègre le chemin...
Justement c'est une fois ouvert le clone du fichier modèle que je n'arrive pas à créer le filename avec :
Bash:
chemin = ActiveWorkBook.bath
Pour bien faire il me faudrait le filename du fichier modèle

C'est un fichier qui va servir sur plusieurs ordinateurs et libre à chacun d'enregistrer dans leur dossier le fichier modèle.
 

chris

XLDnaute Barbatruc
RE
Un fichier non encore enregistré n'a pas de chemin...
Comme je l'indiquais on ne stocke pas les templates n'importe où donc normalement le dossier est connu et défini dans Excel.


Contrairement à Word il semble qu'un document Excel ne garde pas de lien avec son modèle.

Donc à part le nom et le dossier où sont stockés les modèles persos, on n'a pas de moyen de trouver
 

piga25

XLDnaute Barbatruc
Bonjour,

J'ai trouvé une solution.
- Peut importe ou est enregistré le fichier modèle.
- à L'ouverture du fichier , on créé un dossier sur le bureau puis on enregistre le fichier au format xlsm puis on modifie le code pour avoir un enregistrement normal lors des prochaines sauvegardes.

VB:
' Piga25 avec extrait code de Patricktoulon et de Job75
Sub SauvegardeFichier()
SauvegardePDF
End Sub

Sub TESTONS()
'Nom = enregistrer_sous_XLSM
'Variables
Dim chemin_dossier As String
'Identifier le chemin du dossier
chemin_dossier = "C:\Users\Admin\Desktop\Secours du " & Format(Date, "dd mmmm yyyy") & "\"
'tester son existance
If Dir(chemin_dossier, vbDirectory) <> vbNullString Then
'dossier existe, ne rien faire
Else
' si le dossier n'existe pas, le créer
MkDir (chemin_dossier)
End If
'message
MsgBox ("votre fichier sera enregistré sur votre bureau dans le répertoire Secours du (avec la date du jour)")
' enregistrement du fichier au format xlsm dans le répertoire créé
Nom = chemin_dossier & [E2].Value & " - " & Format(Date, "dddd dd mmmm yyyy")
If Nom <> "" Then ActiveWorkbook.SaveAs Filename:=Nom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub

Sub ModifCode()
Dim Debut As Integer, Lignes As Integer
With ThisWorkbook.VBProject.VBComponents("Module8").CodeModule
Debut = .ProcStartLine("SauvegardeFichier", 0)
Lignes = .ProcCountLines("SauvegardeFichier", 0)
.DeleteLines Debut + 1, Lignes - 1
.InsertLines 2, "sub SauvegardeFichier()"
.InsertLines 3, "SauvegardePDF"
.InsertLines 4, "End Sub"
End With

End Sub

'=================================================================================
'Copie originale du code sans le 1
Sub SauvegardeFichier1()
TESTONS
ModifCode
End Sub
'=================================================================================
 

patricktoulon

XLDnaute Barbatruc
Bonjour
perso il faudra m'expliquer le besoin d'enregistrer systématiquement le clone xlsm à l'ouverture du fichier modele
sachant que comme @chris à l'ouverture c'est un clone xlsm qui s'ouvre
te reste plus qu'a travailler dessus et à la fermeture enregistrer sous
perso c'est plutôt dans le beforeclose que je ferait ça avec un cancel true et un saveAS un nom + un repère date par exemple et un close sans displayalerts
comme ça c'est tout TOTOMATIC sans intervention de l'utilisateur
à méditer
 

piga25

XLDnaute Barbatruc
Bonjour
perso il faudra m'expliquer le besoin d'enregistrer systématiquement le clone xlsm à l'ouverture du fichier modele
Oui, pour ma part je travaille sur le clone puis je l'enregistre sous le bon format et dans le dossier que je souhaite.
Mais là, on m'impose d'agir de la sorte !!!! Pas toujours facile de satisfaire.
Je soumet cette version et je verrai bien ce qu'il en retournera.

Merci à vous pour ces explications et ces bouts de code.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…