web-dev-qa-db-fra.com

VBA pour copier un fichier d'un répertoire à un autre

J'ai donc régulièrement copié un fichier d'accès dans un autre répertoire, en remplacement de la dernière version ... Je voudrais utiliser une macro Excel pour y parvenir et je souhaite également renommer le fichier par la suite.

Par exemple.

   fileName = "X:\Database\oldName.accdb"
   copyDestination = "Y:\dbstore\"
   newName = "newName.accdb"

Y a-t-il un moyen facile de faire ça?

35
harryg

Utilisez les méthodes appropriées dans Scripting.FileSystemObject. Ensuite, votre code sera plus portable sur VBScript et VB.net. Pour commencer, vous devez inclure:

Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")

Ensuite, vous pouvez utiliser 

Call fso.CopyFile(source, destination[, overwrite] )

où source et destination sont les noms complets (y compris les chemins) du fichier.

Voir http://msdn.Microsoft.com/en-us/library/aa711216(v=vs.71).aspx

55
Bathsheba

Cette méthode est encore plus facile si vous êtes d'accord avec moins d'options:

FileCopy source, destination
65
Jon

Une chose qui m'a causé beaucoup de maux de tête lors de l'utilisation de ce code ( pourrait affecter d'autres personnes et j'aimerais que quelqu'un ait laissé un commentaire comme celui-ci à lire ):

  • Mon objectif est de créer un tableau de bord à accès dynamique, ce qui nécessite la mise à jour de ses tables liées.
  • J'utilise les méthodes de copie décrites ci-dessus pour remplacer les CSV liés existants par une version mise à jour.
  • L'exécution manuelle du code ci-dessus à partir d'un module a bien fonctionné.
  • L'exécution d'un code identique à partir d'un formulaire lié aux données CSV comportait l'erreur d'exécution 70 (autorisation refusée), même si la première étape de mon code consistait à fermer ce formulaire (qui aurait dû déverrouiller le fichier CSV pour qu'il puisse être remplacé).
  • Je crois maintenant que, malgré la fermeture du formulaire, le fichier CSV obsolète reste verrouillé pendant l’exécution de VBA associé à ce formulaire.

Ma solution consistera à exécuter le code (événement On timer) à partir d'un autre formulaire masqué qui s'ouvre avec la base de données.

0
Galanor