Forum Clubic

VBA Sauvegarde d'une copie d'un document avec Word

Salut,

Tout d’abord bonne année à tous.

J’ai un soucis avec une macro utilisé dans word.

Le but de celle-ci est qu’au moment de la fermeture du fichier (.doc) la macro s’exécute.Elle doit tout d’abord controler si je suis l’utilisateur et si c’est le cas me proposer de faire la sauvegarde d’une copie du document actif dans un répertoire pré-défini.
La raison étant que ces fichiers doivent être officiellement stockés sur un partage commun à beaucoup d’utilisateurs et que je souhaite faire une copie sur ma partition au cas où …

Tout semblait parfaitement fonctionner, mais arès plusieurs mois de fonctionnement, suite à une erreur, j’ai voulu récupérer une copie d’un fichier Word et …
… j’ai constaté que pour toutes les copies des documents word, il n’enregistrait que le modèle du document et rien de son contenu. Je me suis donc retrouvé chocolat.

En approfondissant, j’ai compris ce qui se passe. Mais je n’ai aucune idée de comment résoudre ceci.

A l’origine, j’ai créé un modèle de doucument contenant la macro (.dot). J’utilise ce modèle depuis lequel je créé mon “nouveau” document. Ensuite je sauve ce nouveau document sous un nouveau nom (.doc).

Lorsque je ré-ouvre ce nouveau document et que j’ouvre l’éditeur vba, je constate que pour lui, il y a 2 documents d’ouverts :

  • Mon “nouveau” document
  • Le modèle dont je suis parti

Et la macro ne se trouve pas dans le “nouveau” document, mais uniquement dans le modèle.

Histoire d’être plus clair, voici une illustration de l’éditeur lorsqu’à l’ouverture de word, j’ouvre uniquement le fichier “Essai.doc” et l’éditeur vba :

Ci dessous le code de ma macro. Quelqu’un voit-il comment corriger le problème ?

J’insiste juste sur le fait que la macro doit faire une copie de l’original (car j’ai la mauvaise habitude de sauver mes fichiers au moment où je les ferme lorsqu’il m’ouvre la boite de dialogue “ce fichier a été modifié, voulez-vous l’enregistrer”).

Merci d’avance pour votre aide.

Fab

Dans ThisDocument :

Private Sub Document_Close()
Dim Confirmation As Long

’ Quitte la macro si je ne suis pas l’utilisateur
If Environ(“UserName”) <> “Fab117” Then Exit Sub

nom = ActiveDocument.Name

’ Demande s’il faut enregistrer les modifications

Confirmation = MsgBox("Voulez vous enregistrer une copie du fichier " & nom & " ? ", vbYesNo)
If Confirmation = vbYes Then
ThisDocument.Save
’ Fait une copie
Dossier = "C:\Fab\Copie des documents "
Count = Len(ActiveDocument.Name)
nom = Left(ActiveDocument.Name, Count - 4)
strDate = Format(Date, “dd-mm-yy”) & " - " & Format(Time, “h-mm-ss”)

ThisDocument.SaveAs FileName:=Dossier & nom & " - " & strDate & “.doc”
End If

End Sub

Pourquoi ThisDocument.SaveAs et non ActiveDocument.SaveAs ?

Salut,
Merci pour ton intervention.
Je viens d’essayer avec ActiveDocumentSaveAs et le problème est que si je fais des modifs dans mon document et que comme dit plus haut je ferme le fichier sans l’avoir sauver au préalable, il va me demander en premier si je veux faire une copie et si je lui répond oui, il sauve la copie avec les modifications faites, mais ne me propose plus de sauver l’original dans le répertoire initial.

Et comme j’ai la mauvaise habitude de sauver mes modifications lorsqu’en fermant le doc, il me dit “vous avez fait des modifs, voulez-vous les sauver ?” …

Fab

Je ne suis pas sûr de comprendre exactement ton pb entre les cas où tu veux qu’il te demande de sauvegarder et les autres.
Mais en principe, l’évènement close() intervient avant la question sur la sauvegarde, donc ton code devrait marcher avec les modifs ci dessous :

[code]
Private Sub Document_Close()
Dim Confirmation As Long

’ Quitte la macro si je ne suis pas l’utilisateur
If Environ(“UserName”) <> “Fab117” Then Exit Sub

nom = ActiveDocument.Name
nomComplet = ActiveDocument.FullName

' Demande s'il faut enregistrer les modifications

Confirmation = MsgBox("Voulez vous enregistrer une copie du fichier " & nom & " ? ", vbYesNo)
If Confirmation = vbYes Then
ThisDocument.Save
' Fait une copie

Dossier = "C:\Fab\Copie des documents "
Count = Len(ActiveDocument.Name)
nom = Left(ActiveDocument.Name, Count - 4)
strDate = Format(Date, “dd-mm-yy”) & " - " & Format(Time, “h-mm-ss”)

ActiveDocument.SaveAs FileName:=Dossier & nom & " - " & strDate & ".doc"
ActiveDocument.SaveAs FileName:=nomComplet
End If

End Sub

Salut,
Merci pour ton aide.
Je viens de faire plusieurs essais avec ton code et tout semble concluant.
Au moment de la fermeture du fichier, il me demande dans tous les cas si je veux faire une copie du fichier.
Si je répond oui, alors il l’enregistre dans son répertoire d’origine et fait une copie dans le répertoire pré-défini. Puis il ferme le fichier.
Si je répond non, alors il regarde si j’ai fais des modifications et si c’est le cas me propose de les enregistrer dans le fichier d’origine avant de fermer le document.

En plus, la macro se trouvant dans le modèle du document et non dans le document lui même, je n’ai eu qu’à modifier le modèle et à le sauver sous le même nom. => tous les documents déjà existant auront la nouvelle macro à leur prochaine ouverture.

Par contre le risque et que si je supprime le modèle (ou ouvre le fichier depuis un autre PC), que se passera-t-il ?

Fab

Si c’est un vrai modele (un .dot) il faut vraiment le faire expres pour l’effacer. Dans ce cas, tu reviens a ta derniere sauvegarde sur CD ou DVD, peu de chances pour qu’il ait change entre temps
Si tu veux encore plus de securite, tu peux l’enregistrer en lecture seule

Sinon, si tu es sur un autre micro, tu n’as pas la macro, mais comme tu n’as pas non plus l’environnement pour sauvegarder, tout compte fait c’est aussi bien comme ca.

NB desole pour les accents, je suis sur un clavier UK

Bonjour GCC
La macro que tu as écrite pour Fab117 me convient très bien, mais je voudrais faire 2 remarques et poser une question :
Remarque 1 :
Je ne comprends pas à quoi sert la ligne “ThisDocument.Save” puisqu?il y a ensuite les 2 lignes “ActiveDocument.SaveAs” pour les 2sauvegardes
Remarque 2 :
J?ai inversé les 2 lignes “ActiveDocument.SaveAs” car sinon il me semble qu?on pert la date de création du document original.

Question :
Si on lance la macro, alors que le document concerné n?a jamais été sauvegardé, on ne maîtrise pas l?endroit où il est sauvegardé. Quelles seraient les lignes à rajouter dans la macro pour que s?ouvre une fenêtre qui demande où on veut le sauvegarder (comme avec la fonction classique “Enregistrer sous”) ?

Merci pour tes réponses

Ce n’est pas moi qui ai écrit la macro, c’est Fab117.
J’ai juste modifié les dernières lignes pour que ça marche. Et ça fait quand même plus de 10 ans …
N’ayant jamais eu le fichier, je n’ai jamais fait tourner la macro. Et donc pas vérifié que toutes les lignes de la partie originale étaient judicieuses. C’est à lui qu’il faudrait demander.

Pas vérifié, mais dans ce cas, ça ne m’étonnerait qu’à moitié que tu perdes ton répertoire par défaut.