XL 2010 Enregistrer/Enregistrer Sous en .xlsm Nom et emplacement libre

Orson83

XLDnaute Impliqué
Bonsoir à tous,
Je souhaiterai que mon classeur se ferme en forçant le format .xlsm. J'ai inséré une macro dans ThisWorkBook mais celle-ci m'oblige à nommer mon classeur Faux.xlsm et si je fais Enregistrer Sous, message d'erreur avec boite de débogage.
Idéalement, j'aimerai pouvoir Enregistrer/Enregistrer Sous, ou je veux, avec le nom que je souhaite (en .xlsm uniquement).
Voici une macro que j'essaye de modifier sans succès :
VB:
'FORCE L'UTILISATEUR A ENREGISTRER EN .xlsm AVEC LES MACROS
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    'On Error GoTo Fin ' Si fenêtre de débogage
Dim xFileName As String
If SaveAsUI <> False Then
    Cancel = True
    xFileName = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm", , "Save As xlsm file") 'Peut-on mettre "Excel Macros activées(*.xlsm), *.xlsm" ?
    Application.DisplayAlerts = False
    If xFileName <> "False" Then
      Application.EnableEvents = False
      ActiveWorkbook.SaveAs Filename:=xFileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
      Application.EnableEvents = True
    'Else
      'MsgBox "Action annulée" ' Il n'y a pas besoin de message
      Cancel = True
    End If
End If
'Fin: ' Fin de débogage
End Sub
Merci pour votre aide, j'arrive au bout de mes réglages, ouff ! 🤪 🤪
Tchotchodu31
 
Solution
Le forum,
A l'enregistrement XL me propose toujours Faux.xlsm, mais j'ai trouvé cette macro pour pouvoir annuler sans plantage. Serait-il possible, soit de remplacer ce "Faux.xlsm" par le nom actuel de mon fichier, soit de proposer un nom du style "Mon projet.xlsm" ?
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FileNameVal As String
If SaveAsUI Then
    FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
    Cancel = True
    If FileNameVal = CStr(False) Then 'User pressed cancel
        Exit Sub
    End If
    Application.EnableEvents = False
        If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
            ThisWorkbook.SaveAs Filename:=FileNameVal &...

Rouge

XLDnaute Impliqué
Votre macro
"Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)"

et ce que j'ai écrit:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Vous trouvez que c'est pareil?

Le code
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'On Error GoTo Fin ' Si fenêtre de débogage
    Dim xFileName As String
    Cancel = True
    xFileName = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm", , "Save As xlsm file") 'Peut-on mettre "Excel Macros activées(*.xlsm), *.xlsm" ?
    Application.DisplayAlerts = False
    If xFileName <> "False" Then
        Application.EnableEvents = False
        ActiveWorkbook.SaveAs Filename:=xFileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        Application.EnableEvents = True
        'Else
        'MsgBox "Action annulée" ' Il n'y a pas besoin de message
        Cancel = True
    End If
'Fin: ' Fin de débogage
    Application.Quit
End Sub
 

Orson83

XLDnaute Impliqué
Votre macro
"Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)"

et ce que j'ai écrit:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Vous trouvez que c'est pareil?

Le code
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'On Error GoTo Fin ' Si fenêtre de débogage
    Dim xFileName As String
    Cancel = True
    xFileName = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm", , "Save As xlsm file") 'Peut-on mettre "Excel Macros activées(*.xlsm), *.xlsm" ?
    Application.DisplayAlerts = False
    If xFileName <> "False" Then
        Application.EnableEvents = False
        ActiveWorkbook.SaveAs Filename:=xFileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        Application.EnableEvents = True
        'Else
        'MsgBox "Action annulée" ' Il n'y a pas besoin de message
        Cancel = True
    End If
'Fin: ' Fin de débogage
    Application.Quit
End Sub
...
Effectivement, la première ligne est différente, désolé je n'avais pas compris.
Je viens de tester votre macro mais quand je fais Enregistrer Sous, Excel m'oblige à nommer mon fichier Faux.xlsm et si je clique sur NON, je ne peux plus fermer Excel.
J'aimerai avoir la liberté de nommer ou pas mon fichier et de pourvoir l'enregistrer ou je le souhaite.
 

Orson83

XLDnaute Impliqué
Le forum,
A l'enregistrement XL me propose toujours Faux.xlsm, mais j'ai trouvé cette macro pour pouvoir annuler sans plantage. Serait-il possible, soit de remplacer ce "Faux.xlsm" par le nom actuel de mon fichier, soit de proposer un nom du style "Mon projet.xlsm" ?
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FileNameVal As String
If SaveAsUI Then
    FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
    Cancel = True
    If FileNameVal = CStr(False) Then 'User pressed cancel
        Exit Sub
    End If
    Application.EnableEvents = False
        If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
            ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
        Else
            ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        End If
    Application.EnableEvents = True
End If
End Sub
Merci pour votre aide.
 

Rouge

XLDnaute Impliqué
Avec ceci, le fichier est enregistré sous "MonProjet.xlsm"
VB:
ThisWorkbook.SaveAs Filename:="Mon projet.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

Si vous voulez enregistrer avec le nom du classeur
Code:
NomClasseur = ThisWorkbook.Name
ThisWorkbook.SaveAs Filename:=NomClasseur & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
 

Orson83

XLDnaute Impliqué
Avec ceci, le fichier est enregistré sous "MonProjet.xlsm"
VB:
ThisWorkbook.SaveAs Filename:="Mon projet.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

Si vous voulez enregistrer avec le nom du classeur
Code:
NomClasseur = ThisWorkbook.Name
ThisWorkbook.SaveAs Filename:=NomClasseur & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
Merci Rouge pour cette info.
Malgré mes tentatives, je ne vois pas ou placer ces lignes dans le code (nom de mon classeur) :
VB:
NomClasseur = ThisWorkbook.Name
ThisWorkbook.SaveAs Filename:=NomClasseur & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
Un dernier petit coup de pouce, Merci ;)
 

Orson83

XLDnaute Impliqué
Merci Rouge pour cette info.
Malgré mes tentatives, je ne vois pas ou placer ces lignes dans le code (nom de mon classeur) :
VB:
NomClasseur = ThisWorkbook.Name
ThisWorkbook.SaveAs Filename:=NomClasseur & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
Un dernier petit coup de pouce, Merci ;)
...
Finalement je vais garder la dernière version du code du post #6.
Merci Rouge pour ta participation 👍 ;)
Bonne journée.
Tchotchodu31
 

Rouge

XLDnaute Impliqué
Malgré mes tentatives, je ne vois pas ou placer ces lignes dans le code (nom de mon classeur) :

Exemple:

VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim FileNameVal As String
    NomClasseur = ThisWorkbook.Name
    If SaveAsUI Then
        FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
        Cancel = True
        If FileNameVal = CStr(False) Then 'User pressed cancel
            Exit Sub
        End If
        Application.EnableEvents = False
            If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
                ThisWorkbook.SaveAs Filename:=NomClasseur & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
            Else
                ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            End If
        Application.EnableEvents = True
    End If
End Sub
 

Rouge

XLDnaute Impliqué
Malgré mes tentatives, je ne vois pas ou placer ces lignes dans le code (nom de mon classeur) :

Exemple:

VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim FileNameVal As String
    NomClasseur = ThisWorkbook.Name
    If SaveAsUI Then
        FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
        Cancel = True
        If FileNameVal = CStr(False) Then 'User pressed cancel
            Exit Sub
        End If
        Application.EnableEvents = False
            If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
                ThisWorkbook.SaveAs Filename:=NomClasseur & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
            Else
                ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            End If
        Application.EnableEvents = True
    End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 939
Membres
101 844
dernier inscrit
pktla