IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

VBA Excel - Copier un classeur en utilisant la méthode SaveCopyAs au lieu de SaveAs ?
Un billet blog de Philippe Tulliez

Le , par Philippe Tulliez

0PARTAGES

Préambule
La copie d'un classeur est une opération courante dans de nombreux contextes.
L'objet Workbook offre la méthode SaveAs pour réaliser cette tâche, permettant de dupliquer un classeur tout en lui attribuant un nouveau nom et un emplacement différent.
Cependant, cette méthode présente un inconvénient : le classeur ainsi copié devient automatiquement le classeur actif. Cela peut poser problème lorsque nous souhaitons effectuer une copie avant d'entreprendre des modifications, de la maintenance ou le développement de nouvelles fonctionnalités, tout en conservant le classeur original comme actif.

La méthode SaveCopyAs offre une solution à ce problème, en permettant de réaliser une copie tout en gardant le classeur original actif. Cependant, bien qu'elle permette de changer l'emplacement du classeur, elle ne permet pas de modifier son nom.

Pour contourner cette limitation, j'ai développé une procédure générique qui effectue une copie du classeur et le renomme ensuite. Le nouveau nom est préfixé par la date (en format inversé) et l'heure de la copie, ce qui permet de réaliser plusieurs copies le même jour et de conserver un historique. C'est une solution pratique et efficace pour gérer les versions de vos classeurs.

Code de la procédure
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub MakeBackUp(Optional oWorkbook As Workbook)
  ' Effectue une copie du classeur défini par l'argument oWorkbook (d:ActiveOWorkbook)
  '   dans le sous-répertoire nommé BackUp
  '   La copie est renommée du nom du classeur avec comme préfixe la date inversée et l'heure
  ' Argument
  '  [oWorkbook] Nom du classeur à copier (ActiveWorkbook si pas précisé
  Const SubFolder As String = "\BackUp\"
  Dim FileName As String
  Dim FullName As String
  Dim FullPath As String
  Dim NewFileName As String
  Dim Path As String
  If oWorkbook Is Nothing Then Set oWorkbook = ActiveWorkbook
  With oWorkbook: FileName = .Name: Path = .Path: End With
  FullPath = Path & SubFolder
  FullName = FullPath & FileName
  NewFileName = FullPath & Format(Now, "yymmdd hhmm") & " - " & FileName
  ThisWorkbook.SaveCopyAs FullName ' Copie le classeur
  Name FullName As NewFileName     ' Renommer le fichier
End Sub
Cette procédure peut être invoquée par cette seule instruction si l'on souhaite copier le classeur actif
Code : Sélectionner tout
1
2
3
Sub TestMakeBackup()
  MakeBackUp
End Sub

Une erreur dans cette actualité ? Signalez-nous-la !