Macro Word - Récupérer contenu spécifique (nom) et en faire le titre du doc [Résolu]

Signaler
-
 TeaCup -
Bonjour à tous,

J'ai un document Word que je dois remplir avec des infos du type : nom prénom numéro du ticket.
J'utilise une macro afin de récupérer le nom, prénom et numéro du ticket dans le document et il sauvegarde le document avec le bon nom.

La macro :
Sub NomDoc()
'
Dim NomDoc
Nom = ActiveDocument.Paragraphs(13).Range.Words(15)
Prenom = ActiveDocument.Paragraphs(13).Range.Words(16)
Ticket = ActiveDocument.Paragraphs(13).Range.Words(17)
NomModel = ActiveDocument.Paragraphs(13).Range.Words(8)
ActiveDocument.SaveAs FileName:="C:\Users\test\Documents\" & "LE - " & Nom & Prenom & Ticket & " - " & NomModel & ".doc"
'
End Sub


Le seul problème c'est que cela ne fonctionne pas avec les noms composé comme Jean-Philippe etc...

Avez vous une solution ?

Cordialement,

TeaCup

4 réponses

Messages postés
16600
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
13 octobre 2020
9 805
Bonjour,

Le tiret est considéré par un mot à part entière.
Une solution est de supprimer ce tiret dans la sauvegarde du fichier. Donc pour le nom du fichier, au lieu d'avoir DUPUIS Jean-Pierre, tu auras DUPUY JeanPierre. Personnellement j'ajouterais des _ entre chaque élément du nom.

Pour supprimer les tirets :

Sub sauvegarde()
Dim myrange As Range, chemin As String, mot As Variant
Dim texte As String, NomDoc As String
Dim Nom, Prenom, Ticket, NomModel

chemin = "C:\Users\test\Documents\"
Set myrange = ActiveDocument.Paragraphs(13).Range
texte = myrange.Text
For Each mot In myrange.Words
If mot.Text = "-" Then mot.Delete
Next mot

With myrange
Nom = .Words(15)
Prenom = .Words(16)
Ticket = .Words(17)
NomModel = .Words(8)
End With
NomDoc = chemin & "LE - " & Nom & Prenom & Ticket & NomModel & ".docx"
With ActiveDocument
.SaveAs FileName:=NomDoc
.Paragraphs(1).Range.Text = texte
.Save
End With
End Sub


m@rina
Bonjour m@rina,

Réponse un peu tardive mais merci pour votre aide cela va beaucoup m'aider.
C'est en effet beaucoup plus "propre" avec la méthode range.

Au lieu de supprimer le - avec la méthode "Delete", est t'il possible d'ajouter un espace a la place ? hmm.

Désolé pour les questions bête je suis une bille ^^

TeaCup
Messages postés
16600
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
13 octobre 2020
9 805
Bonjour,

Une espace c'est un peu plus compliqué, car c'est justement l'espace qui définit le mot (entre autres).
Donc, on va tromper Word, on va remplacer le tiret par n'importe quoi, et ensuite on va remplacer le n'importe quoi par l'espace. J'ai modifié la macro et ici j'ai mis "zz" pour le n'importe quoi. Tu peux mettre bien ce que tu veux à la place, car si quelqu'un s'appelle Jazz... il aura tout faux !!!

m@rina

 Sub sauvegarde()
Dim myrange As Range, chemin As String, mot As Variant
Dim texte As String, NomDoc As String, NomDoc2 as String
Dim Nom, Prenom, Ticket, NomModel

chemin = "C:\Users\test\Documents\"
Set myrange = ActiveDocument.Paragraphs(13).Range
texte = myrange.Text
For Each mot In myrange.Words
If mot.Text = "-" Then mot.Text = "zz"
Next mot

With myrange
Nom = .Words(15)
Prenom = .Words(16)
Ticket = .Words(17)
NomModel = .Words(8)
End With
NomDoc = chemin & "LE - " & Nom & Prenom & Ticket & NomModel & ".docx"
NomDoc2=Replace(NomDoc, "zz", " ")
With ActiveDocument
.SaveAs FileName:=NomDoc2
.Paragraphs(1).Range.Text = texte
.Save
End With
End Sub

Bonjour,

C'est parfait !
Adieu les prises de têtes avec les noms de fichiers a écrire à la main à chaque fois. Bonjour la facilité ^^

Merci m@rina =)