[RESOLU] - VBA - Enregistrer sous

FlorianN

XLDnaute Junior
Bonjour le forum,

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 ?


Vous remerciant d'avance pour votre aide.
 
Dernière édition:

FlorianN

XLDnaute Junior
Re : VBA - Enregistrer sous

Bonsoir Staple1600,

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.

SNIF SNIF
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Enregistrer sous

Re


Relis attentivement mon message
Tu écris :"aaaa-mm - TCM.xls or j'ai écrit enregister en *.xlsx

Et modifies en conséquence et tu verras que cela fonctionne.

En tout cas, cela fonctionne sur mon PC
Code:
Sub SaveNOMACROS()
Dim NFic$
NFic = ThisWorkbook.Path & "\" & Format(Date, "yyyy-mm") & " - TCM.xlsx"
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs NFic
Application.DisplayAlerts = True
End Sub

Un fichier *.xlsx ne contiendra jamais de macros, c'est contre sa nature ;)
 

FlorianN

XLDnaute Junior
Re : VBA - Enregistrer sous

A ta première question : non, pas d'affichage des extensions
2e question : oui
Voici le code que cela donne dans mon fichier
Code:
'Quitter & Enregistrer
UserForm1.Hide

Feuil1.Shapes("CommandButton1").Delete


Dim NFic$
NFic = ThisWorkbook.Path & "\" & Format(Date, "yyyy-mm") & " - TCM.xlsx"
Application.DisplayAlerts = False
ActiveWorkbook.SaveCopyAs NFic
Application.DisplayAlerts = True


Application.DisplayFullScreen = False

Application.ScreenUpdating = True

Application.Quit
End Sub

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.
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Enregistrer sous

Re


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.

C'est OK sur ton PC avec ce simple test ?
 

FlorianN

XLDnaute Junior
Re : VBA - Enregistrer sous

Bien...

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.".

Que faire ?
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Enregistrer sous

Re

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
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Enregistrer sous

[...SUITE...]

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 :p:eek:
(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)
 

FlorianN

XLDnaute Junior
Re : VBA - Enregistrer sous

Nickel chrome !!!

Le seul hic qu'il y a avec ce code, c'est qu'Excel ne se ferme plus.
En effet, je veux ; pour mes collaborateurs, que l'application se ferme.

Code:
'Quitter & Enregistrer
Application.DisplayAlerts = False

    UserForm1.Hide

    Feuil1.Shapes("CommandButton1").Delete



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



Application.DisplayFullScreen = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True

Application.Quit

PS : toi non plus tu ne dors pas ?
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Enregistrer sous

Re


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()

PS : toi non plus tu ne dors pas ?
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.
 
Dernière édition:

FlorianN

XLDnaute Junior
Re : VBA - Enregistrer sous

Bonsoir le fofo,

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

Voici la ligne de code concernée :
Code:
NFic = ThisWorkbook.Path & "\" & Format(Date, "yyyy-mm") & " - TCM.xlsx"
et le code complet
Code:
'Quitter & Enregistrer
Application.DisplayAlerts = False

    UserForm1.Hide

    Feuil1.Shapes("CommandButton1").Delete



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



Application.DisplayFullScreen = False
Application.ScreenUpdating = True
Application.DisplayAlerts = True

Application.Quit
 

Discussions similaires

Réponses
2
Affichages
98