Macro à supprimer

Résolu/Fermé
nicolas - 7 juil. 2016 à 11:10
tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 - 8 juil. 2016 à 00:14
Bonjour,

j'ai un fichier word sous forme de formulaire qui se remplit directement à partir des infos inscrites dans une base de données excel afin d'éviter les doubles saisies.

Ce fichier word intègre une macro qui permet de l'enregistrer sous un nom précis et sous un répertoire précis (avec les infos du formulaire).

Cependant mon soucis actuel est que la macro reste présente dans les fichiers word.
J'aurais aimé qu'elle soit supprimé après l'enregistrement car aujourd'hui j'ai plusieurs centaines de document word qui ont cette macro et ça devient fastidueux de l'effacer un à un.
Je vous colle la macro. Que faut il ajouter pour que la macro ne soit plus présente dans les fichiers enregistrés ?

Private Sub Document_Close() 'macro s'active en cliquant sur la croix de fermeture

'défini les variables
Dim nom As String
Dim répertoire As String

'défini le chemin du répertoire
répertoire = "\\Chemin$\CONTROLE\Bilan\Année " '!!! attention chemin d'accès à modifier si nécessaire"

On Error Resume Next
' vérifie l'existence du répertoire année, sinon le créé
ChDir répertoire & Year(Date) 'vérifie
If Err <> 0 Then
MkDir répertoire & Year(Date) 'création si inexistant
End If

' vérifie l'existence du répertoire Non conformité, sinon le créé
ChDir répertoire & Year(Date) & "\Non conformité" 'vérifie
If Err <> 0 Then
MkDir répertoire & Year(Date) & "\Non conformité" 'création si inexistant
End If

' vérifie l'existence du répertoire fournisseur, sinon le créé
ChDir répertoire & Year(Date) & "\Non conformité\" & ActiveDocument.FormFields(2).Result 'vérifie
If Err <> 0 Then
MkDir répertoire & Year(Date) & "\Non conformité\" & ActiveDocument.FormFields(2).Result 'création si inexistant avec prise en compte de la boite à texte 2 (fournisseur)
End If

' vérifie l'existence du sous répertoire du nom de la référence de la NC, sinon le créé
ChDir répertoire & Year(Date) & "\Non conformité\" & ActiveDocument.FormFields(2).Result & "\" & ActiveDocument.FormFields(1).Result 'vérifie
If Err <> 0 Then
MkDir répertoire & Year(Date) & "\Non conformité\" & ActiveDocument.FormFields(2).Result & "\" & ActiveDocument.FormFields(1).Result 'création si inexistant avec prise en compte de la boite à texte 2 (fournisseur) et boite à texte 1 (n° de la NC)
End If


'sauvegarde du document
'se place dans le répertoire correspondant
ChangeFileOpenDirectory répertoire & Year(Date) & "\Non conformité\" & ActiveDocument.FormFields(2).Result & "\" & ActiveDocument.FormFields(1).Result

'défini la nomenclature type du nom du fichier word
nom = ActiveDocument.FormFields(1).Result & " " & ActiveDocument.FormFields(2).Result

'vérifie l'existence du fichier word
If Dir(nom & ".doc") <> "" Then
'le fichier existe déjà, proposition de l'écraser ou non
Dim Rep As VbMsgBoxResult
Rep = MsgBox("Le fichier existe déjà, voulez vous écraser la version précédente ?", vbYesNo + vbQuestion, "Confirmation de sauvegarde")
'clic sur oui, document word est écrasé
If Rep = vbYes Then
ActiveDocument.SaveAs FileName:=nom & ".doc", FileFormat:=wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
End If
'clic sur non, le document peut être sauvegardé en modifiant le nom
Else
ActiveDocument.SaveAs FileName:=nom & ".doc", FileFormat:=wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
End If



End Sub


A voir également:

4 réponses

thev Messages postés 1855 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 13 mai 2024 683
7 juil. 2016 à 11:34
Bonjour,

Si vous êtes sous Word 2010 ou supérieur, la solution la plus simple est d'enregistrer au format .docx , ce qui vous supprimera automatiquement toute macro.
ActiveDocument.SaveAs FileName:=nom, FileFormat:=wdFormatDocumentDefault,  
0
bonjour,

j'ai remplacé mes 2 lignes qui commencent par ActiveDocument par la votre, j'enregistre, je ferme, j'ouvre le même fichier mais j'ai encore la macro.
Peut être dois je placer la ligne à un endroit précis ?
0
nicolas > nicolas
7 juil. 2016 à 11:49
j'ai vu ce que je devais modifier pour que ça fonctionne.
c'est parfait et simple.

Merci beaucoup
0
tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 2 032
7 juil. 2016 à 12:01
Bonjour, tu peux tester l'un des deux codes proposés sur https://www.developpez.net/forums/d206413/logiciels/microsoft-office/word/vba-word/vba-w-destruction-d-macro/ et l'ajouter à ton code afin qu'il supprime ta macro. En l'exécutant, une erreur va apparaitre (je viens aussi de l'avoir en testant) et pour la contourner il faut autoriser le VBA à s'exécuter. Cela se fait dans le centre de de gestion de la confidentialité dans les versions d'Office 2007 et supérieures en cochant "Accès au modèle VBA"

https://support.microsoft.com/fr-fr/help/282830/programmatic-access-to-office-vba-project-is-denied (aide Microsoft)
0
intéressant aussi.
merci
0
du coup j'ai plusieurs centaines de documents word intégrant la macro initiale, avez vous une technique pour supprimer la macro de tous ces documents sans le faire l'un après l'autre comme je fais actuellement pour nettoyer l'historique.
j'ouvre chaque document word, onglet développeur, VB, CTRL A; supprimer, CTRL S et fermer et je passe au suivant
0
tyranausor Messages postés 3545 Date d'inscription jeudi 6 août 2009 Statut Membre Dernière intervention 1 avril 2022 2 032
8 juil. 2016 à 00:14
A part tout faire à la main, je ne sais pas comment automatiser tout ça. Peut-être qu'une macro pourrait ouvrir chaque document et supprimer le module en question contenant la macro mais aucune idée pour le code.
0