Imposer l'enregistrement d'1 classeur en .xls

white-spirit

XLDnaute Occasionnel
Re-Bonjour tt le monde,

j'ai essayé ce matin de trouver de l'aide pour utiliser un convertisseur de format dans du code vba, mais je n'ai pas eu de réponse, pas grave !!

J'essaie alors ceci:

je confie un fichier .xls créé avec Excel 2002 (contient des macros) à des tiers, qui me le renvoient renseigné, mais il arrive qu'ils me l'enregistrent en .xlsm (Excel 2007-2013).
Ils ne respectent pas souvent la consigne d'enregistrer en format .xls pour Excel 97-2003.

D'où l'idée de mettre une instruction dans le workbook du fichier pour imposer l'enregistrement en .xls et à la bonne version. Je sais qu'il faut utiliser la procédure BeforeSave, et j'essaie avec le code suivant:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim nom As String
Dim épreuve As String
Dim chemin As String

épreuve = Range("C1").Text
nom = "Liste des engagés " & épreuve
chemin = ThisWorkbook.Path & "\" & nom
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=chemin, FileFormat:=56

d'après mes recherches, 56 pour fileformat correspond au cde .xls version 97-2003

en mode pas à pas, tt va bien jusqu'à la commande "activeworkbook.saveas........" ou j'ai l'erreur "La méthode SaveAs de lobjet Workbook à échoué"

si je supprime l'instruction FileFormat, ça fonctionne, mais si je modifie la variable "épreuve", Excel plante !!

Quelqu'un aurait-il déja pratiqué ce type d'instructions ?? Merci d'avance.

Cordialement

WS
 

job75

XLDnaute Barbatruc
Re : Imposer l'enregistrement d'1 classeur en .xls

Bonjour,

Quelle que soit la version Excel utilisée le fichier sera enregistré en .xls :

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim chemin$, nom$
Cancel = True
chemin = Me.Path & "\"
nom = Left(Me.Name, InStrRev(Me.Name, ".") - 1) 'nom sans l'extension
Application.DisplayAlerts = False
Application.EnableEvents = False
Me.SaveAs chemin & nom, IIf(Val(Application.Version) < 12, xlNormal, 56)
Application.EnableEvents = True
End Sub
A+
 

white-spirit

XLDnaute Occasionnel
Re : Imposer l'enregistrement d'1 classeur en .xls

Merci bien Ralph45 & Job75,

j'ai réussi en précisant l'extension comme suggéré...

pour contourner le cas ou ma variable "épreuve" change, j'ai choisi de passer par 2 voies distinctes:

- si pas de chgt, alors Activeworkbook.save tout simplement
- si ça change, alors Activeworkbook.saveas, puis j'ouvre cette copie et je ferme l'autre avec vba.

C'est un peu "cappilotracté" comme méthode, et j'espère que ça fonctionne avec un Excel 2007-2013, sinon j'utiliserais la solution de Job75.

Merci encore pour votre aide .

Cordialement

WS
 

Discussions similaires

Réponses
19
Affichages
2 K
Réponses
7
Affichages
429

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren