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

Résolu/Fermé
TeaCup - 24 sept. 2020 à 15:58
 TeaCup - 1 oct. 2020 à 17:37
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
A voir également:

4 réponses

m@rina Messages postés 20070 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 24 avril 2024 11 271
25 sept. 2020 à 01:42
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
0
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
0
m@rina Messages postés 20070 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 24 avril 2024 11 271
30 sept. 2020 à 17:38
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

0
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 =)
0