Déplacer un document Word (.docm) VBA
Résolu
Danny
-
m@rina Messages postés 27665 Date d'inscription Statut Modérateur Dernière intervention -
m@rina Messages postés 27665 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à toutes et à tous,
J'essaye à ce jour de déplacer un document word via VBA. Il s'agit de déplacer un document A grâce à un bouton placé dans ce document-même A (et non pas de déplacer un document B a partir d'un document A).
Pour ce faire, je pensais d'abord copier ce document dans l'emplacement emplacementFinal puis de le supprimer de l'emplacement emplacementInitial. Code :
Public Sub Deplacer()
Dim chemin As String
chemin = emplacementFinal
If MsgBox("Êtes-vous sûre de vouloir effectuer cette opération ? Si oui, vous pourrez retrouver ce document a l'emplacement ....", vbYesNoCancel) = vbYes Then
ActiveDocument.SaveAs2 fileName:=chemin & ActiveDocument.Name
End If
End Sub
Public Sub SupprimerCeDocument()
Dim MyFile As String
MyFile = ancienChemin & ActiveDocument.Name
If MsgBox(MyFile & " will be deleted permanently", vbYesNo, "Delete this File?") = vbYes Then
ActiveDocument.Close (wdDoNotSaveChanges)
Kill MyFile
End If
End Sub
Je souhaite donc apeller Deplacer puis SupprimerCeDocument. Problème 1 : Quand jappel la fonction "deplacer" le fichier ne s'enregistre pas comme je le voudrais c'est à dire que la fenêtre me demendant où je souhaite enregistrer le document s'ouvre. Probleme 2 : Quand j'appel la fonction SupprimerCeDocument le document ne se supprime pas. J'ai pourtant vérifié les chemins avec des msgBox.
Auriez vous des solutions (éventuellement plus simples ?) pour faire cela ?
Vous souhaitant une bonne journée,
Danny
J'essaye à ce jour de déplacer un document word via VBA. Il s'agit de déplacer un document A grâce à un bouton placé dans ce document-même A (et non pas de déplacer un document B a partir d'un document A).
Pour ce faire, je pensais d'abord copier ce document dans l'emplacement emplacementFinal puis de le supprimer de l'emplacement emplacementInitial. Code :
Public Sub Deplacer()
Dim chemin As String
chemin = emplacementFinal
If MsgBox("Êtes-vous sûre de vouloir effectuer cette opération ? Si oui, vous pourrez retrouver ce document a l'emplacement ....", vbYesNoCancel) = vbYes Then
ActiveDocument.SaveAs2 fileName:=chemin & ActiveDocument.Name
End If
End Sub
Public Sub SupprimerCeDocument()
Dim MyFile As String
MyFile = ancienChemin & ActiveDocument.Name
If MsgBox(MyFile & " will be deleted permanently", vbYesNo, "Delete this File?") = vbYes Then
ActiveDocument.Close (wdDoNotSaveChanges)
Kill MyFile
End If
End Sub
Je souhaite donc apeller Deplacer puis SupprimerCeDocument. Problème 1 : Quand jappel la fonction "deplacer" le fichier ne s'enregistre pas comme je le voudrais c'est à dire que la fenêtre me demendant où je souhaite enregistrer le document s'ouvre. Probleme 2 : Quand j'appel la fonction SupprimerCeDocument le document ne se supprime pas. J'ai pourtant vérifié les chemins avec des msgBox.
Auriez vous des solutions (éventuellement plus simples ?) pour faire cela ?
Vous souhaitant une bonne journée,
Danny
2 réponses
-
Bonjour,
Tu es en train d'essayer de supprimer un document ouvert via une macro contenue dans ce document... Tu comprends que ce n'es pas logique.
Pour supprimer un document ouvert, il faut commencer par le fermer, et si tu le fermes, la macro ne pourrra plus fonctionner !
Conclusion : la macro doit être dans un autre document, le normal.dotm ou un complément.
m@rina
-
-
-
Bonjour m@rina :) Et bien j'ai un dossier "Documents en cours de traitement" et un dossier "documents traités". J'aurai aimé qu'en une macro on déplace le document qui est en cours dans "documents traités". Sinon je peux faire une mini appli qui s'ouvre (un autre excel) pour gérer ces mouvements s'il n'y a pas d'autres moyens ^^
-
Bonsoir
C'est possible avec Word, mais il faut à ce moment-là créer un complément, de façon à ce que la macro ne se trouve pas dans le fichier à déplacer.
Ce complément va simplement faire un enregistrer sous dans le nouveau dossier, puis va supprimer le fichier "en cours".
Donc, tu crées un nouveau document vide, tu y mets la macro suivante :Sub changer()
Dim NomFichier As String, AncienFichier As String, NouveauChemin As String
AncienFichier = ActiveDocument.FullName
NouveauChemin = "c:\nouveau_chemin\"
NomFichier = ActiveDocument.Name
ActiveDocument.SaveAs2 FileName:=NouveauChemin & NomFichier
Kill AncienFichier
End Sub
et tu l'enregistres dans le dossier Startup de Word qui se trouve ici par défaut :
C:\Users\nom User\AppData\Roaming\Microsoft\Word\STARTUP
Ton fichier sera automatiquement considéré comme un complément car il sera chargé à chaque fois que tu ouvriras Word. Tu as d'ailleurs intérêt à mettre un bouton sur la barre d'outils Accès rapide pour lancer la macro.
Je te laisse mettre tes alertes si nécessaire. ;)
m@rina
-
-
Bonjour,
comme dit m@rina, tu ne peux obliger la macro à se 'suicider'.
En plus de gérer ça dans une macro hors du document tu peux aussi faire un fichier batch (scripts vbs) que tu écris et lance à la fermeture, et qui s'occupera du déplacement.
Ici différentes façon de retarder un .bat : https://fr.wikihow.com/retarder-un-fichier-Batch
eric