Inclure le texte de signets dans nom de fichier word [Résolu]

Messages postés
10
Date d'inscription
lundi 24 mars 2014
Dernière intervention
20 août 2014
-
bonjour nouveau sur ce forum et débutant en vba.

je suis entrain de créer une macro en vba pour enregistrer automatiquement un fichier Word qui à été créer à partir d'un modèle.

je désirerais insérer le texte de deux signets dans le nom du fichier mais je rencontre un problème une erreur

voici le code que j'ai écris

Objet = ActiveDocument.Bookmarks("signet").Range.Text
Envoie = ActiveDocument.Bookmarks("signet3").Range.Text

ActiveDocument.SaveAs FileName:=Objet & Envoie & ".doc"

Objet désigne l'objet de mon courrier c'est du texte faisant partie de mon document que écris a chaque nouveau document.

Envoie désigne le mode d'envoie du courrier (fax, lettre simple, recommandé etc ...) c'est du texte faisant partie d'une liste déroulante incluse dans mon document.

que je mette soit Objet ou Envoie tout seul le résultat est le même.

pourtant le texte de Objet et Envoie sont bien récupéré mais le fichier ne s'enregistre pas : ERREUR

erreur d'exécution '5487':

Impossible de terminer l'enregistrement:erreur d'autorisation d'accès au fichier.


si quelqu'un pouvais me donner un coup de main ca serait super sympa, merci
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
23584
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2018
1
Merci
Bonjour,

Tu peux essayer comme ça :

Objet = ActiveDocument.Bookmarks("signet").Range.Text
Envoie = ActiveDocument.Bookmarks("signet3").Range.Text
newName = Objet & Envoie & ".doc"
Debug.Print newName
ActiveDocument.SaveAs FileName:=newName

Au cas où.. tu n'as pas de caractères spéciaux dans tes variables ?
- retour à la ligne
- Slash
- Apostrophes ..
- Points d'interrogation ou d'exclamation...
???

Si ça ne fonctionne toujours pas, marques nous ici ce que donne le résultat de : Debug.Print newName

Merci jordane45 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Over.Slash
Messages postés
10
Date d'inscription
lundi 24 mars 2014
Dernière intervention
20 août 2014
-
j'avais effectivement un retour à la ligne dans les signets, merci pour ton aide.

maintenant je peux vous donner mon code en entier puisque il fonctionne

Sub Macro1()

'Enregistrement auto du fichier

attention = ActiveDocument.MailMerge.DataSource.DataFields(1).Value
contact = ActiveDocument.MailMerge.DataSource.DataFields(3).Value
fonction = ActiveDocument.MailMerge.DataSource.DataFields(4).Value
designation = ActiveDocument.MailMerge.DataSource.DataFields(5).Value
agence = ActiveDocument.MailMerge.DataSource.DataFields(6).Value
service = ActiveDocument.MailMerge.DataSource.DataFields(7).Value

Objet = ActiveDocument.Bookmarks("Objet").Range.Text
Envoie = ActiveDocument.Bookmarks("Envoie").Range.Text

ActiveDocument.SaveAs FileName:="C:\Users\Corsaire 98\Documents\Courriers\Courrier " & attention & " " & contact & " " & fonction & " " & designation & " " & agence & " " & service & " - " & Objet & " - " & Envoie & " - " & Format(Date, "dd-mm-yyyy") & ".doc"

End Sub


merci encore
Commenter la réponse de jordane45
Messages postés
10
Date d'inscription
lundi 24 mars 2014
Dernière intervention
20 août 2014
1
Merci
je ne sais pas si je peux ajouter cela a ce pose ou si il faut que j'en ouvre un autre pour traiter un autre sujet toujours lié a ce même code pour y ajouté des commandes

car je m'aperçois maintenant que dans mon nom de fichier j'ai parfois des espaces de trop due au champs vide si ils ne sont pas renseignés.

je pensais ajouté une fonction If de cette façon.

ActiveDocument.SaveAs FileName:=... & If (attention="" then "" else attention & " ")  ... & ".doc" 

si le champ attention est vide vba le désigne comme "".

si c'est le cas je voudrais que " " devienne "" dans mon nom de fichier,

si non que le champ attention apparaisse suivie d'un " ".

et ainsi de suite pour tous les autres champs inclus dans mon nom de fichier.

je sais utiliser la fonction SI sous excel et IF en basic mais en vba, quelqu'un pourrais me renseigner ?

merci par avance.

Merci Over.Slash 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Over.Slash
Messages postés
23584
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 décembre 2018
1
Merci
Pas de soucis.
Par contre :
1 - vu que ta question est résolue ( ta seconde question ayant été également traitée dans ton autre discussion), merci de passer le sujet en clos en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de ta question.

2 - Dans ta concaténation... attention à ce que ton nom de fichier + le chemin où tu le stockes ne dépasse pas les 256 caractères (Windows a tendance à ne pas aimer...)

3 - Il existe une fonction en VBA qui permet de retirer les espaces qui se trouvent avant et après une chaine de caractères... ainsi plus besoin de tes if.. TRIM

Objet = trim(ActiveDocument.Bookmarks("Objet").Range.Text)
Envoie = trim(ActiveDocument.Bookmarks("Envoie").Range.Text)


Tu pourrais même te faire une fonction de "nettoyage" de tes chaines de caractères pour retirer tous les caractères "gênants"
Function strClean(str) As String
' Fonction de nettoyage de chaine de caractères
    If IsEmpty(str) Then strClean ""
    Dim strTmp As String
    str = Replace(str, "'", "")
    str = Replace(str, Chr(8), "")
    str = Replace(str, Chr(9), "")
    str = Replace(str, Chr(10), "")
    str = Replace(str, Chr(11), "")
    str = Replace(str, Chr(12), "")
    str = Replace(str, Chr(13), "")
    str = Replace(str, "?", "")
    str = Replace(str, "!", "")
    str = Replace(str, "/", "")
    str = Replace(str, "\", "")
    str = Replace(str, ":", "")
    str = Replace(str, ";", "")
    str = Replace(str, ",", "")
    str = Replace(str, "$", "")
    str = Replace(str, " ", "")
    str = Replace(str, """", "")
    ' On retourne la chaine néttoyée
    strClean = Trim(str)
End Function

( normalement je te l'aurai fait via un REGEX (expréssions régulières) mais ça complique les choses pour pas grand chose...)

et donc pour récupérer tes variables tu ferais :
Objet = strClean(ActiveDocument.Bookmarks("Objet").Range.Text)
Envoie = strClean(ActiveDocument.Bookmarks("Envoie").Range.Text)



Voilou.
Cordialement,
Jordane.

Merci jordane45 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Over.Slash
Messages postés
10
Date d'inscription
lundi 24 mars 2014
Dernière intervention
20 août 2014
-
ha oui ca c'est vraiment super le nettoyage de chaine, car en effet comme il s'agit de texte qui est repris pour edit le nom de fichier a l'enregistrement ca peut poser des problèmes temporaires si il y a effectivement des caractaires non autorisée
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.