Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Sauvegarde de mon classeur xltm dans un répertoire de sauvegarde

10 réponses
Avatar
Emile63
Bonjour =E0 tous,

Je souhaite sauver (r=E9guli=E8rement) mon classeur "Mod=E8le" avec macros =
sous sa forme originale (xltm), et non pas sous l'enregistrement par d=E9fa=
ut: xlsx

'-----------------------------------------------------
Dim NomSauve As String
On Error Resume Next
With Application
.StatusBar =3D "Ex=E9cution de macro"
.EnableEvents =3D False
.ScreenUpdating =3D False
.DisplayAlerts =3D False
.DefaultSaveFormat =3D xlTemplate ' xltm
End With
NomSauve =3D "C:\Users\Save\" & "Save_" & ActiveWorkbook.Name
ThisWorkbook.SaveCopyAs Filename:=3DNomSauve
With Application
.StatusBar =3D False
.EnableEvents =3D True
.DefaultSaveFormat =3D xlNormal 'retour au normal
.ScreenUpdating =3D True
.DisplayAlerts =3D True
End With
End Sub

'-----------------------------------------------------

Cette proc. ne fonctionnant pas, je m'en remets =E0 votre aide et suggestio=
ns.
En vous remerciant d'avance,=20
cordialement
Emile

10 réponses

Avatar
DanielCo
Bonjour,
"SaveCopyAs" ne peut pas changer le type du classeur. Utilise "SaveAs"
Cordialement.
Daniel

Bonjour à tous,

Je souhaite sauver (régulièrement) mon classeur "Modèle" avec macros sous sa
forme originale (xltm), et non pas sous l'enregistrement par défaut: xlsx

'-----------------------------------------------------
Dim NomSauve As String
On Error Resume Next
With Application
.StatusBar = "Exécution de macro"
.EnableEvents = False
.ScreenUpdating = False
.DisplayAlerts = False
.DefaultSaveFormat = xlTemplate ' xltm
End With
NomSauve = "C:UsersSave" & "Save_" & ActiveWorkbook.Name
ThisWorkbook.SaveCopyAs Filename:=NomSauve
With Application
.StatusBar = False
.EnableEvents = True
.DefaultSaveFormat = xlNormal 'retour au normal
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub

'-----------------------------------------------------

Cette proc. ne fonctionnant pas, je m'en remets à votre aide et suggestions.
En vous remerciant d'avance,
cordialement
Emile
Avatar
MichD
Bonjour,


'--------------------------------------------
Sub test()
Dim NomSauvegarde As String
Dim TypeFile As XlFileFormat

'En utilisant des variables au début de la procédure, cela
'facilite l'entretien des macros si un jour tu dois modifier
'la valeur d'une ce ces variables.

'Tu veux voir tous les formats disponibles...
'Sélectionne le symbole "=" de la ligne suivante et tape
'à nouveau le signe "=", tu auras droit à une liste déroulante
'affichant tous les formats possibles!
TypeFile = xlOpenXMLTemplateMacroEnabled
NomSauvegarde = "c:UsersMichDDocumentsMonFichier.xltm"

'Depuis Excel 2007, si tu utilises la méthode "Save" ou "SaveAs",
'Tu dois définir le paramètre FileFormat, tu n'as pas besoin
'de modifier la valeur par défaut dans les options d'Excel.
Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=NomSauvegarde, FileFormat:=TypeFile
Application.DisplayAlerts = True
End Sub
'--------------------------------------------
Avatar
Emile63
Bonjour Michel et Daniel,

Et merci pour vos solutions.

MichD,

J'ai bien compris l'idée, mais ça coince quelque part...
Quand je recherche le fichier à travers l'explorateur, il appairait bien avec la bonne extension, mais (étrangement) il ne pèse que 177ko au lie u des 600 ko de l'original et d'autre part, quand je le double clic ou tent e de l'ouvrir, un message m'indique qu'il est impossible d'ouvrir une copie tant que le modèle "xxx" est ouvert, alors qu'il est bien fermé. Y co mpris quand Excel est complètement fermé.

DanielCo,

En remplaçant SaveCopyAs par SaveAs, ça ne fonctionne pas mieux.
Un message d'erreur d'exécution 1004 m'indique qu'il est impossible d'uti liser cette extension avec le type de fichier sélectionné.
Modifiez l'extension du fichier etc.....


En vous remerciant d'avance si vous avez une autre suggestion. :-)
Très bonne journée,
Cordialement,
Emile
Avatar
DanielCo
DanielCo,

En remplaçant SaveCopyAs par SaveAs, ça ne fonctionne pas mieux.
Un message d'erreur d'exécution 1004 m'indique qu'il est impossible
d'utiliser cette extension avec le type de fichier sélectionné. Modifiez
l'extension du fichier etc.....



Je t'ai dit :
"SaveCopyAs" ne peut pas changer le type du classeur. Utilise "SaveAs"


C'était évidemment pour te permettre de changer le type du fichier.
Daniel
Avatar
MichD
En tenant compte du commentaire de Daniel,

La macro que je t'ai fournie fonctionne. Évidemment elle utilise "SaveAs".

Si tu veux retrouver le fichier original à l'écran après avoir
enregistré une copie de sauvegarde, essaie ceci :


'-------------------------------------------------------
Sub test()
Dim NomSauvegarde As String, Wk As Workbook
Dim TypeFile As XlFileFormat, X As String

'En utilisant des variables au début de la procédure, cela
'facilite l'entretien des macros si un jour tu dois modifier
'la valeur d'une ce ces variables.

'Tu veux voir tous les formats disponibles...
'Sélectionne le symbole "=" de la ligne suivante et tape
'à nouveau le signe "=", tu auras droit à une liste déroulante
'affichant tous les formats possibles!
TypeFile = xlOpenXMLTemplateMacroEnabled
NomSauvegarde = "c:UsersMichDDocumentsMonFichier.xltm"

'Depuis Excel 2007, si tu utilises la méthode "Save" ou "SaveAs",
'Tu dois définir le paramètre FileFormat, tu n'as pas besoin
'de modifier la valeur par défaut dans les options d'Excel.
Application.DisplayAlerts = False
Application.ScreenUpdating = False
With ThisWorkbook
'Mets dans une variable chemin et nom du fichier en cours
X = ThisWorkbook.FullName
'sauvegarde avant de faire l'enregistrement sous format modèle
.Save
'sauvegarde la copie du fichier au titre de modèle
.SaveAs Filename:=NomSauvegarde, FileFormat:=TypeFile
End With
'Après sauvegarde, c'est le fichier modèle qui est le
'fichier actif à l'écran
Set Wk = ThisWorkbook
'Ouverture du fichier originale
Workbooks.Open X
'Fermeture du fichier modèle
Wk.Close
'Libération de la mémoire occupée par l'objet Wk
Set Wk = Nothing
Application.DisplayAlerts = True
Application.ScreenUpdating = False
End Sub
'-------------------------------------------------------


MichD
Avatar
Emile63
Evidemment, je ne serais pas là à demander de l'aide, si j'avais tout b ien compris :-)

MichD:
Avec cette nouvelle mouture, ca plante toujours à ce niveau là:

.SaveAs Filename:=NomSauvegarde, FileFormat:=TypeFile

Même type de msg que décrit auparavant, Et je suis bien sous XL 2007

Je vais laisser tomber pour ce soir, peut-être que demain ca ira mieux :- )
Merci pour votre aide et bonne soirée.
Cordialement,
Emile
Avatar
MichD
Cette procédure a été testée sur une version Excel 2016 et je n'ai noté
aucun problème particulier.

Je te fais remarquer que la valeur de cette variable :

NomSauvegarde = "c:UsersMichDDocumentsMonFichier.xltm"

J'espère que tu as adapté le chemin et le nom du fichier selon ton
application. Le copier-coller n'est pas suffisant, il faut prendre le
temps de lire la procédure et de l'adapter le cas échéant.
Avatar
HB
Bonsoir,

La version d'Excel n'est pas citée
mais je suppose que c'est au moins 2007 ;o)

Dans l'énumération des valeurs de XlFileFormat
je vois (msdn) xlWorkbookNormal mais pas xlNormal
(c'est pour 2013 et au delà ;o)

Par ailleurs, je ne comprends pas pourquoi
modifier le format par défaut.

La méthode saveAs permet aussi de choisir le format :

https://msdn.microsoft.com/fr-fr/library/office/ff841185.aspx

Il me semble que ce serait plus naturel.

... ou alors je n'ai pas compris la demande ...
... ce qui est possible ;o)

Cordialement,

HB


Le 03/03/2016 14:48, Emile63 a écrit :
Bonjour à tous,

Je souhaite sauver (régulièrement) mon classeur "Modèle" avec macros sous sa forme originale (xltm), et non pas sous l'enregistrement par défaut: xlsx

'-----------------------------------------------------
Dim NomSauve As String
On Error Resume Next
With Application
.StatusBar = "Exécution de macro"
.EnableEvents = False
.ScreenUpdating = False
.DisplayAlerts = False
.DefaultSaveFormat = xlTemplate ' xltm
End With
NomSauve = "C:UsersSave" & "Save_" & ActiveWorkbook.Name
ThisWorkbook.SaveCopyAs Filename:=NomSauve
With Application
.StatusBar = False
.EnableEvents = True
.DefaultSaveFormat = xlNormal 'retour au normal
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub

'-----------------------------------------------------

Cette proc. ne fonctionnant pas, je m'en remets à votre aide et suggestions.
En vous remerciant d'avance,
cordialement
Emile





---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
MichD
Bonjour,

À cette adresse, la liste des formats de fichier d'Excel 2007.
https://msdn.microsoft.com/en-us/library/bb241279(v=office.12).aspx

Sauf erreur, je n'ai pas vu le format "XlNormal".

Pour ce qui est des versions plus anciennes, ce format existait
peut-être, mais je ne peux pas vérifier et Microsoft ne supporte plus
cette version d'Excel.
Avatar
HB
Bonjour,

Il est hautement probable que le message d'origine
ne concerne pas une version très ancienne
sinon le format xltm n'existerait pas ;o)

(y'a qqchose entre 2003 et 2007 ?)

Donc, dans la macro,
il faut sans doute changer xlnormal en xlWorkbookNormal.

Reste à savoir pourquoi l'auteur (Emile63)
n'utilise pas les possibilités de SaveAs
pour imposer simplement
un changement de format.

Cordialement,

HB




Le 04/03/2016 00:13, MichD a écrit :
Bonjour,

À cette adresse, la liste des formats de fichier d'Excel 2007.
https://msdn.microsoft.com/en-us/library/bb241279(v=office.12).aspx

Sauf erreur, je n'ai pas vu le format "XlNormal".

Pour ce qui est des versions plus anciennes, ce format existait
peut-être, mais je ne peux pas vérifier et Microsoft ne supporte plus
cette version d'Excel.




---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus