Sauvegegarder le document avec un nom trouvé dans ce doc

Fermé
philoche63 Messages postés 14 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 2 août 2019 - 6 janv. 2015 à 09:40
C-Claire Messages postés 4014 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 3 octobre 2016 - 6 janv. 2015 à 15:54
Bonjour,
Encore un problème avec une macro :
Avec l'aide précieuse de C-Claire j'ai une macro qui me permet de découper un fichier word selon les sauts de page. Voici cette macro :

Sub BreakOnPage()
' Used to set criteria for moving through the document by page.
Application.Browser.Target = wdBrowsePage

For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

'Select and copy the text to the clipboard.
ActiveDocument.Bookmarks("\page").Range.Copy

' Open new document to paste the content of the clipboard into.
Documents.Add
ligne = Cells(4, 4)
Selection.Paste
' Removes the break that is copied at the end of the page, if any.
Selection.TypeBackspace
ChangeFileOpenDirectory "F:\PDF CREATOR\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
ActiveDocument.Close

' Move the selection to the next page in the document.
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub



Maintenant, je voudrais que le fichier word généré porte le nom de la personne que je retrouve sur la 26e ligne du document. Cette ligne se présente comme cela :
"Article 1er : La situation de Madame Francois MARTIN, "

comment faire pour que mon document soit sauvegardé sous la forme "MARTIN Francois" ?

Est ce possible sous VBA Word ?

Un grand merci par avance de votre aide !
Excellente journée

Philippe



4 réponses

philoche63 Messages postés 14 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 2 août 2019
6 janv. 2015 à 11:34
Merci de ta réponse mais à priori ca ne marche pas car je travaille sur le résultat de la fusion et donc je n'ai plus mes champs de fusion.

J'ai utilisé l'enregistreur de macro, j'ai vu le code généré mais comment faire quand je suis sur la ligne où se trouve le nom et le prénom pour dire que le prénom se situe entre le 7e et le 8e espace et que le nom se trouve se trouve se situe en le 8e et le 9e espace ??

Encore merci pour ton aide.
0
C-Claire Messages postés 4014 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 3 octobre 2016 2 217
6 janv. 2015 à 12:46
Tu as raison, j'ai oublié que la fusion était terminée.

Tu peux utiliser l'instruction suivante qui sélectionne le 8e mot de la ligne et qui le copie
Selection.MoveRight Unit:=wdWord, Count:=7, Extend:=wdExtend
Selection.Copy
Tu modifies la valeur Count pour le mot suivant.

Autres pistes sans doute meilleures : utiliser des signets dans ton document type afin que le prénom et le nom soient identifiés et que tu puisses t'y référer dans le résultat de la fusion et donc dans l'instruction SaveAs ou utiliser les propriétés du document et y plaçant le nom et le prénom.

C-Claire
0
philoche63 Messages postés 14 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 2 août 2019 > C-Claire Messages postés 4014 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 3 octobre 2016
6 janv. 2015 à 14:00
Etant complètement nul en macro, j'ai encore besoin de tes lumières !
Comment lui faire comprendre que je veux mettre le 7e mot dans une variable 'NomAgent' ?

Nous avons utilisé l'enregistreur de macro pour arriver sur la ligne où se trouve le nom de la personne (ce sont les lignes qui commencent par Selection.
Voici le code :
Sub BreakOnPage()
' Used to set criteria for moving through the document by page.
Application.Browser.Target = wdBrowsePage

For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

'Select and copy the text to the clipboard.
ActiveDocument.Bookmarks("\page").Range.Copy

' Open new document to paste the content of the clipboard into.
Documents.Add
Selection.PasteAndFormat (wdFormatOriginalFormatting)
' Removes the break that is copied at the end of the page, if any.
Selection.MoveDown Unit:=wdLine, Count:=25
Selection.MoveRight Unit:=wdCharacter, Count:=23
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=16, Extend:=wdExtend
Selection.Copy
Selection.TypeBackspace
ChangeFileOpenDirectory "F:\PDF CREATOR\"
DocNum = DocNum + 1
ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
ActiveDocument.Close

' Move the selection to the next page in the document.
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub


Concernant les signets j'y crois pas trop étant donné que le document de fusion est pris en charge par notre logiciel de paie pour la génération de ce publipostage mais je vais me renseigner pour les prochaines fois.

Un grand merci pour ton aide.

a+
0
C-Claire Messages postés 4014 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 3 octobre 2016 2 217 > philoche63 Messages postés 14 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 2 août 2019
6 janv. 2015 à 14:20
On va faire quelque chose de plus propre et de plus court en utilisant la position du mot plutôt que sa sélection par déplacement du curseur.
Tu as dit que la personne est sur la 26e ligne. Si tes lignes = des paragraphes alors tu indiques bien (26) dans l'instruction ci-dessous. Si ce sont des lignes, compte les paragraphes.

Prenom = ActiveDocument.Paragraphs(26).Range.Words(8)
Nom = ActiveDocument.Paragraphs(26).Range.Words(9)
ActiveDocument.SaveAs FileName:= Nom & " " & Prenom & ".docx"

Les 2 premières instructions mémorisent les nom et prénom.

C-Claire
0
philoche63 Messages postés 14 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 2 août 2019 > C-Claire Messages postés 4014 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 3 octobre 2016
6 janv. 2015 à 14:31
Cette vrai que cette solution est plus simple (d'ailleurs j'ai presque tout compris ;-) )
Mais cette fois-ci il bloque et j'ai le message :
"le membre de la collection requis n'existe pas"
Qu'en dis tu ?
merci pour ton aide
a+
0
C-Claire Messages postés 4014 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 3 octobre 2016 2 217 > philoche63 Messages postés 14 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 2 août 2019
6 janv. 2015 à 14:48
Je suis désolée, comme je suis sur plusieurs dossiers en dehors du forum, j'ai fait vite.
Il faut déclarer les variables. Sous la "Sub" ajoute
Dim Prenom
Dim Nom

C-Claire
0
philoche63 Messages postés 14 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 2 août 2019
6 janv. 2015 à 15:12
Avec votre aide, je suis tout proche du but !
J'ai bien recompté les paragraphes et la ligne où se trouve le nom de la personne se situe sur la 21e ligne.
Pour la 1ere fois la macro enregistre avec le nom de la personne mais pas sur le fichier découpé mais sur le publipostage.

Je vous redonne le code car étant novice, j'ai pas du mettre le code au bon endroit !

Sub BreakOnPage()
' Used to set criteria for moving through the document by page.
Application.Browser.Target = wdBrowsePage

For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages")

'Select and copy the text to the clipboard.
ActiveDocument.Bookmarks("\page").Range.Copy

' Open new document to paste the content of the clipboard into.
Documents.Add
Selection.PasteAndFormat (wdFormatOriginalFormatting)
' Removes the break that is copied at the end of the page, if any.
Selection.TypeBackspace
ChangeFileOpenDirectory "F:\PDF CREATOR\"
'DocNum = DocNum + 1
Prenom = ActiveDocument.Paragraphs(21).Range.Words(7)
Nom = ActiveDocument.Paragraphs(21).Range.Words(8)
ActiveDocument.SaveAs FileName:=Nom & " " & Prenom & ".doc"

' ActiveDocument.SaveAs FileName:="test_" & DocNum & ".doc"
ActiveDocument.Close

' Move the selection to the next page in the document.
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub



Un grand merci pour votre aide et votre patience !
a+
Philippe
0
philoche63 Messages postés 14 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 2 août 2019
6 janv. 2015 à 15:47
ne cherchez plus c'est bon !
Un GRAND GRAND MERCI pour votre aide !
a+
Philippe
0
C-Claire Messages postés 4014 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 3 octobre 2016 2 217
6 janv. 2015 à 15:54
Moi, je ne cherchais plus... j'attendais que tu trouves et que tu nous donnes la réponse ;-)

C-Claire, curieuse...
0
C-Claire Messages postés 4014 Date d'inscription samedi 8 novembre 2014 Statut Membre Dernière intervention 3 octobre 2016 2 217
6 janv. 2015 à 11:14
Bonjour Philippe et merci, mais je n'ai fait que t'envoyer chez Microsoft :-)

Si le nom et le prénom de la personne sont dans 2 champs de fusion, tu devrais pouvoir récupérer leur valeur à l'aide de .DataFields.

Cela pourrait donner quelque chose comme :

Prenom = ActiveDocument.MailMerge.DataSource.DataFields(1).Value
Nom = ActiveDocument.MailMerge.DataSource.DataFields(2).Value

ActiveDocument.SaveAs FileName:=Nom & " " & Prenom & ".doc"

(1) et (2) sont les numéros d'ordre des champs dans ton fichier de données.
Si tu es sous Word 2007 ou ultérieur, tu peux enregistrer au format .docx.

Je ne suis pas une pro du VBA. Il y aura sans doute d'autres suggestions.
-1