J'ai effectué des recherches sur le net pour arriver à ceci : enregistrer un nouveau fichier ne comportant pas les macros du fichier d'origine et enregistrer le nouveau fichier dans le dossier qui contient le fichier de base et le tout avec un nom prédéterminé.
En clair :
1 - ouvrir un fichier pour exécuter des macros
2 - enregistrer le travail obtenu en *.xls
3 - enregistrer le nouveau fichier dans le dossier qui contient le fichier de base
4 - attribuer un nom automatiquement au nouveau fichier
Voici le code utilisé :
Code:
'Quitter & Enregistrer
Application.DisplayAlerts = False
UserForm1.Hide
Feuil1.Shapes("CommandButton1").Delete
With ActiveWorkbook.VBProject
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC
End With
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" _
& Format(Now, "yyyy-mm") & " - TCM" & ".xls"
Application.DisplayFullScreen = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Quit
Deux problèmes apparaissent :
1 - un beau message au moment de l'enregistrement du fichier : "Voulez-vous enregistrer les modifications que vous avez apportées à "aaaa-mm - TCM.xls" ?"
2 - lorsque je souhaite ouvrir le fichier qui est enregistré, j'ai le message suivant : "Le format ou l'extension du fichier "aaaa-mm - TCM.xls" ne correspondent pas. Le fichier peut présenter un risque ou avoir été endommagé. Ne l’ouvrez pas, à moins que la source soit fiable. Voulez-vous quand même l'ouvrir ?"
Mes questions sont les suivantes :
1 - comment ne pas avoir de message au moment de l'enregistrement ?
2 - comment éviter le message à l'ouverture du nouveau fichier sans macro ?
Je viens de testé en supprimant le bout de code permettant de supprimer les macros et en mettant le format de fichier en *.xlsx.
Donc oui, cela résout mon 1er problème ("Voulez-vous enregistrer les modifications que vous avez apportées à "aaaa-mm - TCM.xls" ?").
Mais le nouveau fichier sauvegardé comporte toujours les macros.
Le code propose d'enregistrer les modifications au fichier de base. Or le fichier de base ne doit pas être modifier.
Je clique donc sur "Ne pas enregistrer". Il y a effectivement un fichier en *.xlsm dans le répertoire mais avec les macros du fichier de base.
Je suis en train de gratter très très fort la tête car je comprend et j'ai fait ce que tu indiques mais sans succès.
Testes ma macro telle qu'elle apparait dans mon message dans un classeur vierge que tu enregistreras en toto.xlsm
Voici le résultat que tu obtiendras
Le fichier toto.xlsm ne sera pas fermé
et tu trouveras dans le répertoire où est enregistré toto.xlsm un fichier nommé 2014-12 - TM.xlsx
Ouvres alors ce fichier, et tu verras qu'il ne contient aucune macro.
Avec ta méthode de test, le fichier créer par la macro est illisible : "Impossible d'ouvrir le fichier "2014-12 - TCM.xlsx" car son format ou son extension n'est pas valide. Vérifiez que le fichier n'est pas endommagé et que son extension correspond bien au format du fichier.".
Houps! la boulette (j'avais pas vérifier les *.xlsx obtenu)
Que faire ?
Tester cette macro qui cette fois devrait fonctionner de A à Z
(Avant de tester supprimes les précédents *.xlsx)
Code:
Sub SaveNOMACROS()
Dim NFic$
NFic = ThisWorkbook.Path & "\" & Format(Date, "yyyy-mm") & " - TCM.xlsx"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=NFic, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
ActiveWorkbook.Close True
End Sub
D'ailleurs tel quel, cette macro ne peut fonctionner qu'une fois, car le nom est statique
Il faudrait ajouter l'heure pour éviter d'avoir le même nom de fichier
Donc avec l'heure dans le nom du fichier
(Testé en long et en large avant soumission)
Code:
Sub SaveNOMACROS_BIS()
Dim NFic$
NFic = ThisWorkbook.Path & "\" & Format(Now, "yyyy-mm_hhmmss ""-TCM.xlsx""")
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=NFic, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
ActiveWorkbook.Close True
End Sub
On obtient bien un fichier *.xlsx valide et donc sans macros.
Désolé pour les contretemps
(j'avais testé précédemment en direct live à partir de VBE sans prendre le soin d’ensuite réouvrir les fichiers *.xlsx générés)
Bah il suffit d'ajouter Application.Quit* à la place ActiveWorkBook.Close (*qui était dans ton code initial, non ?)
(sauf que je le déconseille fortement, imagine que le collaborateur a autre classeur ouvert, il risque de perdre ses modifs dans cet autre classeur.)
EDITION: Apparemment tu n'as pas vu ma macro avec modif pour éviter de créer un fichier avec un nom déjà existant Sub SaveNOMACROS_BIS()
Si je suis en plein sommeil paradoxal, c'est d'ailleurs pour cela que mon premier code pédalait dans la semoule parce qu'écrit dans les brumes du sommeil.
J'ai une question concernant le code d'enregistrement cité précédemment.
En effet, je viens de m’apercevoir que le fichier prend en compte la date du jour J.
Or j'ai besoin qu'il prenne en compte la date du jour J moins un mois ; soir : 07/01/15 - 30jours = 2014-12.
Est-ce possible ?
En clair, le fichier s'enregistre avec comme nom : 2015-01 - TCM.xlsx.
Or je souhaite qu'il s'enregistre ainsi : 2014-12 - TCM.xlsx